歌词同步的实现(lrc)

来源:互联网 发布:telnet 80 端口打不开 编辑:程序博客网 时间:2024/05/01 09:30

   lrc是一种开放的文件格式,用来实现歌词和音乐的同步显示。用文字编辑器打开lrc文件会很容易发现,几乎每行都包含有如[*:*]的格式,称之为标签。标签分为两种,一种如[3:12.78]类的称为时间标签,表示与音乐同步的时间,精确到0.01秒;另一种如[ar:xxx]类的称为标识标签,表示一些附加的信息,如歌曲家,歌词编辑者等等,没特别需要,将其忽略。

 

  所以,同步主要是对时间标签的处理。我的步骤如下:

1、由于lrc文件本身不大,将其一次性读入内存

2、由于lrc每行为歌词的一行内容,讲lrc文件分解为每行的内容

3、对各行处理,获得时间,歌词内容

4、按照时间的先后顺序排序,做成一张按时间从小到大的表

5、正常常音乐播放时,获取当前播放时间与当前时间表节点比较,当大于当前节点时间时,显示下条歌词,时间节点下移一个节点

6、拖动进度条播放时,定位播放时间和表中的时间节点,显示相关条目

 

用到的主要数据结构和方法:

 

总结:用链表方法来保存歌词比较复杂,拖动播放时歌词定位效率不高(即使可以通过一些简单的时间点判断来提高效率),但总的来说,还没有到影响显示效果的程度。可以考虑利用数组来保存歌词条目,这样就可以用二分法等一些有效率的算法来提高效率,呵呵,当然有利也有弊,预留数组的大小会浪费一些内存,如果文件过大而预留大小过小会造成内存访问非法的操作。LRC定位歌词不像KRC那样高,可以精确到每个字,而且还包含一些专辑图片等信息。(看来多思考一步,多向前走一步,就是另外一片天地啊!)

原创粉丝点击