Android歌词文件格式

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/chuyangchangxi/article/details/98319029

上一个开发阶段《Android获取歌词汇总》实现了获取歌词的功能。

现在着手解析歌词。

一、目标

选择合适的歌词格式。

二、歌词格式

  • 歌词形式
形式 描述
逐行歌词 早期的歌词形式,以行为单位显示歌词,类似于字幕
逐字歌词 卡拉OK形式的歌词,精确到每个字。
  • 歌词组成

歌词按行进行排序,每一行以[开始,以]结束。

组成 描述
属性 用于描述歌词的信息,比如:
ti:标题
ar:艺术家
language:酷狗音乐的翻译歌词
……等其他信息,并且以:分隔名值。
歌词 以数字开始的内容,有2种格式分别对应逐行歌词和逐字歌词。
[mi:se.mmm]:逐行歌词,分钟:秒数:毫秒数
[begin,duration]:逐字歌词,开始毫秒数,持续毫秒数
需要注意的是,一行中可以包含多个时间戳。
文本 不包含:分割符的属性,出现在酷狗音乐的翻译歌词部分。
  • 翻译歌词

针对外文歌词(如英语、日语、……等)翻译成中文歌词。

翻译歌词通常为逐行形式的歌词(可能也只能逐行吧)。

翻译歌词有2种形式。

形式 描述
时间戳 与逐行歌词一致,带有时间戳,可以独立使用。
网易云音乐使用该种形式。
时间戳 没有时间戳,以文本形式存在,必须配合逐行歌词使用,按索引位置一一对应。
酷狗音乐使用该形式。

三、歌词容器

歌词格式描述的是歌词内容的语法结构。

歌词容器描述的是歌词文件的存储结构。

不同的云音乐平台采用的歌词容器也不相同。

同一个云音乐平台,不同的使用场景,采用的歌词容器也不相同。

音乐平台 使用场景 描述
网易云音乐 Android离线歌词 同时包行逐行、逐字、翻译三种形式歌词,但是可选。
纯音乐歌曲,不存在歌词。
Android在线歌词 与离线歌词一致,但组织方式略有差别。
酷狗音乐 Android离线歌词 krc形式,包含逐字和翻译歌词,同样为可选。
目前没有发现逐行歌词。
猜想逐行和逐字为二选一,不会同时存在krc文件中。
Android在线歌词 krc格式,包含在json数据中。

四、回顾

歌词格式相对比较固定,无论是网易云音乐还是酷狗音乐,语法结构都比较固定。

麻烦的是歌词容器的结构,不同音乐平台采用的结构都不尽相同。

同一音乐平台也会有多种存储结构。

五、接下来

不同的歌词容器需要不同的加载器。

不同的歌词格式需要不同的解析器。

需要编写一堆的加载器和解析器,然后输出为统一的数据格式。

六、遗留问题

将不同的歌词容器统一成单一的歌词容词。

还是保持分散呢?

虽然不能减少编写加载器和解析器的工作量。

但至少文件格式是一致的,未来不需要查找各家的歌词容器结构。

未来或许有必要统一一下,可以降低代码管理的成本。

导入歌词时,使用原生格式。

加载歌词时,转换成标准格式。

七、Finally

何以故。
须菩提。
一切诸佛。及诸佛阿耨多罗三藐三菩提法。
皆从此经出。

展开阅读全文
博主设置当前文章不允许评论。

没有更多推荐了,返回首页