最近在捣鼓音乐播放器,过程中学到了一些东西,写下来分享一下,首先是歌词的解析

首先我们看看lrc(不贴维基了怕打不开

歌词文件一般是这样的格式

1.[分钟:秒.毫秒] 歌词

2. [分钟:秒] 歌词

3. [分钟:秒:毫秒] 歌词

其中1是标准格式,下面我就一种为例。

思路是先获取整个歌词内容,再按换行分段,对每一行中的内容,分为两部分,时间和内容,分别提取。

     -(void)parselyric
{
NSString *path = [[NSBundle mainBundle]pathForResource:_lab_title.text ofType:@"lrc"]; //if lyric file exits
if ([path length]) { //get the lyric string
NSString *lyc = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil]; //init
_musictime = [[NSMutableArray alloc]init];
_lyrics = [[NSMutableArray alloc]init];
_t = [[NSMutableArray alloc]init]; NSArray *arr = [lyc componentsSeparatedByString:@"\n"]; for (NSString *item in arr) { //if item is not empty
if ([item length]) { NSRange startrange = [item rangeOfString:@"["];
NSLog(@"%d%d",startrange.length,startrange.location);
NSRange stoprange = [item rangeOfString:@"]"]; NSString *content = [item substringWithRange:NSMakeRange(startrange.location+1, stoprange.location-startrange.location-1)]; NSLog(@"%d",[item length]); //the music time format is mm.ss.xx such as 00:03.84
if ([content length] == 8) {
NSString *minute = [content substringWithRange:NSMakeRange(0, 2)];
NSString *second = [content substringWithRange:NSMakeRange(3, 2)];
NSString *mm = [content substringWithRange:NSMakeRange(6, 2)]; NSString *time = [NSString stringWithFormat:@"%@:%@.%@",minute,second,mm];
NSNumber *total =[NSNumber numberWithInteger:[minute integerValue] * 60 + [second integerValue]];
[_t addObject:total]; NSString *lyric = [item substringFromIndex:10]; [_musictime addObject:time];
[_lyrics addObject:lyric];
}
}
}
}
else
_lyrics = nil;
}

这里我只处理里标准格式的歌词,其它格式也可用类似方法处理。

IOS 解析歌词lrc的更多相关文章

  1. IOS 解析XML文档

    前段时间想找点事做,就是试着看能不能用豆瓣的API做点什么,于是就碰到了这个问题——XML解析. 老师还没讲,只能自己去查. XML文档解析主要有SAX和DOM两种模式,IOS上两种模式都可以用,这里 ...

  2. iOS解析crash日志:

    iOS解析crash日志:我们在ios开发中会碰到的很多crash问题,如果Debug调试模式的话,我们可以往往很容易的根据log的输出定位到导致crash的原因,但对于已经上线的应用,或者是rele ...

  3. 歌词文件解析(二):LRC格式文件的绘制

    通过对LRC文件的解析,可以轻松实现歌词可视化. 代码实现 函数名: paintLyrics(ByVal pBox As PictureBox, ByVal CurrentPosition As In ...

  4. 歌词文件解析(一):LRC格式文件的解析

    LRC是英文lyric(歌词)的缩写,被用做歌词文件的扩展名.以lrc为扩展名的歌词文件可以在各类数码播放器中同步显示.LRC 歌词是一种包含着“*:*”形式的“标签(tag)”的基于纯文本的歌词专用 ...

  5. iOS解析XML数据

    iOS中解析XML数据的类是  NSXMLParser,详细使用方法如下: 假设现在在内存中有XML的二进制数据对象(NSData):data(该数据可能来自网络,也可能是本地的文件数据),设置NSX ...

  6. iOS解析Server端返回JSON数据

    在做quhao APP架构时,后台Server端使用了Java,提供WebService,而iOS和Android作为移动客户端.在做数据交互时,Server端返回JSON格式数据.由于iOS SDK ...

  7. ios解析XML和json数据

    解析的基本概念所谓“解析”:从事先规定好的格式串中提取数据解析的前提:提前约定好格式.数据提供方按照格式提供数据.数据获取方按照格式获取数据iOS开发常见的解析:XML解析.JSON解析 一.XML数 ...

  8. 自定义控件 TextView 歌词 Lrc

    演示 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> < ...

  9. IOS解析XML

    XML也许是我们储存数据和通讯数据中最常见的一种简易方式,当我们来到XML的海洋时,我们会发现当我们用iPhone程序解析XML时,我们是有如此多的选项,让人眼花缭乱.iOS SDK本身就带有两种不同 ...

随机推荐

  1. 模糊系统架构和简单实现--AForge.NET框架的使用(四)

    原文:模糊系统架构和简单实现--AForge.NET框架的使用(四) 先说一下,为什么题目是简单实现,因为我实在没有弄出好的例子. 我原来用AForge.net做的项目中的模糊系统融入了神经网络和向量 ...

  2. [置顶] Android系统移植与调试之------->如何修改Android设备添加3G上网功能

    1.首先先来看一下修改前后的效果对比图 step1.插上3G设备前 step2.插上3G设备后,获取信号中.... step3.插上3G设备后,获取到信号 step4.使用3G信号浏览网页 2.下面讲 ...

  3. oschina BI商业智能开源软件

    54款 BI商业智能开源软件 MySQL数据仓库解决方案 Infobright OLAP 分析引擎 Apache Kylin 数据处理和分发系统 Apache NiFi OLAP 数据查询引擎 Dru ...

  4. POJ-2240

    Arbitrage Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 19063   Accepted: 8069 Descri ...

  5. JDBC编程之优化

    1.创建 dbconfig.properties driver=com.mysql.jdbc.Driver dburl=jdbc\:mysql\://localhost\:3306/mytest us ...

  6. oracle中 connect by prior 递归算法

    Oracle中start with...connect by prior子句用法 connect by 是结构化查询中用到的,其基本语法是: select ... from tablename sta ...

  7. 【C#基础】HTTP发送POST二进制数据

    //postdata为数组的请求方式 public byte[] POST(string Url, byte[] byteRequest) { byte[] responsebody; HttpWeb ...

  8. 常见算法:C语言求最小公倍数和最大公约数三种算法

    最小公倍数:数论中的一种概念,两个整数公有的倍数成为他们的公倍数,当中一个最小的公倍数是他们的最小公倍数,相同地,若干个整数公有的倍数中最小的正整数称为它们的最小公倍数,维基百科:定义点击打开链接 求 ...

  9. FZU 1686 神龙的难题(DLX反复覆盖)

    FZU 1686 神龙的难题 pid=1686" target="_blank" style="">题目链接 题意:中文题 思路:每个1看成列, ...

  10. SQLite中不支持的sql语法

    今天很自然的在写Sql语句的时候用了Top,一开始没发现问题,因为我从数据库读出的值正好是0,而我习惯变量定义的时候也都赋值0,可是到我不要0的时候我就发现问题了.后来才知道,可爱的小sqlite竟然 ...