这不是重复的。我已经全部读过了。
我有诺基亚-N8-00。它的音乐播放器支持USLT(UnSynchronised 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文件以供进一步检查。以下是我的新发现:
首先,我们对编码是正确的:
这是否意味着您可以将'01'变成'03'并且它会神奇地起作用?我怀疑。这取决于司机。如果驱动程序看到'\ x00'字节并将其作为字符串的结尾(如USLT有效负载的末尾),则该怎么办?要对此进行测试,您可以尝试手动转换文件上的编码(通过删除额外的字节)。
其次,在两个文件上运行linux上的eyeD3,我恢复了:
supported.mp3 -> ID3 v2.4
unsupported.mp3 -> ID3 v2.3
也许这是一个问题?
另请注意,两个文件中USLT标记的位置不同:
supported.mp3:
unsupported.mp3:
在linux上,如果需要,还有其他工具可以为您提供额外信息:
mp3info, id3info, id3tool, exiftool, eyeD3, lltag
有几个例子。但是,我认为主要问题在于文本编码。我能够使用上述工具很好地恢复歌词。但是由于ID3版本不同等原因,一些工具给出了不同的答案。