/**************************************************/

/*******************-main文件-***********************/

/**************************************************/

#import <Foundation/Foundation.h>

#import "lrcContent.h"

#import "lrcManager.h"

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

{

@autoreleasepool

{

lrcManager *lrcM=[[lrcManager alloc] init];

[lrcM showLrc];

}

return 0;

}

/**************************************************/

/***************-lrcManager.h文件-********************/

/**************************************************/

#import <Foundation/Foundation.h>

#import "lrcContent.h"

#define PATH @"/Users/paul/Desktop/legend.txt"

@interface lrcManager : NSObject

@property NSArray *lrcArray;          //存放每行的歌词

-(BOOL)isMessage:(NSString *)lineContent;                               //判断是否是歌词的其他信息,如歌手名,作词,作曲

-(NSMutableArray *)getLrcFileContent:(NSString *)path;            //读取歌词文件内容

-(lrcContent *)polishLrc:(NSMutableArray *)lineArr;                    //处理单行歌词

-(lrcContent *)sortLrc:(lrcContent *)lrcContent;                          //对歌词进行排序(根据歌词前的时间)

-(void)showLrc;                                                                        //显示歌词内容

@end

/**************************************************/

/***************-lrcManager.m文件-********************/

/**************************************************/

#import "lrcManager.h"

@implementation lrcManager

-(id)init

{

if(self=[super init])

{

_lrcC=[[lrcContent alloc] init];

_lrcArray=[[NSArray alloc] init];

_lrcC.lrc=[[NSMutableArray alloc] init];

_lrcC.message=[[NSMutableArray alloc] init];

_lrcC.content=@"";

_lrcC.time=0.0;

}

return self;

}

-(BOOL)isMessage:(NSString *)lineContent

{

int flag=0;

if([lineContent intValue])

{

flag=1;

}

return flag;

}

-(NSMutableArray *)getLrcFileContent:(NSString *)path

{

//将单句歌词分割放入动态数组

NSString *fileContent=[[NSString alloc] initWithContentsOfFile:PATH encoding:NSUTF8StringEncoding error:nil];

NSArray *arrFileContent=[fileContent componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"\n"]];

NSMutableArray *mArrFileContent=[[NSMutableArray alloc] initWithArray:arrFileContent];

[mArrFileContent removeObject:@""];

return mArrFileContent;

}

-(lrcContent *)polishLrc:(NSString *)lineStr

{

NSArray *arrLine=[lineStr componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"[:]"]];

NSMutableArray *mArrLine=[[NSMutableArray alloc] initWithArray:arrLine];

[mArrLine removeObject:@""];

if(![self isMessage:[mArrLine objectAtIndex:1]])

{

//歌曲信息

[_lrcC.message addObject:[mArrLine objectAtIndex:1]];

}

else

{

//歌词

if([[mArrLine lastObject] intValue]==0)

{

for(int i=0;i<[mArrLine count]-1;i+=2)

{

NSString *s=[[NSString alloc] initWithFormat:@"%f",([[mArrLine objectAtIndex:i] floatValue]*60+[[mArrLine objectAtIndex:i+1] floatValue])];

[_lrcC.lrc addObject:s];

[_lrcC.lrc addObject:[mArrLine lastObject]];

}

}

}

return _lrcC;

}

-(lrcContent *)sortLrc:(lrcContent *)lrcContent

{

NSMutableArray *mArr=[[NSMutableArray alloc] initWithArray:lrcContent.lrc];

for(int i=0;i<[mArr count]-2;i+=2)

{

for(int j=i+2;j<[mArr count];j+=2)

{

if(([[mArr objectAtIndex:j] floatValue])<([[mArr objectAtIndex:i] floatValue]))

{

[mArr exchangeObjectAtIndex:i withObjectAtIndex:j];

[mArr exchangeObjectAtIndex:i+1 withObjectAtIndex:j+1];

}

}

}

lrcContent.lrc=mArr;

return lrcContent;

}

-(void)showLrc

{

lrcManager *lrcM=[[lrcManager alloc] init];

for (int i=0; i<[[self getLrcFileContent:PATH] count]; i++)

{

_lrcC=[lrcM polishLrc:[[lrcM getLrcFileContent:PATH] objectAtIndex:i]];

}

lrcM.lrcC=[lrcM sortLrc:_lrcC];

for(int i=1;i<[_lrcC.lrc count];i+=2)

{

NSLog(@"%@",[_lrcC.lrc objectAtIndex:i]);

sleep(1);

}

}

@end

/**************************************************/

/***************-lrcContent.h文件-********************/

/**************************************************/

#import <Foundation/Foundation.h>

@interface lrcContent : NSObject

@property NSMutableArray *message;      //存放歌词的其他信息

@property NSMutableArray *lrc;               //存放歌词每行

@property NSString *content;                  //存放单行歌词

@property float time;                               //存放歌词的出现时间

@end

/**************************************************/

/***************-lrcContent.m文件-********************/

/**************************************************/

#import "lrcContent.h"

@implementation lrcContent

-(id)init

