C# 20行代码解析KRC歌词内容

文章内容仅供学习参考,禁止转载。

KRC 歌词文件支持了逐字精准,解决了一行歌词进度显示不准确的问题。由此好奇其存储歌词的方式,于是参考网络其他资料总结如下:

KRC 文件的前 4 字节是文件类型标识,使用记事本打开任意 KRC 文件可以查看前 4 字节为类似 krc1 的字符

krc18烫烫烫烫烫烫烫烫烫...

krc18 中的 8 并不是KRC标识,在后面的解析中你会发现 8 是压缩流的头标识

去除前 4 字节,对剩下的所有字节对 key 进行异或运算

key 为 64, 71, 97, 119, 94, 50, 116, 71, 81, 54, 49, 45, 206, 210, 110, 105 共计 16 个,异或运算时循环处理。

异或结束后得到的是经过 zlib 默认压缩规则压缩后的字节流,所以需要先对其解压缩。

对解压缩后的字节流进行 UTF8 编码即可得到可阅读的内容

C# 代码如下

使用包 SharpZipLib 中封装的方法进行解压缩,你可以在 VS 包管理器中使用如下命令(或者参考 NuGet Gallery | SharpZipLib 1.3.3)

Install-Package SharpZipLib -Version 1.3.3
// .NET 6 for C# 10 ConsoleAPP
using System.Text;
using ICSharpCode.SharpZipLib.Zip.Compression.Streams;byte[] key = { 64, 71, 97, 119, 94, 50, 116, 71, 81, 54, 49, 45, 206, 210, 110, 105 };
var data = File.ReadAllBytes(@".\周杰伦 - 甜甜的.krc")[4..];
for (int i = 0; i < data.Length; i++)data[i] = (byte)(data[i] ^ key[i % key.Length]);
var res = Encoding.UTF8.GetString(FastDecompression(data));Console.WriteLine(res);static byte[] FastDecompression(byte[] data)
{MemoryStream decompressed = new();new InflaterInputStream(new MemoryStream(data)).CopyTo(decompressed);return decompressed.ToArray();
}

运行结果:

?[id:$0313BFDD]
[ar:周杰伦]
[ti:甜甜的]
[by:]
[hash:2165db629e5bd835f1b71ddae9fca4ed]
[al:]
[sign:]
[qq:]
[total:243000]
[offset:0]
[language:eyJjb250ZW50IjpbXSwidmVyc2lvbiI6MX0=]
[289,708]<0,503,0>周<503,0,0>杰<503,52,0>伦 <555,51,0>- <606,0,0>甜<606,51,0>甜<657,51,0>的
[997,153]<0,0,0>作<0,50,0>词<50,51,0>:<101,0,0>方<101,52,0>文<153,0,0>山
[1150,202]<0,50,0>作<50,50,0>曲<100,0,0>:<100,51,0>周<151,51,0>杰<202,0,0>伦
[1352,202]<0,50,0>编<50,51,0>曲<101,0,0>:<101,51,0>林<152,50,0>迈<202,0,0>可
[1585,4047]<0,253,0>我<253,203,0>轻<456,252,0>轻<708,507,0>地<1215,252,0>尝<1467,252,0>一<1719,508,0>口 <2227,303,0>你<2530,202,0>说<2732,557,0>的<3289,253,0>爱<3542,505,0>我
[5632,3137]<0,303,0>还<303,203,0>在<506,303,0>回<809,506,0>味<1315,251,0>你<1566,255,0>给<1821,507,0>过<2328,253,0>的<2581,305,0>温<2886,251,0>柔
...

可以发现每一行歌词都类似如下格式标记:

[此行歌词距歌曲开始时刻的毫秒数,此行持续的毫秒数]<此字距此行开始时刻的毫秒数,此字持续的毫秒数,0>字 ...

相关资源:C# 解析 KRC & ConsoleAPP

