基于http://id3.org/id3v2.3.0说明书中,帧头的布局是:
Frame ID $xx xx xx xx (four characters)
Size $xx xx xx xx
Flags $xx xx
但是,同样的页面只是情侣低于行说,框架,允许不同类型的文本编码有一个文本编码描述帧的大小后直接字节。如果使用ISO-8859-1
这个字节应该是$00
,如果Unicode
使用它应该是$01
。
这是令人困惑的,因为标志(2个字节)应帧大小信息后直接,所以我期望的编码字节是标志信息后。
所以,现在什么是正确的?
Frame ID $xx xx xx xx (four characters)
Size $xx xx xx xx
Flags $xx xx
Encoding $xx
Text
要么
Frame ID $xx xx xx xx (four characters)
Size $xx xx xx xx
Encoding $xx
Flags $xx xx
Text
我认为,这实际上可能是一个
错误
情况下,在规范坏字眼。我发现两个图中显示完整的报头的例子ID3v2 Chapter Frame Addendum。该文件描述了两个新引入的帧类型,这是不感兴趣的手头上的问题。但幸运的是,它也含有嵌入的“名称/ SONGNAME /内容description'帧(TIT2
)和”字幕/说明refinement'帧(TIT3
)的例子,这两者都是文本框*:
根据该图中,标题帧(ID:TIT2)具有以下结构:第一the frame header:
Frame ID $xx xx xx xx (four characters)
Size $xx xx xx xx
Flags $xx xx
然后将其直接跟着ID-dependent fields:
Text encoding $xx Information
<text string according to encoding>
这种布局是很有道理的我。如果你仍然对正确的布局怀疑,你可以检查出existing implementations的一个来源。
旁注:在ID3v2.4.0 specification他们改变了混乱的句子。
框架,允许不同类型的文本编码包含文本编码描述字节。
*只有允许不同类型的文本编码的帧具有文本编码描述字节。 不出所料,大部分是文本框
帧报头是10个字节长。对于UID的4个字节用于帧的长度为4个字节(标题除外)2个字节用于标记。任何其他信息将在框架本身,而不是它的头部被发现。
措辞肯定是混乱的。
什么意思是,你想到哪里去阅读一个字符串,第一个字节告诉你会发生什么。 $ 00表示ISO-8859-1或一个字节编码$ 01意味着Unicode或2字节的编码。 $ 01之后无论是FF FE或FE FF通知对其中最重要字节。
我建议你使用一些MP3文件十六进制编辑器并剖析他们