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

首先我们看看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. 为什么设计模式在C++社区没有Java社区流行?

    我们发现设计模式在Java社区很流行,但是在C++社区却没有那么被关注,甚至有点被排斥,究竟是什么原因造成这个差异的呢?    昨天和同事讨论这个问题,最后得出几点原因:     (1)C++内存需要 ...

  2. protocol buffer和当年corba ,和现在SOA有啥异同点

    CORBA是对象管理集团(OMG)的一个标准,使得不同语言编写的,运行在不同计算机上的能够协同工作.标准包括分布式计算的通讯协议(GIOP和IIOP),可映射到多种语言的接口描述语言(IDL),对象请 ...

  3. 命名实参和可选实参(C# 编程指南)

    https://msdn.microsoft.com/zh-cn/library/dd264739.aspx CalculateBMI(weight: 123, height: 64); Calcul ...

  4. jQuery 左侧滑动

    $("#slideleft button").click(function(){ var $lefty = $(this).next(); $lefty.animate({ lef ...

  5. ubuntu 创建eclipse 快捷方式

    Ubuntu 上链接快捷方式,将想面内容复制并修改,命名为:eclipse.desktop #!/usr/bin/env xdg-open [Desktop Entry] Name=Eclipse C ...

  6. (转)iOS 各种控件默认高度(图示)

    1.状态栏 状态栏一般高度为20像素,在打手机或者显示消息时会放大到40像素高,注意,两倍高度的状态栏在好像只能在纵向的模式下使用.如下图 用户可以隐藏状态栏,也可以将状态栏设置为灰色,黑色或者半透明 ...

  7. Xcode7真机测试

    根据这个网址上的步骤能够完成真机测试,我已经试过了,还不错 http://www.bubuko.com/infodetail-1061938.html

  8. HTML5 API's (Application Programming Interfaces)

    New HTML5 API's (Application Programming Interfaces) The most interesting new API's are: HTML Geoloc ...

  9. Tree( 树) 组件[1]

    本节课重点了解 EasyUI 中 Tree(树)组件的使用方法, 这个组件依赖于 Draggable(拖动)和 Droppable(放置)组件. 一. 加载方式//class 加载方式<ul c ...

  10. 2:numpy---ndarray

    ndarray即是多维数组[n dimension array] 一:创建ndarray 有好几种创建数组的方法. 例如,你可以使用 array 函数从常规的Python列表和元组创造数组.所创建的数 ...