我对如何针对ID3 v2.3.0对帧大小字节进行编码/解码存在一些混淆。根据(非正式)ID3 v2.3.0规范,每帧的大小应编码为4个字节,其中每个字节的最高有效位未被使用。要计算尺寸,它会采取下面的公式:GEOB标签的ID3 v2.3帧大小字段的正确编码
byte MASK = (byte)0x7F;
int size = 0;
for (int = 0; i < 4; i++) {
size = size * 128 + (b[i] & MASK);
}
但是,当我用我的解析器解析一些MP3文件,相当多的文件有GEOB(普通封装的对象标记)帧的大小字节编码为如果它是一个Big Endian 32位整数。
当我通过使用适当的算法对它们进行重新编码来修复这些字节后,商业软件(如Windows 7和Winamp)无法正确显示后续标签(在几个实例中,TIT2恰好在GEOB之后,所以歌曲标题虽然它在文件中,但并未显示)。
我还发现了MCDI(音乐CD标识符)和TALB('Album/Movie/Show title')标签的类似问题。
我阅读了v2.3规范,也是谷歌搜索,但无法找到任何有关使用32位整数作为这些帧的大小元数据的信息。然而,不同商业软件中的常见行为似乎暗示了这样的字段,32位整数应该用作大小而不是由0x7F屏蔽的4字节。
所以我只是想知道这里有没有人在ID3 v2.3上工作过,可以为我澄清这一点。