gpt4 book ai didi

c - 如何检查或更改 USLT (ID3) 中的编码?

转载 作者:太空宇宙 更新时间:2023-11-04 03:12:25 26 4
gpt4 key购买 nike

它不是重复的。我都读过了。

我有一部 Nokia-N8-00。它的音乐播放器支持 USLT(UnS同步 Lyrics/Text)。我使用一个名为 spotdl ( https://github.com/Ritiek/Spotify-Downloader ) 的工具从“spotify”获取歌曲标题并从其他来源(通常是 youtube)下载它们并合并元数据。

那么问题来了,用那个工具下载的音乐在我的所有设备上都有歌词,除了N8。幸运的是,我的手机也支持嵌入歌词的音乐。然后我分析了这两个文件,发现在二进制序列中,它们的区别很小(仅针对 USLT 部分,但它们是不同的歌曲)。不同之处在于:-

支持的:

55 53 4C 54 00 00 0A 56 00 00 03 58 58 58

没有的:

55 53 4C 54 00 00 07 38 00 00 01 58 58 58

(这些序列用于文件中的“USLT”声明)

我认为这是编码差异。如果我是对的,存在什么编码,在哪个编码中?如果不是编码,那是什么?

我知道这些序列无法详细说明情况。所以,这是我正在尝试的文件 https://github.com/gaurav712/music .

我不需要受支持的 USLT,我只是对此感到好奇,因为我想在 C 中实现它(不过我不需要特定语言的帮助)。

最佳答案

这是我得到的:

55 53 4C 54

转换为:

USLT

所以我们做对了。现在,我相信我们可以将该结果与这个答案合并:

Frame ID       $xx xx xx xx (four characters)
Size $xx xx xx xx
Flags $xx xx
Encoding $xx
Text

(取自:ID3v2 Specification)

(或查看:https://web.archive.org/web/20161022105303/http://id3.org/id3v2-chapters-1.0)

现在,我无法从源代码中获取此信息(因为该站点已关闭)但还有此信息:

Encoding flag explanation:
• $00 ISO-8859-1 [ISO-8859-1]
• $01 UTF-16 [UTF-16]
• $02 UTF-16BE [UTF-16]
• $03 UTF-8 [UTF-8]

因此,根据这些发现(我不太确定),支持的是 UTF-8 编码,不支持的是 UTF-16。

编辑

我已经下载并查看了您的 mp3 文件以供进一步检查。这是我的新发现:

首先,我们对编码的判断是正确的:

支持 UTF-8: enter image description here

UTF-16 不受支持: enter image description here

这是否意味着您只需将“01”变成“03”就可以神奇地发挥作用?我怀疑。这取决于司机。如果驱动程序看到 '\x00' 字节并将其解释为字符串结尾(如 USLT 负载结尾)怎么办?要对此进行测试,您可以尝试手动转换文件的编码(通过删除额外的字节)。

其次,在 linux 上对这两个文件运行 eyeD3,我恢复了:

supported.mp3   -> ID3 v2.4
unsupported.mp3 -> ID3 v2.3

也许这是个问题?

另请注意,USLT 标记在两个文件中的位置不同:

支持.mp3:

enter image description here

不支持.mp3:

enter image description here

在 Linux 上,如果需要,还有更多工具可以为您提供额外信息:

mp3info, id3info, id3tool, exiftool, eyeD3, lltag

举几个例子。但是,我认为主要问题在于文本编码。使用上述工具,我能够很好地恢复歌词。但是由于ID3版本不同等原因,部分工具会给出不同的答案。

关于c - 如何检查或更改 USLT (ID3) 中的编码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55100798/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com