{

if(self=[super init])

{

_message=[[NSMutableArray alloc] init];

_lrc=[[NSMutableArray alloc] init];

_content=@"";

_time=0.0;

}

return self;

}

@end

/**************************************************/

/*******************-歌词示例文件-********************/

/**************************************************/

[ti:传奇]
[ar:王菲]

[00:03.50]传奇
[00:19.10]作词:刘兵 作曲:李健
[00:20.60]演唱:王菲
[00:26.60]
[04:40.75][02:39.90][00:36.25]只是因为在人群中多看了你一眼
[04:49.00]
[02:47.44][00:43.69]再也没能忘掉你容颜
[02:54.83][00:51.24]梦想着偶然能有一天再相见
[03:02.32][00:58.75]从此我开始孤单思念
[03:08.15][01:04.30]
[03:09.35][01:05.50]想你时你在天边
[03:16.90][01:13.13]想你时你在眼前
[03:24.42][01:20.92]想你时你在脑海
[03:31.85][01:28.44]想你时你在心田
[03:38.67][01:35.05]
[04:09.96][03:39.87][01:36.25]宁愿相信我们前世有约
[04:16.37][03:46.38][01:42.47]今生的爱情故事 不会再改变
[04:24.82][03:54.83][01:51.18]宁愿用这一生等你发现
[04:31.38][04:01.40][01:57.43]我一直在你身旁 从未走远
[04:39.55][04:09.00][02:07.85]

/**************************************************/

/*******************-程序运行示例-********************/

/**************************************************/

2015-08-10 22:16:30.271 myLrcReader[5185:198636] 传奇

2015-08-10 22:16:31.272 myLrcReader[5185:198636] 作词:刘兵作曲:李健

2015-08-10 22:16:32.278 myLrcReader[5185:198636] 演唱:王菲

2015-08-10 22:16:33.281 myLrcReader[5185:198636] 只是因为在人群中多看了你一眼

2015-08-10 22:16:34.283 myLrcReader[5185:198636] 再也没能忘掉你容颜

2015-08-10 22:16:35.288 myLrcReader[5185:198636] 梦想着偶然能有一天再相见

2015-08-10 22:16:36.290 myLrcReader[5185:198636] 从此我开始孤单思念

2015-08-10 22:16:37.296 myLrcReader[5185:198636] 想你时你在天边

2015-08-10 22:16:38.298 myLrcReader[5185:198636] 想你时你在眼前

2015-08-10 22:16:39.298 myLrcReader[5185:198636] 想你时你在脑海

2015-08-10 22:16:40.299 myLrcReader[5185:198636] 想你时你在心田

2015-08-10 22:16:41.303 myLrcReader[5185:198636] 宁愿相信我们前世有约

2015-08-10 22:16:42.308 myLrcReader[5185:198636] 今生的爱情故事不会再改变

2015-08-10 22:16:43.314 myLrcReader[5185:198636] 宁愿用这一生等你发现

2015-08-10 22:16:44.315 myLrcReader[5185:198636] 我一直在你身旁从未走远

2015-08-10 22:16:45.318 myLrcReader[5185:198636] 只是因为在人群中多看了你一眼

2015-08-10 22:16:46.320 myLrcReader[5185:198636] 再也没能忘掉你容颜

2015-08-10 22:16:47.324 myLrcReader[5185:198636] 梦想着偶然能有一天再相见

2015-08-10 22:16:48.329 myLrcReader[5185:198636] 从此我开始孤单思念

2015-08-10 22:16:49.333 myLrcReader[5185:198636] 想你时你在天边

2015-08-10 22:16:50.335 myLrcReader[5185:198636] 想你时你在眼前

2015-08-10 22:16:51.337 myLrcReader[5185:198636] 想你时你在脑海

2015-08-10 22:16:52.343 myLrcReader[5185:198636] 想你时你在心田

2015-08-10 22:16:53.348 myLrcReader[5185:198636] 宁愿相信我们前世有约

2015-08-10 22:16:54.349 myLrcReader[5185:198636] 今生的爱情故事不会再改变

2015-08-10 22:16:55.352 myLrcReader[5185:198636] 宁愿用这一生等你发现

2015-08-10 22:16:56.354 myLrcReader[5185:198636] 我一直在你身旁从未走远

2015-08-10 22:16:57.359 myLrcReader[5185:198636] 宁愿相信我们前世有约

2015-08-10 22:16:58.361 myLrcReader[5185:198636] 今生的爱情故事不会再改变

2015-08-10 22:16:59.366 myLrcReader[5185:198636] 宁愿用这一生等你发现

2015-08-10 22:17:00.369 myLrcReader[5185:198636] 我一直在你身旁从未走远

2015-08-10 22:17:01.372 myLrcReader[5185:198636] 只是因为在人群中多看了你一眼

