当前位置: 首页 > ds >正文

KRC歌词解析原理及Android实现K歌动态歌词效果

KRC格式歌词是酷狗音乐播放器推出的一种动感歌词格式,全称KugouResourCe(酷狗资源文件)。以下是关于KRC格式歌词的详细介绍:

### 基本特点

  * **高精度歌词** :可控制到每个字的时间,使歌词显示更精确,能实现卡拉 OK 字幕机效果,用户可跟着音乐节奏一边看歌词一边哼唱。
  * **丰富的多媒体内容** :除了歌词文本,还包含图片、专辑信息等,增强用户体验,让用户更全面地了解歌曲。
  * **自动下载歌曲** :在酷狗播放器中打开 KRC 文件时,会自动下载关联的歌曲文件,使歌曲传播更简便。
  * **专有格式** :是酷狗播放器专用 lyrics 格式,其他播放器通常无法直接打开。

### 文件结构

  * **头部信息** :文件开头的 4 字节 “krc1” 表示文件类型和版本号。
  * **元数据部分** :包含歌曲的基本信息,如 `[ar:歌手名]` 表示演唱者,`[ti:歌曲名]` 表示歌曲标题,`[by:歌词作者]` 表示歌词作者,`[hash:哈希值]` 用于验证文件完整性,`[total:总时长]` 表示歌曲总时长,`[offset:偏移量]` 用于调整歌词显示时间偏移等。
  * **歌词内容部分** :每行歌词的格式为 `[起始时间, 结束时间]<音符信息>歌词内容`,其中音符信息格式为 `<起始时间, 持续时间, 音符索引>`,用于控制歌词显示效果。

### 与 LRC 格式的对比

  * **精度** :KRC 格式可控制到每个字的时间,而 LRC 格式只能控制到每一行的时间,在逐字显示歌词方面,KRC 精度更高。
  * **内容** :KRC 文件除歌词外,还可包含图片和专辑信息,LRC 文件通常只包含歌词。
  * **兼容性** :LRC 格式通用性更强,大多数音乐播放器都支持,KRC 格式仅在酷狗播放器中可用。

### 编辑方式

由于KRC文件是加密的,直接用文本编辑器打开 KRC 文件会显示乱码,需先解密得到明文。

以下是一段解密后的KRC歌词内容:

[ar:半阳]
[ti:我的将军啊]
[by:]
[hash:0805fbafc44fce9b267efae281d5dd8c]
[al:]
[sign:]
[qq:]
[total:138161]
[offset:0]
[language:eyJjb250ZW50IjpbXSwidmVyc2lvbiI6MX0=]
[357,959]<0,152,0>半<152,100,0>阳 <252,152,0>- <404,100,0>我<504,101,0>的<605,152,0>将<757,101,0>军<858,101,0>啊
[1316,608]<0,102,0>作<102,151,0>词<253,102,0>:<355,100,0>半<455,153,0>阳
[1924,709]<0,101,0>作<101,152,0>曲<253,101,0>:<354,153,0>半<507,202,0>阳
[2633,2176]<0,203,0>狼<203,354,0>烟<557,557,0>风<1114,707,0>沙<1821,355,0>口
[5215,2175]<0,203,0>还<203,347,0>请<550,260,0>将<810,350,0>军<1160,308,0>少<1468,303,0>饮<1771,404,0>酒
[7823,2329]<0,254,0>前<254,303,0>方<557,303,0>的<860,355,0>路<1215,253,0>不<1468,405,0>好<1873,456,0>走
[10507,2282]<0,253,0>我<253,306,0>在<559,302,0>家<861,356,0>中<1217,355,0>来<1572,305,0>等<1877,405,0>候
[13196,2223]<0,252,0>可<252,304,0>愿<556,604,0>柳<1160,709,0>下<1869,354,0>走
[15824,2273]<0,253,0>满<253,354,0>头<607,302,0>杨<909,355,0>花<1264,304,0>共<1568,302,0>白<1870,403,0>首
[18502,2327]<0,252,0>十<252,354,0>两<606,304,0>相<910,354,0>思<1264,356,0>二<1620,252,0>两<1872,455,0>酒

格式规则如下:

