MP3文件的結(jié)構(gòu)與編程
有一個朋友喜歡聽MP3,為了獲取MP3,寫了一個程序,專門從一家音樂網(wǎng)站上搜索下載mp3,一下子下載了有上千首。這時朋友又犯愁了,這些MP3的歌曲名字都是使用1,2,3,4,。。等數(shù)字命名,挑選起來十分不方便。雖然MP3播放器能夠讀出MP3文件信息的歌曲名,但歌曲文件本身的名字卻不利于自己管理。于是就想寫一個小程序?qū)崿F(xiàn)MP3自動更名。查了一些資料,研究了一下MP3的文件結(jié)構(gòu)。
研究MP3的結(jié)構(gòu),就不能不研究ID3標簽。ID3標簽是MP3音樂檔案中的歌曲附加訊息,它能夠在MP3中附加曲子的演出者、作者以及其它類別資訊,方便眾多樂曲的管理。缺少ID3標簽并不會影響 MP3的播放,但若沒有的話,管理音樂文件也會相當?shù)穆闊。如果你在網(wǎng)上download MP3,里面多半已經(jīng)寫有預設(shè)的ID3訊息。ID3,一般是位于一個mp3文件的開頭或末尾的若干字節(jié)內(nèi),附加了關(guān)于該mp3的歌手,標題,專輯名稱,年代,風格等信息,該信息就被稱為ID3信息,ID3信息分為兩個版本,v1和v2版。
其中:v1版的ID3在mp3文件的末尾128字節(jié),以TAG三個字符開頭,后面跟上歌曲信息。
v2版一般位于mp3的開頭,可以存儲歌詞,該專輯的圖片等大容量的信息。
但ID3并不是MP3標簽的ISO國際標準,ID3的各種版本目前只是一個近乎事實上的標準,并沒有人強迫播放器或者編碼程序必須支持它。
ID3V1大概有兩個版本,由于ID3V1.0沒有包括曲目序號的定義,所以Michael Mutschler在1997年進行了改進,引入了版本1.1。通過占用備注字段的最后兩個字節(jié),用一個00字節(jié)作標記,另一個字節(jié)改為序號,可以讓ID3支持曲目編號了。一個字節(jié)的空間讓ID3 V1.1支持最高到255的曲目序號,考慮到一張唱片超過256個曲目的可能性極小,這個改進還是相當合理的。但ID3V1只有128個字節(jié)可以使用,如果要在MP3中儲存更多的信息,比如歌詞,專輯圖片等,顯然是無法達到的,于是產(chǎn)生了ID3V2。ID3V2到現(xiàn)在一共有4個版本,但流行的播放軟件一般只支持第3版,既ID3v2.3。由于ID3V1記錄在MP3文件的末尾,ID3V2就只好記錄在MP3文件的首部了。也正是由于這個原因,對ID3V2的操作比ID3V1要慢。而且ID3V2結(jié)構(gòu)比ID3V1的結(jié)構(gòu)要復雜得多,但比前者全面且可以伸縮和擴展。
但我們只需要讀出MP3的TITLE,所以只要解析IDV1就夠了,這里不對IDV2做過多說明,其實我也沒有深入研究IDV2。
ID3V1的內(nèi)容和每個標簽占用的字節(jié)說明如下:
char Header[3]; /*標簽頭必須是"TAG"否則認為沒有標簽*/
char Title[30]; /*標題*/
char Artist[30]; /*作者*/
char Album[30]; /*專集*/
char Year[4]; /*出品年代*/
char Comment[30]; /*備注*/
char Genre; /*類型*/
相關(guān)推薦:北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |