我對如何針對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上工作過,可以爲我澄清這一點。