歌词解析

歌词内容如下:
[ar:王菲]
[al:传奇]
[by:欧阳]
[00:02.00]王菲 - 传奇
[00:06.00]作词:左右  作曲:李健
[00:12.00]
[00:16.00]好歌收藏 带你心飞
[00:22.00]
[00:32.46]只是因为在人群中 多看了你一眼
[00:40.11]再也没能忘掉你容颜
[00:47.59]梦想着偶然能有一天再相见
[00:54.88]从此我开始孤单思念
[01:00.78]
[01:02.03]想你时 你在天边
[01:09.26]想你时 你在眼前
[01:16.70]想你时 你在脑海
[01:24.39]想你时 你在心田
[01:31.62]
[01:32.37]宁愿相信我们前世有缘
[01:38.24]今生的爱情故事 不会再改变
[01:47.03]宁愿用这一生等你发现
[01:53.52]我一直在你身旁 从未走远
[02:03.85]
[02:35.93]只是因为在人群中 多看了你一眼
[02:43.28]再也没能忘掉你容颜
[02:50.70]梦想着偶然能有一天再相见
[02:58.32]从此我开始孤单思念
[03:05.31]
[03:05.61]想你时 你在天边
[03:12.90]想你时 你在眼前
[03:20.31]想你时 你在脑海
[03:27.94]想你时 你在心田
[03:35.38]
[03:36.01]宁愿相信我们前世有缘
[03:42.21]今生的爱情故事 不会再改变
[03:50.87]宁愿用这一生等你发现
[03:57.16]我一直在你身旁 从未走远
[04:05.46]
[04:05.96]宁愿相信我们前世有缘
[04:12.16]今生的爱情故事 不会再改变
[04:20.77]宁愿用这一生等你发现
[04:27.14]我一直在你身旁 从未走远
[04:35.55]
[04:36.72]只是因为在人群中 多看了你一眼
[04:46.17]
Lyric.h
#import <Foundation/Foundation.h>

@interface Lyric : NSObject{
    int _time;
    NSString * _lyr;
}


-(void)setTime:(int)time;
-(void)setLyr:(NSString *)lyr;

-(int)getTime;
-(NSString *)getLyr;


+(id)createLyr:(int)time andLyr:(NSString *)lyr;

@end
<pre code_snippet_id="504299" snippet_file_name="blog_20141101_16_6870270" name="code" class="objc">Lyric.m
 
#import "Lyric.h"

@implementation Lyric

-(void)setTime:(int)time{
    _time = time;
}
-(void)setLyr:(NSString *)lyr{
    _lyr = lyr;
}

-(int)getTime{
    return _time;
}
-(NSString *)getLyr{
    return _lyr;
}

+(id)createLyr:(int)time andLyr:(NSString *)lyr{
    Lyric * lyric = [[Lyric alloc] init];
    [lyric setTime:time];
    [lyric setLyr:lyr];
    
    return lyric;
}

@end
<pre code_snippet_id="504299" snippet_file_name="blog_20141101_16_6870270" name="code" class="objc">AnalyLyr.h
 
<span style="font-family: Arial, Helvetica, sans-serif;">#import <Foundation/Foundation.h></span>
@interface AnalyLyr : NSObject{
    NSMutableDictionary * _dicLyr;
    NSMutableArray * _arrayLyr;
}

//读取歌词文件
-(NSArray *)readLyrFile:(NSString *)filePath;

-(void)analyLyr:(NSString *)filePath;
//显示歌词
-(void)shwoLyr;

-(id)init;


@end
<pre code_snippet_id="504299" snippet_file_name="blog_20141101_16_6870270" name="code" class="objc">AnalyLyr.m
 
<span style="font-family: Arial, Helvetica, sans-serif;">#import "AnalyLyr.h"</span>
#import "Lyric.h"

@implementation AnalyLyr


-(NSArray *)readLyrFile:(NSString *)filePath{
    //读取歌词文件
    NSString * fileContent = [[NSString alloc] initWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:nil];
    
    //将歌词内容按'\n'分割
    NSArray * arrayLyr = [fileContent componentsSeparatedByString:@"\n"];
    
    return arrayLyr;
    
}

-(void)analyLyr:(NSString *)filePath{
    NSArray * arrayLyr = [self readLyrFile:filePath];
    
    for (int i = 0; i < [arrayLyr count]; i++) {
        if ([arrayLyr[i] hasPrefix:@"[0"]) {
            //将每一行歌词按‘]’分割成时间和歌词两部分
            NSArray * arrayPerLine = [arrayLyr[i] componentsSeparatedByString:@"]"];
            //解析时间
            int time = [self analyTime:arrayPerLine[0]];
            
            //封装每个歌词对象
            Lyric * lyr = [Lyric createLyr:time andLyr:arrayPerLine[1]];
            //将每个歌词对象放入数组中
            [_arrayLyr addObject:lyr];
            //将基础类型int转换为NSNumber类型的对象
            NSNumber * numTime = [[NSNumber alloc] initWithInt:time];
            //NSLog(@"numTime=%@", numTime);
            //将歌词对象放入字典中
            [_dicLyr setObject:lyr forKey:numTime];
            
        }
    }
    [self shwoLyr];
}


//解析时间
- (int)analyTime:(NSString *)timeStr{
    NSString * minStr;
    NSString * secStr;
    if ([timeStr hasPrefix:@"[0"]) {
        NSRange range1 = {1, 2};
        minStr = [timeStr substringWithRange:range1];
        //NSLog(@"minStr=%@", minStr);
        NSRange range2 = {4, 2};
        secStr = [timeStr substringWithRange:range2];
        //NSLog(@"secStr=%@", secStr);
    }
    int min = [minStr intValue];
    int sec = [secStr intValue];
    
    return (min*60 + sec);
}


-(void)shwoLyr{
    //获取最后一段歌词的时间,即歌词的总时间长度
    int maxTime = [[_arrayLyr lastObject] getTime];
   // NSLog(@"maxTime=%d", maxTime);
    //NSLog(@"%lu", [_arrayLyr count]);
    //NSLog(@"%lu", [_dicLyr count]);
    
    int t = 0;
    for(int i = 0; i < maxTime; i++)
    {
        t++;
        [NSThread sleepForTimeInterval:1];
        
        for (NSNumber * time in _dicLyr) {
            if ([_dicLyr objectForKey:time] != nil) {
                if(t == [[_dicLyr objectForKey:time]getTime])
                {
                    NSLog(@"%@", [[_dicLyr objectForKey:time] getLyr]);
                }

            }
        }
    }
}


-(id)init{
    if (self = [super init]) {
        _dicLyr = [[NSMutableDictionary alloc] init];
        _arrayLyr = [[NSMutableArray alloc] init];
    }
    return self;
}

@end
main.m
 
#import <Foundation/Foundation.h>
#import "Lyric.h"
#import "AnalyLyr.h"

int main(int argc, const char * argv[])
{

    @autoreleasepool {
        
        AnalyLyr * lyr = [[AnalyLyr alloc] init];
        
        [lyr analyLyr:@"此处写入歌词文件路径即可"];

        
    }
    return 0;
}


 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值