C# 20行代码解析KRC歌词内容相关推荐

  1. 10行代码解析krc歌词文件

    互联网上,我们常见的歌词格式有 LRC.TRC(天天动听歌词).KRC(KuGou ResourCe,酷狗资源文件)和 QRC(QQ音乐歌词):在影视制作中,人们通常会用其他的卡拉 OK 字幕格式,例 ...

  2. 《看聊天记录都学不会C语言?太菜了吧》(14)这么神奇?我写了20行代码竟然一行就可以搞定?

    好消息2020年4月13日晚7.30我在CSDN开播,等你来聊天 预约连接:https://live.csdn.net/room/A757291228/MJWK0Gem 本系列文章将会以通俗易懂的对话 ...

  3. Python用20行代码实现完整邮件功能 [完整代码+建议收藏]

    大家好,我是Lex 喜欢欺负超人那个Lex 擅长领域:python开发.网络安全渗透.Windows域控Exchange架构 今日重点:python脚本实现发送邮件,邮件添加附件,读取接收邮件等功能. ...

  4. python黑科技:Python大佬用20行代码带你打造一个微信聊天机器人,真神了~

    如何用20行Python代码打造一个微信群聊助手? 1.安装python环境 2.安装python的itchat库 3.安装itchat库 4.Linux 5.申请图灵机器人API和key 6.编写p ...

  5. 人脸检测算法代码python_Python有多强大!20行代码实现人脸检测与识别

    题记:大二的时候发现人生苦短,所以信了拍神,开始学Python.学了大半年之后成功转行做前端了.来写个教程帮助大家入门Python. Python优点 Python是一种简单易学.功能强大的编程语言, ...

  6. Python量化交易:如何用不到20行代码实现回溯检验

    假设您有了一个交易策略,接下来怎么做?实盘交易测试策略的有效性?不,在使用资金进行冒险前,应该先对策略进行回溯检验,在历史数据上测试策略是否有效. 什么是回溯检验? 回溯检验(backtest):在历 ...

  7. 20 行代码极速为 App 加上聊天功能

    现在很多 App 都需要集成 IM 功能,今天就为大家分享一下集成 IM 基本功能的步骤.本文内容以 JMessage 为例. 极光 IM ( JMessage ) = 极光推送 ( JPush ) ...

  8. 20行代码让你的电脑自动合成大西瓜!这么厉害不来体验一下吗?

    最近的时间里,想必大家都被"合成大西瓜"这个游戏刷屏,无论是微博,还是B站,乃至是微信公众号,都有很多博主和up主们推荐. 合成大西瓜的游戏方式其实同<2048>游戏非 ...

  9. 20行代码爬取王者荣耀全英雄皮肤!让你享受白嫖的快乐!

    引言 王者荣耀大家都玩过吧,没玩过的也应该听说过,作为时下最火的手机MOBA游戏,咳咳,好像跑题了.我们今天的重点是爬取王者荣耀所有英雄的所有皮肤,而且仅仅使用20行代码即可完成. 准备工作 爬取皮肤 ...

最新文章

  1. python 两个列表相互映射_Python基础 — 10分钟学习函数式Python
  2. java中let_java Signleton模式详解及示例代码
  3. STM32 基础系列教程 44 - FSMC_LCD
  4. Intel Realsense D435 将深度图的灰度图映射为彩色图,打印输出灰度图或彩色图
  5. java gui 控制台_在GUI面板中创建Java控制台
  6. 本地线程分配缓冲_线程本地分配缓冲区
  7. svg标签的CSS3动画特效 - 经典特效
  8. Java程序员最喜爱的编辑器之一(Sublime Text 3)
  9. 右键添加新建剪切板文件夹 新建今天日期文件夹
  10. Codeforces Round #249 (Div. 2) A. Queue on Bus Stop
  11. 设计师都在用这几个免费素材网站,赶紧马住
  12. 打开计算机不显示磁盘盘符,移动硬盘盘符不显示如何修复
  13. css3加号图标_css实现“加号”效果的实例代码
  14. 清华学霸教你1小时入门 Python 爬虫,别说学长没帮你
  15. 【转载】分页插件中关于PageInfo
  16. win7网络里面没有计算机,Win7没有无线网络选项教你完美解决
  17. Regionals 2014 Asia - Daejeon
  18. 图片上传(调用微信接口)
  19. iOS根据图片比例计算显示大小
  20. win7 efi安装(个人心得)

热门文章

  1. 在线旅游市场分析2014年数据
  2. java ftp 被动模式_ftp 主动模式与被动模式
  3. 2022年亚太地区大学生数学建模竞赛/2022年亚太杯ABCD题思路
  4. 词霸天下---词根234【-zo(o)- 动 物】
  5. python 处理xls
  6. 算法练习贴--32--找不同(Java)
  7. java刘备猜拳游戏类_基于java实现人机猜拳游戏
  8. 笔记:GIT配置和命令
  9. AccountManager教程
  10. 最新爬虫(2019.07)淘宝页面登陆滑块验证 selenium + chromedriver 爬取淘宝信息