以下是解密后的KRC歌词文件格式中各字段的含义解释:
元数据部分
[ar:半阳]:表示歌曲的演唱者(Artist),这里是“半阳”。
[ti:我的将军啊]:表示歌曲的标题(Title),这里是“我的将军啊”。
[by:]:表示歌词作者,目前为空。
[hash:0805fbafc44fce9b267efae281d5dd8c]:表示文件的哈希值(Hash),用于验证文件的完整性,这里是一个32位的十六进制字符串。
[al:]:表示专辑名称,目前为空。
[sign:]:表示签名信息,目前为空。
[qq:]:表示QQ号码,目前为空。
[total:138161]:表示总时长(Total),单位为毫秒,这里为138161毫秒。
[offset:0]:表示偏移量(Offset),用于调整歌词显示的时间偏移,这里为0。
[language:eyJjb250ZW50IjpbXSwidmVyc2lvbiI6MX0=]:表示语言信息,这是一个Base64编码的字符串,解码后为{"content":[],"version":1},表示语言相关内容为空,版本为1。
歌词内容部分
每个歌词行的格式为:起始时间,结束时间<音符信息>歌词内容
起始时间:表示歌词行开始显示的时间,单位为毫秒。
结束时间:表示歌词行结束显示的时间,单位为毫秒。
<音符信息>:包含音符的起始时间、持续时间和音符索引,格式为<起始时间,持续时间,音符索引>,用于控制歌词的显示效果,如淡入淡出、颜色变化等。
歌词内容:表示具体的歌词文字。
例如:
[357,959]<0,152,0>半<152,100,0>阳 <252,152,0>- <404,100,0>我<504,101,0>的<605,152,0>将<757,101,0>军<858,101,0>啊
起始时间:357毫秒
结束时间:959毫秒
音符信息:包括多个音符的起始时间、持续时间和索引,如<0,152,0>表示起始时间为0,持续时间为152毫秒,音符索引为0。
歌词内容:半阳 - 我的将军啊
这些字段共同构成了KRC歌词文件的结构,用于在播放器中同步显示歌词内容,并支持各种视觉效果。

显示动态歌词的基本步骤:

1.根据密钥解密歌词,得到完整歌词字符串
2.根据换行符将完整字符串分割成每一行显示的歌词
3.根据当前播放时间先找到对应的行数,然后根据改行歌词每个字的起始时间和持续时间,计算出需要高亮的歌词位置(宽度)

Android 实现方式可参考开源歌词项目:HPLyrics

http://www.xdnf.cn/news/6622.html

相关文章:

  • AAA级LED太阳光模拟器的优势
  • nvidia-smi-Failed to initialize NVML: Driver/library version mismatch
  • RabbitMQ工作流程及使用方法
  • 插槽(Slot)的使用方法
  • Prometheus详解
  • 2024年9月电子学会等级考试五级第三题——整数分解
  • 【歌曲结构】1:基于歌词的歌曲结构分析:高潮、钩子、双副歌
  • 2025采购竞价系统排名:5款降本增效工具实测对比
  • 【实战篇】数字化打印——打印部署管理接口开发
  • 各个历史版本mysql/tomcat/Redis/Jdk/Apache/gitlab下载地址
  • java方法的练习题
  • 更新本地编译的链接库
  • nt!MiAllocateWsle函数分析之设置Wsle[WorkingSetIndex]
  • 【linux】open欧拉安装显卡驱动以及cuda12.8
  • [c++项目]云备份项目测试
  • Go语言八股之Mysql事务
  • 麒麟v10 部署 MySQL 5.6.10 完整步骤
  • MATLAB安装全攻略:常见问题与解决方案
  • Java集合详解:ConcurrentSkipListMap
  • 如何安全擦除 SSD 上的可用空间
  • Python包、模块、类的导入语法与机制解析
  • 解码生命语言:深度学习模型TranslationAI揭示RNA翻译新规则
  • 什么是模态内异质性,什么是模态间异质性?
  • zabbix7.2 zabbix-agent自动注册 被动模式(五)
  • SpringBoot基础(静态资源导入)
  • 观测云产品更新 | 安全监测、事件中心、仪表板AI智能分析等
  • 数据结构与算法--顺序表--单链表
  • python可视化:北方省市GDP与人口变化关系分析4
  • C++二项式定理:原理、实现与应用
  • Rust 数据结构:Vector