IOS解析歌词lrc

王朝学院·作者佚名  2016-08-27
窄屏简体版  字體: 小  |  中  |  大  |  超大  

最近在捣鼓音乐播放器,过程中学到了一些东西,写下来分享一下,首先是歌词的解析首先我们看看lrc(不贴维基了怕打不开歌词文件一般是这样的格式1.[分钟:秒.毫秒] 歌词2. [分钟:秒] 歌词3. [分钟:秒:毫秒] 歌词其中1是标准格式,下面我就一种为例。思路是先获取整个歌词内容,再按换行分段,对每一行中的内容,分为两部分,时间和内容,分别提取。-(void)parselyric

{

NSString *path = [[NSBundle mainBundle]pathForResource:_lab_title.text ofType:@"lrc"];

//if lyric file exits

if ([path length]) {

//get the lyric string

NSString *lyc = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];

//init

_musictime = [[NSMutableArray alloc]init];

_lyrics = [[NSMutableArray alloc]init];

_t = [[NSMutableArray alloc]init];

NSArray *arr = [lyc componentsSeparatedByString:@"\n"];

for (NSString *item in arr) {

//if item is not empty

if ([item length]) {

NSRange startrange = [item rangeOfString:@"["];

NSLog(@"%d%d",startrange.length,startrange.location);

NSRange stoPRange = [item rangeOfString:@"]"];

NSString *content = [item substringWithRange:NSMakeRange(startrange.location+1, stoprange.location-startrange.location-1)];

NSLog(@"%d",[item length]);

//the music time format is mm.ss.xx such as 00:03.84

if ([content length] == 8) {

NSString *minute = [content substringWithRange:NSMakeRange(0, 2)];

NSString *second = [content substringWithRange:NSMakeRange(3, 2)];

NSString *mm = [content substringWithRange:NSMakeRange(6, 2)];

NSString *time = [NSString stringWithFormat:@"%@:%@.%@",minute,second,mm];

NSNumber *total =[NSNumber numberWithInteger:[minute integerValue] * 60 + [second integerValue]];

[_t addObject:total];

NSString *lyric = [item substringFromIndex:10];

[_musictime addObject:time];

[_lyrics addObject:lyric];

}

}

}

}

else

_lyrics = nil;

}

这里我只处理里标准格式的歌词,其它格式也可用类似方法处理。

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航