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