日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

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

發布時間:2023/12/20 C# 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C# 20行代码解析KRC歌词内容 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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歌词内容的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。