iOS 音乐播放器歌词解析

  • 目前常接触的歌词格式


    iOS 音乐播放器歌词解析_第1张图片

  • 未来会接触的歌词格式(我没接触过)


    iOS 音乐播放器歌词解析_第2张图片

看到这歌词就懵逼,但我觉得这应该有两个属性,一个是time,一个是歌词

  • 首先根据读取歌词
  • 扣除多余部分


    iOS 音乐播放器歌词解析_第3张图片
  • 根据每句歌词中间的“]”创建模型
//放开一个方法根据歌词名解析
/** 歌词名 */
@property (nonatomic, copy) NSString *lrcName;

#pragma mark - 重写lrcName
- (void)setLrcName:(NSString *)lrcName
{
    // 1.记录歌词名
    _lrcName = lrcName ;
    
    // 2.model解析歌词
    self.lrcList = [ZJLrcTool lrcToolWithLrcName:lrcName];
    
    // 3.刷新表格
    [self.tableView reloadData];
}
#import 

@interface ZJLrcLine : NSObject

@property (nonatomic, copy) NSString *text;
@property (nonatomic, assign) NSTimeInterval time;

- (instancetype)initWithLrcLineString:(NSString *)lrcLineString;
+ (instancetype)LrcLineString:(NSString *)lrcLineString;

@end
#import "ZJLrcLine.h"

@implementation XMGLrcLine

- (instancetype)initWithLrcLineString:(NSString *)lrcLineString
{
    if (self = [super init]) {
        // [01:02.38]想你时你在天边
        NSArray *lrcArray = [lrcLineString componentsSeparatedByString:@"]"];
        self.text = lrcArray[1];
        self.time = [self timeWithString:[lrcArray[0] substringFromIndex:1]];
        
    }
    return self;

}

+ (instancetype)LrcLineString:(NSString *)lrcLineString
{
    return [[self alloc] initWithLrcLineString:lrcLineString];
}

- (NSTimeInterval)timeWithString:(NSString *)timeString
{
    // 01:02.38
    NSInteger min = [[timeString componentsSeparatedByString:@":"][0] integerValue];
    NSInteger sec = [[timeString substringWithRange:NSMakeRange(3, 2)] integerValue];
    NSInteger hs = [[timeString componentsSeparatedByString:@"."][1] integerValue];
    return min * 60 + sec + hs * 0.01;
}

@end

最终效果


iOS 音乐播放器歌词解析_第4张图片

对于这种将来有时间在补全具体代码!无非就是生成数组的时候判断,以“]”划分会生成四部分,判断数组的count如果大于2个,每一个分别和最后一个都创建一个模型!

(需要数组从新排序,根据时间)ß

iOS 音乐播放器歌词解析_第5张图片

你可能感兴趣的:(iOS 音乐播放器歌词解析)