我的semestral項目將於本週四發佈,並且我在閱讀MP3文件時遇到重大問題(該項目關於聲音分析,不要問我究竟是什麼,這麼晚了)。正確閱讀由ID3標籤中斷的MP3文件
首先,我讀了前10個字節來檢查ID3標籤。如果他們在場,我只會跳到第一個MP3頭 - 或者至少這是個大想法。這裏是我怎麼算ID3標籤尺寸:
if (inbuf[0] == 'I' && inbuf[1] == 'D' && inbuf[2] == '3') //inbuf contains first 10 bytes from file
{
int size = inbuf[3] * 2097152 + inbuf[4] * 16384 + inbuf[5] * 128 + inbuf[6]; //Will change to binary shifts later
//Do something else with it - skip rest of ID3 tags etc
}
它工作正常的文件沒有ID3標籤,並與他們的一些文件,但對於一些其他文件的ffmpeg(我使用的解碼)返回「無頭」錯誤,這意味着它沒有正確捕獲MP3頭。我知道,因爲如果我從該.mp3文件(例如Winamp)中刪除ID3,則不會發生錯誤。結論是大小計算算法並不總是有效的。
所以問題是:我如何才能知道.mp3文件(所有可能的標籤,專輯圖片和其他)的整個ID3部分有多大?我正在尋找它,但我只是繼續找到上面發佈的這個算法。有時候我也需要考慮一些關於10個字節的頁腳,但它似乎經常會獲得10個以上的字節,因此它最終能夠獲得正確的MP3幀。
當讀ID3的大小就意味着數據的量** ID3頭之後**所以佔10頭部的字節,我們添加「+ 10」的大小。如果大小不正確(檢查十六進制編輯器?),然後考慮查看**同步安全整數**並通過這樣的函數傳遞您的值以獲得正確的大小返回。 –
PS:從十六進制編輯器複製並粘貼到此處...只顯示有問題的ID3標頭的10個字節。你通過代碼獲得了多大的尺寸?和(來自十六進制編輯器)也會告訴我們第一個mp3幀的字節'FF FB'的顯示偏移量。 –