我一直在編寫一個程序,可以確定任何和每個有關mp3文件的數據。 根據此網頁上的信息(http://www.multiweb.cz/twoinches/mp3inside.htm),我的程序將整個mp3文件讀入一個字節數組,然後在開始時檢查Tag v2,並在Tag v1處檢查文件的結尾。確定mp3文件中標題的Java代碼
我的問題是您可以從標題中獲得的數據。 據我所知,我需要搜索1111_1111的字節,下一個是111x_xxxx。這個標準有一些匹配不是標題,只是偶然的巧合,所以我製作了一個MP3Header類,它具有上述網頁(ID,圖層,比特率等)中提到的所有字段並重寫如果ID,圖層和頻率匹配,則equals方法返回true(我使用第一個標題,我將它作爲基礎,並將其後的每個標題與該標題進行比較)。
這種方法似乎可以完美地用於CBR mp3文件,但是有些VBR文件給我很難。我發現的第一個標題是不正確的,從那一刻起,整個比較就被搞砸了(我沒有檢查比特率是否相等,所以不能成爲原因)。我可以想到的唯一有效解釋是,起始處的標籤可能包含擴展ASCII表中的字符,並且由於Java沒有unsigned int,所以1111_1111(255)字節在轉換時可能會被解釋爲-1整數 我的問題是,我如何確保我找到的字節確實是一個正確的標題?或者我應該存儲符合標準的所有內容,並檢查哪一個最爲常見,然後去做?
感謝, 伊什特萬
P.S:我知道這也許可以只用幾行代碼解決,如果我用JMF,但我很享受這樣寫它的挑戰。
我要回答我自己的問題: 原來我沒有引起足夠的重視,文件開頭的Tag v2也有一個標題,它與音樂數據標題具有相同的標識符,我的算法困惑。解決方法是在搜索時簡單地忽略文件的前幾個字節(或者,首先解析標籤,然後在完成後開始標頭搜索)。 –
雖然你發佈的鏈接有一些有用的位,所以謝謝。 –
+1我無法讓javamusictag.sourceforge.net正確解析MP3標籤。但是,entagged.sourceforge.net(從該頁面鏈接)按照我的預期生成信息。作爲獎勵,Jar稍小,它還提供了軌道長度和其他多汁細節,如VBR,比特率,通道數量和採樣率。 :-) –