2

基于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
4

2 回答 2

5

我认为这实际上可能是规范中措辞不当的错误案例。我在ID3v2 章节框架附录中找到了两个图表,显示了完整标题的示例。该文档描述了两种新引入的帧类型,这对手头的问题并不感兴趣。但幸运的是,它还包含嵌入的“标题/歌曲名/内容描述”-frame ( TIT2) 和“Subtitle/Description refinement” -frame ( ) 的示例TIT3,它们都是文本框架*:

在此处输入图像描述

根据该图,标题帧(ID:TIT2)具有以下结构: 首先是帧头

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

然后直接跟随ID 相关字段

Text encoding  $xx Information    
<text string according to encoding>

这种布局对我来说最有意义。如果您仍然对正确的布局有疑问,您可以查看现有实现之一的源代码。

旁注:ID3v2.4.0 规范中,他们将令人困惑的句子更改为。

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

*只有允许不同类型文本编码的帧才有文本编码描述字节
不出所料,其中大部分是文本框架

于 2013-06-24T19:19:53.623 回答
2

帧头是 10 字节长。4 个字节用于 UID 4 个字节用于帧长度(不包括标头) 2 个字节用于标志。任何其他信息都将在框架本身中找到,而不是在其标题中。

措辞肯定令人困惑。

这意味着您希望读取字符串的位置,第一个字节告诉您期望什么。$00 表示 ISO-8859-1 或 1 字节编码 $01 表示 Unicode 或 2 字节编码。$01 后跟 FF FE 或 FE FF 以告知最高有效字节是哪个。

我建议您在一些 mp3 文件上使用 hexa 编辑器并剖析它们

于 2013-11-05T15:08:37.847 回答