2013-06-23 39 views
1

基于http://id3.org/id3v2.3.0说明书中,帧头的布局是:ID3v2的规格

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 

回答

4

我认为这实际上可能是在规范不好措辞的 错误 情况。我在ID3v2 Chapter Frame Addendum中发现了两个图表,显示完整标题的示例。该文件描述了两个新引入的框架类型,这些框架类型对于手头的问题不感兴趣。但幸运的是,它也含有嵌入的 '名称/ SONGNAME /内容description'帧(TIT2)和' 字幕/说明refinement'帧(TIT3)的例子,这两者都是文本框*:

enter image description here

根据该图中,标题帧(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他们改变了混淆的句子。

允许不同类型的文本编码的帧包含文本 编码描述字节。

* 只有镜架,允许不同类型的文本编码有一个文本编码描述字节
不出所料,其中大多数是文本框

+0

该网站已关闭。 :( –

+0

@LittleHelper我刚刚检查过它对我有用,否则你可以使用Wayback Machine:https://web.archive.org/web/20161022105303/http://id3.org/id3v2-chapters-1.0 – djf

2

帧头是10个字节长。 UID的4个字节 帧的长度为4个字节(不包括标头) 标志的2个字节。 任何其他信息将被发现在框架本身,而不是其标题。

措辞确实很混乱。

什么意思是,当你期望读取一个字符串时,第一个字节告诉你期望什么。 $ 00表示ISO-8859-1或一个字节编码 $ 01表示Unicode或2字节编码。 $ 01后跟FF FF或FE FF以通知最高有效字节。

我建议你在某些mp3文件上使用hexa编辑器,并解剖它们

+0

有关读取内容的额外字节的最后信息是黄金。谢谢! –