main.m代码:
#import <Foundation/Foundation.h>
#define LYRICPATH @"你歌词的绝对路径"
#import "LyricStaterChange.h"
int main(int argc,const char * argv[]) {
LyricStaterChange *ly=[LyricStaterChangenew];
[ly ConvertLyric:LYRICPATH];
[NSTimerscheduledTimerWithTimeInterval:1target:ly selector:@selector(player)userInfo:nilrepeats:YES];//定义定时器第一个元素为一,表示每隔1秒循环一次 执行的对象是ly 执行的方法是player 是重复的
[[NSRunLoopmainRunLoop]run];//必须有这行代码,定时器才可以一直运行
return0;
}
LyricStaterChange.h 代码
#import <Foundation/Foundation.h>
@interface LyricStaterChange :NSObject
{
NSMutableArray *_Lyric;//定义可变数组便于存储被切割后的歌词
NSTimeInterval _timecont;//定义时间计数变量
}
-(void)ConvertLyric:(NSString *)file;
-(void)player;
@end
LyricStaterChange.m代码
#import "LyricStaterChange.h"
@implementation LyricStaterChange
-(void)ConvertLyric:(NSString *)file
{
NSString *lyricstr=[NSStringstringWithContentsOfFile:file encoding:NSUTF8StringEncodingerror:nil];//定义lyricstr字符串用来储存FILE相对应地址所对应文件里的内容
NSLog(@"%@",lyricstr);//
NSLog(@"======================");//
NSArray *lyricarray=[lyricstrcomponentsSeparatedByString:@"\n"];//将lyricstr字符串切割切割点是\n并且存入数组lyricarray中
_Lyric=[NSMutableArrayarray];//将lyricarray转换成一个可变数组
for (NSString *stringin lyricarray) {//定义String字符串并且如果运行次数和lyricarray的长度一样,并将lyricarray中的数据以字符串的方式赋值给String
NSArray *subarr=[stringcomponentsSeparatedByString:@"]"];//将String中的数据切割切割点是] 并将切割号的数据按照数组的方式赋值给subarr
if ([subarrcount]>1) {//如果subarr的元素数值>1就执行下面的语句
NSString *timestr=subarr [0];//将subarr数组的第一个元素(也就是切割前]前面的数据)赋值给字符串timerstr
NSTimeInterval interval;//(NSTimeInterval aTimer = [date2 timeIntervalSinceDate:date1];获取data2和data1之间的间隔)
NSString *minustr=[timestrsubstringWithRange:NSMakeRange(1,2)];//将timestr字符串的第一个元素到第二个元素取出存到字符串minustr中作为以分为单位的时间
NSString *secondstr=[timestrsubstringFromIndex:4];//将timestr字符串第四个元素之后的所有数值全部存到secondstr字符串中作为以秒为单位的时间
interval =[minustr intValue]*60+[secondstrdoubleValue];//将minustr以int类型的方式拆箱并且乘以60将secondstr以double数据类型拆箱 让两个值相加就是时间的间隔
NSMutableDictionary *dict=[NSMutableDictionarydictionary];//定义一个可变字典
dict [@"time"]=@(interval);//将时间间隔放入字典的前缀是time的地方 快速装箱
dict [@"lyric"]=subarr[1];//将subarr的第二个元素放入字点前缀是lyric的地方
[_LyricaddObject:dict];//将字典的元素一次一次的加入到可变数组_Lyric中
}
}
}
-(void)player//
{
_timecont+=1;//每次将时间变量_timecont+1,计时器每次访问都加1相当以1秒加一次
for (NSDictionary *dictin _Lyric) {//将可变数组_Lyric中的数据以此遍历给字典dict中
if (_timecont==(int)[dict[@"time"]doubleValue]) {//如果_timecont和字典dict中的time相对应的数值(int强制转换成整数型之后的数值)一样的话执行
NSLog(@"%@",dict[@"lyric"]);//输出dict中lyric对应的数据
}
}
}
@end