LRC歌词文件读取代码的更多相关文章

  1. Java使用正则表达式解析LRC歌词文件

    LRC歌词是一种应用广泛的歌词文件,各主流播放器都支持. lrc歌词文本中含有两类标签: 1.标识标签(ID-tags) [ar:艺人名] [ti:曲名] [al:专辑名] [by:编者(指编辑LRC ...

  2. 如何将lrc歌词文件批量转换为ANSI编码?

    有些MP3.MP4或学习机只能播放ANSI编码的歌词文件,可是从网站上下载的歌词大多是UTF-8或者其它机器支持不了的编码,如何批量将这些lrc歌词文件转换成ANSI编码的文件呢? 工具/原料 萍客T ...

  3. 浅析LRC歌词文件

    [时间:2018-12] [状态:Open] [关键词:字幕,LRC,歌词,lyric,文件格式] 0 引言 几年前(2010年左右),网络音乐流行与免费的时代,网上有大量的mp3,使用比较常见的播放 ...

  4. c#解析Lrc歌词文件

    看到很多人解析歌词文件时写了一大片的字符处理代码,而且看得不是很明白,所以自己研究了一下, 首先来了解下Lrc文件 时间格式: 1.标准格式: [分钟:秒.毫秒] 歌词 注释:括号.冒号.点号全都要求 ...

  5. 解析LRC歌词文件readlrc

    package com.jikexueyuan.readlrc.main; import com.jikexueyuan.readlrc.utils.Utils; import java.io.Fil ...

  6. 我的Android进阶之旅------>Android自定义View来实现解析lrc歌词并同步滚动、上下拖动、缩放歌词的功能

    前言 一LRC歌词文件简介 1什么是LRC歌词文件 2LRC歌词文件的格式 LRC歌词文件的标签类型 1标识标签 2时间标签 二解析LRC歌词 1读取出歌词文件 2解析得到的歌词内容 1表示每行歌词内 ...

  7. C#下载歌词文件

    前段时间写了一篇c#解析Lrc歌词文件,对lrc文件进行解析,支持多个时间段合并.本文借下载歌词文件来探讨一下同步和异步方法. Lrc文件在网络上随处可见,我们可以通过一些方法获取,最简单的就是别人的 ...

  8. Lrc歌词-开发标准

    LRC歌词是在其程序当中实现的专门用于MP3等歌词同步显示的标签式的纯文本文件,如今已经得到了广泛的运用.现就LRC歌词文件的格式规定详细说明,已供程序开发人员参考. LRC文件是纯文本文件,可以用记 ...

  9. 2020/2/1 PHP代码审计之任意文件读取及删除漏洞

    在开始学习之前先简单记录一下自己现在的思路吧..现在接触的基本都是无防护的漏洞也就是最简单的一些漏洞.我的想法就是以代审思路为主,之前一直在打CTF,白盒的思维我觉得和CTF这种黑盒有很大区别.自己的 ...

随机推荐

  1. Yii 获得当前控制器和方法

    [怎样获得当前控制器和方法] 控制器:$this -> id ; 方法:$this->action->id ; 这主要是用在视图中,进行高亮显示. <div id=" ...

  2. OpenLayers 3 之 加入地图鼠标右键菜单

    加入右键菜单,首先我们要监听鼠标右键点击的操作,我们知道鼠标右键事件名是 contextmenu.当鼠标在 html 元素之上,点击鼠标右键,便会触发 contextmenu 事件,在 context ...

  3. 全球IT管理最佳实践之DevOps Master 认证

    原文:http://soft.chinabyte.com/30/13940030.shtml 作者:国际最佳实践管理联盟 孙振鹏 关键字: DevOps.DevOps认证.DevOpsDays.Dev ...

  4. Android下Fragment使用(全集)

    1 http://blog.csdn.net/niu_gao/article/details/7163263  思路清晰,讲解详细,代码偏少,推荐高手阅读 2 http://blog.csdn.net ...

  5. pwd 命令

    Linux中用 pwd 命令来查看”当前工作目录“的完整路径. 简单得说,每当你在终端进行操作时,你都会有一个当前工作目录. 在不太确定当前位置时,就会使用pwd来判定当前目录在文件系统内的确切位置. ...

  6. mysqldump默认参数add-drop-table

    mysqldump默认参数add-drop-table 原创 2014年01月28日 11:35:18 9214 接到一个同事电话,说UAT环境上的一张表被删了,要恢复一下.原来是新项目UAT,从测试 ...

  7. 【SQLServer2008】之Telnet以及1433端口设置

    Telnet步骤: 一.首先进入Win7控制面板,可以从开始里找到或者在桌面上找到计算机,点击进入里面也可以找到控制面板,如下图: 二.进入控制面板后,我们再找到“程序和功能”并点击进入,如下图所示: ...

  8. 【转】使用 Python Mock 类进行单元测试

    出处:https://www.oschina.net/translate/unit-testing-with-the-python-mock-class?lang=chs&page=2#

  9. Django模板系统(非常详细)(后台数据如何展示在前台)

    前面的章节我们看到如何在视图中返回HTML,但是HTML是硬编码在Python代码中的这会导致几个问题:1,显然,任何页面的改动会牵扯到Python代码的改动网站的设计改动会比Python代码改动更频 ...

  10. centos7.0 增加/usr分区的容量减少home分区的大小

    把/home内容备份,然后将/home文件系统所在的逻辑卷删除,扩大/root文件系统,新建/home:tar cvf /tmp/home.tar /home #备份/homeumount /home ...