歌词解析按照时间输出

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];获取data2data1之间的间隔)

            NSString *minustr=[timestrsubstringWithRange:NSMakeRange(1,2)];//timestr字符串的第一个元素到第二个元素取出存到字符串minustr中作为以分为单位的时间

            NSString *secondstr=[timestrsubstringFromIndex:4];//timestr字符串第四个元素之后的所有数值全部存到secondstr字符串中作为以秒为单位的时间

            

            interval =[minustr intValue]*60+[secondstrdoubleValue];//minustrint类型的方式拆箱并且乘以60secondstrdouble数据类型拆箱   让两个值相加就是时间的间隔

            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"]);//输出dictlyric对应的数据

        }

    }

}

@end


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值