關(guān)于MP3標(biāo)簽
MP3文件本身只有音頻信息,諸如標(biāo)題帆锋、歌手珍逸、專輯等等信息統(tǒng)統(tǒng)是沒(méi)有的逐虚。然而在windows資源管理器中查看mp3文件,或者用播放器時(shí)能看到這些信息谆膳,就是MP3標(biāo)簽的功勞了叭爱。MP3標(biāo)簽有多種格式,但是沒(méi)有一項(xiàng)國(guó)際標(biāo)準(zhǔn)漱病,也即是說(shuō)沒(méi)有統(tǒng)一的標(biāo)準(zhǔn)买雾。不同類型的標(biāo)簽,其結(jié)構(gòu)杨帽、大小漓穿、存儲(chǔ)的信息都不同。
1.ID3v1 Tag
這是比較早期的一種標(biāo)簽注盈,大部分軟硬件晃危,包括window都可以識(shí)別。它存儲(chǔ)在mp3文件的最后老客,長(zhǎng)度固定為128字節(jié)僚饭,以“TAG”標(biāo)記開(kāi)頭。用UltraEdit等軟件可以很容易看到這一點(diǎn)胧砰。這128自己又被分為固定大小的幾段鳍鸵,分別存儲(chǔ)歌手,專輯朴则,評(píng)論权纤,歌曲類型等最基本的信息钓简。由于128字節(jié)的限制,ID3v1標(biāo)簽中沒(méi)有歌詞信息汹想;更為致命的一個(gè)缺點(diǎn)是外邓,ID3v1標(biāo)簽位于mp3文件的結(jié)尾處,大概當(dāng)時(shí)的設(shè)計(jì)者沒(méi)有預(yù)料到互聯(lián)網(wǎng)技術(shù)的爆發(fā)古掏,使得這種標(biāo)簽在流媒體大行其道的今天變得有些尷尬:你得等整個(gè)文件都緩沖完畢才能得到曲目信息损话。但是,簡(jiǎn)單和兼容仍是它最大的優(yōu)點(diǎn) :)
2.ID3v2 Tag
這是ID3v1之后若干年提出的一項(xiàng)新的標(biāo)簽格式槽唾,有多個(gè)子版本丧枪,常見(jiàn)的是v2.3.0. 曾經(jīng)看到有人說(shuō)ID3v2放在mp3文件的開(kāi)頭是因?yàn)镮D3v1放在結(jié)尾而別無(wú)選擇,這是不對(duì)的庞萍,下面我還要再說(shuō)這個(gè)問(wèn)題拧烦。很大程度上是因?yàn)樯厦嫣岬降腎D3v1放在結(jié)尾的缺點(diǎn),放在開(kāi)頭的話可以在流媒體中發(fā)揮優(yōu)勢(shì)钝计。(事實(shí)上恋博,這個(gè)標(biāo)簽的設(shè)計(jì)者為了獲得更大程度的方便,允許在文件結(jié)尾也放置ID3v2標(biāo)簽私恬,但在ID3v1之前债沮,以提高從結(jié)尾開(kāi)始查找的速度)
ID3v2標(biāo)簽的改進(jìn)不止如此。它極大地?cái)U(kuò)展了標(biāo)簽的容量本鸣,是變長(zhǎng)的疫衩,最大可達(dá)大約256MB(它用28bit來(lái)存儲(chǔ)標(biāo)簽大小,2^28)荣德。這個(gè)數(shù)字大的驚人闷煤,可以預(yù)計(jì),這個(gè)標(biāo)簽格式未來(lái)100年也不會(huì)過(guò)時(shí)_ 所以存儲(chǔ)歌詞當(dāng)然是小case了命爬。不僅如此曹傀,ID3v2甚至同時(shí)支持同步歌詞和不同步歌詞,也就是前面提到的ID3v2 Synchronized Lyrics 和 ID3v2 Unsynchronized Lyrics. 關(guān)于這兩種歌詞我會(huì)在后面詳細(xì)說(shuō)明饲宛。
3.APEv2 Tag
這是一種類似ID3v1的標(biāo)簽皆愉,其內(nèi)容也很簡(jiǎn)單,但大小不完全固定艇抠,一般稍大于ID3v1幕庐,內(nèi)容也豐富一些,比如有增益信息家淤。但是仍然不包含歌詞异剥。其位置在mp3本身數(shù)據(jù)的后面,ID3v1標(biāo)簽和其他存放在末尾的標(biāo)簽之前絮重。標(biāo)簽以"APETAGEX"開(kāi)頭冤寿。對(duì)于這個(gè)標(biāo)簽的認(rèn)識(shí)完全來(lái)自千千靜聽(tīng)歹苦,呵呵,不知道還有什么其他的播放器支持它督怜。
關(guān)于歌詞
mp3的歌詞分為兩種:外置的歌詞文件和內(nèi)嵌的歌詞殴瘦。外置的歌詞主要指.lrc格式的文本文件。
1.LRC歌詞
這是大多數(shù)播放器支持的外掛歌詞号杠。對(duì)于電腦上的播放軟件來(lái)說(shuō)蚪腋,他可以在歌曲和歌詞文件之間建立一個(gè)映射(關(guān)聯(lián)),這當(dāng)然是很方便的姨蟋√肟可是對(duì)于mp3播放機(jī)來(lái)說(shuō)就沒(méi)那么容易了,兩者的文件名必須相同眼溶。(擴(kuò)展名當(dāng)然不同了:) 好在千千給我們提供了自動(dòng)命名的功能寝贡,甚至在你通過(guò)千千把mp3文件發(fā)送到可移動(dòng)磁盤的時(shí)候徐钠,它還很貼心地問(wèn)你要不要把關(guān)聯(lián)的歌詞文件也烤過(guò)去痊银,多好的軟件衣屏!
lrc格式其實(shí)就是純文本,用notepad打開(kāi)可以看到酝静。示例
[02:09.30][04:02.22]On a dark desert highway, cool wind in my hair
它的結(jié)構(gòu)以行為單位,行首是用中括號(hào)[]括起來(lái)的時(shí)間羡玛,后面是歌詞內(nèi)容别智。也許你要問(wèn)了,為什么有兩個(gè)時(shí)間標(biāo)記呢稼稿?哈哈薄榛,lrc格式是很聰明的,對(duì)于某些重復(fù)的歌詞让歼,它就只寫時(shí)間標(biāo)簽把內(nèi)容省略了敞恋。同一行中不管有多少時(shí)間標(biāo)簽,其歌詞內(nèi)容都是那一個(gè)谋右。還有一點(diǎn)要說(shuō)明硬猫,雖然是一行一行出現(xiàn)的,但是這些行沒(méi)有順序的改执,也就是說(shuō)那些時(shí)間標(biāo)簽不一定要按時(shí)間排序的啸蜜。這樣的目的也是為了編輯歌詞的方便,比如你要插入一句歌詞辈挂,不用再找它應(yīng)該在什么位置衬横。
2.ID3v2 Synchronized Lyrics
這個(gè)歌詞包含在ID3v2標(biāo)簽中,代號(hào)是SYLT终蒂。它也是由好多小段組成(按時(shí)間順序排列)蜂林,每個(gè)小段包含了時(shí)間標(biāo)簽和歌詞內(nèi)容遥诉,但具體結(jié)構(gòu)和lrc那種不同了。按其標(biāo)準(zhǔn)嚴(yán)格地說(shuō)噪叙,每個(gè)小段應(yīng)該對(duì)以一個(gè)音節(jié)矮锈,這樣把歌詞分的很細(xì)很細(xì),實(shí)際上也不用這么夸張构眯。我的程序里面就是還按一句一句的來(lái)愕难。
3.ID3v2 Unsynchronized Lyrics
這個(gè)歌詞也包含在ID3v2標(biāo)簽中,代號(hào)是USLT惫霸。從字面可以看出猫缭,非同步歌詞,抑或叫異步歌詞壹店,其不包含時(shí)間信息猜丹,就是一下子把歌詞全顯示出來(lái)。這就顯得不那么吸引人了硅卢,所以我的程序中放棄了它射窒,僅僅寫入了ID3v2 Synchronized Lyrics。順便說(shuō)一下将塑,千千靜聽(tīng)對(duì)這兩種ID3歌詞都不支持脉顿,而微軟的Media Player支持。以前我也從沒(méi)有見(jiàn)過(guò)WMP可以顯示歌詞的点寥,其實(shí)它可以艾疟,而且能夠編輯歌詞。
4.Lyrics3v2
這就是千千靜聽(tīng)的那個(gè)內(nèi)嵌歌詞格式敢辩。和上面的兩者不同蔽莱,它是以歌詞信息的形式單獨(dú)出現(xiàn)的,并不依附于某個(gè)mp3標(biāo)簽戚长。他的位置在APEv2標(biāo)簽(如果有的話)之后盗冷,ID3v1之前。開(kāi)頭標(biāo)記是"LYRICSBEGIN",結(jié)束標(biāo)記為"LYRICS200"同廉。他的結(jié)構(gòu)相對(duì)簡(jiǎn)單仪糖,基本上是照抄.lrc歌詞的格式。