您的位置:首页 > 其它

OC歌词解析

2015-12-12 00:00 197 查看
摘要: 歌词解析

@implementation QFLrcMessage- (NSString *)description
{
return [NSString stringWithFormat:@"\n曲目名:%@\n艺术家:%@\n", _ti,_ar];
}@end@interface QFLrcModel : NSObject/**时间*/
@property (nonatomic)CGFloat time;
/**歌词*/
@property (nonatomic)NSString * lrc;@end#import "QFLrcManager.h"
#define PATH @"/Users/qianfeng/Downloads/歌词解析/qfile.txt"
@implementation QFLrcManager{
/**歌词数组*/
NSMutableArray * _lrcArray;
// QFLrcMessage * _msModel;
}
- (instancetype)init
{
self = [super init];
if (self) {
_lrcArray = [NSMutableArray array];
_msModel = [[QFLrcMessage alloc] init];
}
return self;
}//1、将文件的信息读入当前工程
-(NSString *)readFileWithPath:(NSString *)path
{
NSString * str = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
return str;
}//2、解析文件信息
-(void)analysisFile
{
//1、将文件信息读入字符串中
NSString * lrcsStr = [self readFileWithPath:PATH];
//2、按行切分
NSArray * linesArray = [lrcsStr componentsSeparatedByString:@"\n"];
//3、遍历每一行,按照行信息分别切分曲目或者歌词
for (NSString * lineStr in linesArray) {
//(1)剔除空格行
if ([lineStr isEqualToString:@""]) {
continue;
}
//(2)切割
if ([lineStr hasPrefix:@"[0"]) {
//说明这一行是歌词,进入歌词解析模式
[self analysisLrc:lineStr];
}else{
//说明这一行是曲目信息,解析曲目
[self analysisMessageWithStr:lineStr];
}}}
/**解析歌词的方法*/
-(void)analysisLrc:(NSString *)str
{
NSArray * lrcArray = [str componentsSeparatedByString:@"]"];
//切完后的数组每一个元素
//[04:40.75\0[02:39.90\0[00:36.25\0只是因为在人群中多看了你一眼\0
for (NSString * lStr in lrcArray) {
if ([lStr hasPrefix:@"["]) {
QFLrcModel * lrcModel = [[QFLrcModel alloc] init];
lrcModel.time = [self timeFromStr:lStr];
lrcModel.lrc = [lrcArray lastObject];
[_lrcArray addObject:lrcModel];
}
}
}//把字符串转化成时间
-(CGFloat)timeFromStr:(NSString *)str
{
//时间的格式[04:40.75
NSArray * array = [str componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"[:"]];
CGFloat munite = [array[1] doubleValue];
CGFloat second = [array[2] doubleValue];
return munite * 60 + second;}
//解析曲目
-(void)analysisMessageWithStr:(NSString*)str
{
// [ti:传奇]
// \0ar\0王菲\0NSArray * array = [str componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"[:]"]];
if ([array[1] isEqualToString:@"ti"]) {
_msModel.ti = array[2];
}else if([array[1] isEqualToString:@"ar"]){
_msModel.ar = array[2];
}}//3、对歌词数组进行排序,按时间顺序排
-(void)sortLrcWithtime
{
for (NSInteger i = 0; i < [_lrcArray count] - 1; i++) {
for (NSInteger j = 0; j < [_lrcArray count] - 1 - i; j++) {
if ([_lrcArray[j] time] < [_lrcArray[j + 1] time]) {
[_lrcArray exchangeObjectAtIndex:j withObjectAtIndex:j+1];
}
}
}}
//4、给一个时间,返回一句歌词
-(NSString *)lrcForTime:(CGFloat)time
{
NSInteger i ;
for (i = [_lrcArray count] - 1; i >= 0; i--) {
if ([[_lrcArray objectAtIndex:i] time] > time) {
return [[_lrcArray objectAtIndex:i] lrc];
}
}
return nil;
}+(void)test
{
QFLrcManager * manager = [[QFLrcManager alloc] init];
[manager analysisFile];
[manager sortLrcWithtime];
for (NSString * str in manager->_lrcArray) {
NSLog(@"%@",str);
}
// NSLog(@"%@",manager->_lrcArray);
// int i = 0;
// while (i++ < 500) {
// system("clear");
// NSLog(@"%@",manager.msModel);
// NSLog(@"%@",[manager lrcForTime:i]);
// sleep(1);
// }}
@end
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  歌词解析