複製鏈接
請複製以下鏈接發送給好友

ID3

(位於mp3文件的開頭或末尾的信息)

鎖定
ID3,一般是位於一個mp3文件的開頭或末尾的若干字節內,附加了關於該mp3的歌手,標題,專輯名稱,年代,風格等信息,該信息就被稱為ID3信息,ID3信息分為兩個版本,v1和v2版。 其中:v1版的ID3在mp3文件的末尾128字節,以TAG三個字符開頭,後面跟上歌曲信息。 v2版一般位於mp3的開頭,可以存儲歌詞,該專輯的圖片等大容量的信息。
外文名
ID3
類    別
metadata容器
發明者
Eric Kemp
發明時間
1996年

ID3ID3簡介

ID3標籤
ID3是一種metadata容器,多應用於MP3格式的音頻文件中。它可以將相關的曲名、演唱者、專輯、音軌數等信息存儲在MP3文件中。
ID3標籤是MP3音樂檔案中的歌曲附加訊息,它能夠在MP3中附加曲子的演出者、作者以及其它類別資訊,方便眾多樂曲的管理。缺少ID3標籤並不會影響 MP3的播放,但若沒有的話,管理音樂文件也會相當的麻煩。如果你在網上downloadMP3,裏面多半已經寫有預設的ID3訊息。如果你想要將其清除重設,使用WinAMP中的“Alt + 3”熱鍵,就能修改MP3檔案中之的ID3標籤。
ID3Tags
此外,ID3也就是ID3Tags,其中的“Tag”在英文中名詞的一個意思是“標籤”,所以“ID3Tags”也就是“MP3文件曲目標籤”的意思。
有些地方以“ID3”這樣的簡稱來代表“ID3Tags”,二者本質是一樣的。
標準的制定
如果沒有ID3,那麼人們只能根據文件名判斷一首歌它是什麼內容了,何況就算聽出了是什麼歌,它的演唱者、專輯名稱你也未必背得下來,所以給MP3文件增加內置的標籤是理所當然的事情。有趣的是,MP3的標籤並沒有一個ISO國際標準,ID3的各種版本只是一個近乎事實上的標準,並沒有人強迫播放器或者編碼程序必須支持它。

ID3ID3版本

ID3發明時間

ID3 V1是由Eric Kemp在1996年發明的。ID3 V1是一組附加在音樂文件後面的數據,它的長度是固定的128字節

ID3流派定義

其中流派一共定義了79種,流行的播放軟件Winamp則把它擴展到了125種,從Blues到Noise到Dance Hall,非常豐富,在許多支持ID3編輯的軟件中都可以看到這個列表,但是國內用户似乎不太在意這個標記,大多數人甚至不知道自己的歌曲到底屬於哪一個分類。

ID3字節缺點

這些內容一共只有128個字節,並不算累贅。由於附加在文件尾部,所以播放器不必考慮它的影響,即使不支持ID3標記也不會影響音樂的還原——某些很老的播放器確實可能會在播放到這裏的時候發出噪音或者報錯。但是標記在文件尾部也會造成一個問題,那就是如果還沒有讀到文件末尾,我們什麼信息也看不到。對硬盤和閃存裏面的歌曲這當然不是問題,但是如果你通過流媒體方式直接在網絡上收聽,就會發現它的缺陷了。

ID3曲目序號

細心的人會注意到ID3V1.0沒有包括曲目序號的定義,所以Michael Mutschler在1997年進行了改進,引入了版本1.1。通過佔用備註字段的最後兩個字節,用一個00字節作標記,另一個字節改為序號,可以讓ID3支持曲目編號了。一個字節的空間讓ID3 V1.1支持最高到255的曲目序號,考慮到一張唱片超過256個曲目的可能性極小,這個改進還是相當合理的。

ID3ID3格式

ID3ID3v1

ID3V1比較簡單,它是存放在MP3文件的末尾,用16進制的編輯器打開一個MP3文件,查看其末尾的128個順序存放字節,數據結構定義如下: char Header[3]; /*標籤頭必須是"TAG"否則認為沒有標籤*/
char Title[30]; /*標題*/
char Artist[30]; /*作者*/
char Album[30]; /*專集*/
char Year[4]; /*出品年代*/
char Comment[30]; /*備註*/
char Genre; /*類型*/
ID3格式 ID3格式
ID3V1的各項信息都是順序存放,沒有任何標識將其分開,比如標題信息不足30個字節,則使用'\0'補足,否則將造成信息錯誤。Genre使用原碼錶示,對照表如下:/* Standard genres */
0="Blues";
1="ClassicRock";
2="Country";
3="Dance";
4="Disco";
5="Funk";
6="Grunge";
7="Hip-Hop";
8="Jazz";
9="Metal";
10="NewAge";
11="Oldies";
12="Other";
13="Pop";
14="R&B";
15="Rap";
16="Reggae";
17="Rock";
18="Techno";
19="Industrial";
20="Alternative";
21="Ska";
22="DeathMetal";
23="Pranks";
24="Soundtrack";
25="Euro-Techno";
26="Ambient";
27="Trip-Hop";
28="Vocal";
29="Jazz+Funk";
30="Fusion";
31="Trance";
32="Classical";
33="Instrumental";
34="Acid";
35="House";
36="Game";
37="SoundClip";
38="Gospel";
39="Noise";
40="AlternRock";
41="Bass";
42="Soul";
43="Punk";
44="Space";
45="Meditative";
46="InstrumentalPop";
47="InstrumentalRock";
48="Ethnic";
49="Gothic";
50="Darkwave";
51="Techno-Industrial";
52="Electronic";
53="Pop-Folk";
54="Eurodance";
55="Dream";
56="SouthernRock";
57="Comedy";
58="Cult";
59="Gangsta";
60="Top40";
61="ChristianRap";
62="Pop/Funk";
63="Jungle";
64="NativeAmerican";
65="Cabaret";
66="NewWave";
67="Psychadelic";
68="Rave";
69="Showtunes";
70="Trailer";
71="Lo-Fi";
72="Tribal";
73="AcidPunk";
74="AcidJazz";
75="Polka";
76="Retro";
77="Musical";
78="Rock&Roll";
79="HardRock";
/* Extended genres */
80="Folk";
81="Folk-Rock";
82="NationalFolk";
83="Swing";
84="FastFusion";
85="Bebob";
86="Latin";
87="Revival";
88="Celtic";
89="Bluegrass";
90="Avantgarde";
91="GothicRock";
92="ProgessiveRock";
93="PsychedelicRock";
94="SymphonicRock";
95="SlowRock";
96="BigBand";
97="Chorus";
98="EasyListening";
99="Acoustic";
100="Humour";
101="Speech";
102="Chanson";
103="Opera";
104="ChamberMusic";
105="Sonata";
106="Symphony";
107="BootyBass";
108="Primus";
109="PornGroove";
110="Satire";
111="SlowJam";
112="Club";
113="Tango";
114="Samba";
115="Folklore";
116="Ballad";
117="PowerBallad";
118="RhythmicSoul";
119="Freestyle";
120="Duet";
121="PunkRock";
122="DrumSolo";
123="Acapella";
124="Euro-House";
125="DanceHall";
126="Goa";
127="Drum&Bass";
128="Club-House";
129="Hardcore";
130="Terror";
131="Indie";
132="BritPop";
133="Negerpunk";
134="PolskPunk";
135="Beat";
136="ChristianGangstaRap";
137="HeavyMetal";
138="BlackMetal";
139="Crossover";
140="ContemporaryChristian";
141="ChristianRock";
142="Merengue";
143="Salsa";
144="TrashMetal";
145="Anime";
146="JPop";
147="Synthpop";

ID3ID3V2

ID3V2一共有4個版本,但流行的播放軟件一般只支持第3版,即ID3v2.3。由於ID3V1記錄在MP3文件的末尾,ID3V2就只好記錄在MP3文件的首部了。也正是由於這個原因,對ID3V2的操作比ID3V1要慢。而且ID3V2結構比ID3V1的結構要複雜得多,但比前者全面且可以伸縮和擴展。
下面就介紹一下ID3V2.3。

ID3ID3V2.3

ID3標籤介紹

每個ID3V2.3的標籤都由一個標籤頭和若干個標籤幀或一個擴展標籤頭組成。關於曲目的信息如標題、作者等都存放在不同的標籤幀中,擴展標籤頭和標籤幀並不是必要的,但每個標籤至少要有一個標籤幀。標籤頭和標籤幀一起順序存放在MP3文件的首部。

ID3標籤頭

在文件的首部順序記錄10個字節的ID3V2.3的頭部。數據結構如下:
char Header[3]; /*必須為"ID3"否則認為標籤不存在*/
char Ver; /*版本號;ID3V2.3就記錄03,ID3V2.4就記錄04*/
char Revision; /*副版本號;此版本記錄為00*/
char Flag; /*存放標誌的字節,這個版本只定義了三位,稍後詳細解説*/
char Size[4]; /*標籤大小,包括標籤幀和標籤頭。(不包括擴展標籤頭的10個字節)*/
原文:The ID3v2 tag size is the size of the complete tag after unsychronisation, including padding, excluding the header but not excluding the extended header (total tag size - 10).
1.標誌字節
標誌字節一般為0,定義如下:
abc00000
a -- 表示是否使用不同步(一般不設置)
b -- 表示是否有擴展頭部,一般沒有(至少Winamp沒有記錄),所以一般也不設置
c -- 表示是否為測試標籤(99.99%的標籤都不是測試用的啦,所以一般也不設置)
2.標籤大小
一共四個字節,但每個字節只用7位,最高位不使用恆為0。所以格式如下
0xxxxxxx 0xxxxxxx 0xxxxxxx 0xxxxxxx
計算大小時要將0去掉,得到一個28位的二進制數,就是標籤大小(不懂為什麼要這樣做),計算公式如下:
int total_size;
total_size = Size[0]*0x200000
+Size[1]*0x4000
+Size[2]*0x80
+Size[3]

ID3標籤幀

每個標籤幀都有一個10個字節的幀頭和至少一個字節的不固定長度的內容組成。它們也是順序存放在文件中,和標籤頭和其他的標籤幀也沒有特殊的字符分隔。得到一個完整的幀的內容只有從幀頭中得到內容大小後才能讀出,讀取時要注意大小,不要將其他幀的內容或幀頭讀入。
幀頭的定義如下:
char FrameID[4]; /*用四個字符標識一個幀,説明其內容,稍後有常用的標識對照表*/
char Size[4]; /*幀內容的大小,不包括幀頭,不得小於1*/
char Flags[2]; /*存放標誌,只定義了6位,稍後詳細解説*/
1.幀標識
用四個字符標識一個幀,説明一個幀的內容含義,常用的對照如下:
TIT2=標題 表示內容為這首歌的標題,下同
TPE1=作者
TALB=專集
TRCK=音軌 格式:N/M 其中N為專集中的第N首,M為專集中共M首,N和M為ASCII碼錶示的數字
TYER=年代 是用ASCII碼錶示的數字
TCON=類型 直接用字符串表示
COMM=備註 格式:"eng\0備註內容",其中eng表示備註所使用的自然語言
2.大小
這個可沒有標籤頭的算法那麼麻煩,每個字節的8位全用,格式如下
xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx
算法如下:
int FSize;
FSize = Size[0]*0x1000000
+Size[1]*0x10000
+Size[2]*0x100
+Size[3];
3.標誌
只定義了6位,另外的10位為0,但大部分的情況下16位都為0就可以了。格式如下:
abc00000 ijk00000
a -- 標籤保護標誌,設置時認為此幀作廢
b -- 文件保護標誌,設置時認為此幀作廢
c -- 只讀標誌,設置時認為此幀不能修改(但我沒有找到一個軟件理會這個標誌)
i -- 壓縮標誌,設置時一個字節存放兩個BCD碼錶示數字
j -- 加密標誌,(沒有見過哪個MP3文件的標籤用了加密)
k -- 組標誌,設置時説明此幀和其他的某幀是一組
值得一提的是winamp在保存和讀取幀內容的時候會在內容前面加個'\0',並把這個字節計算在幀內容的大小中。
附:幀標識的含義
4. Declared ID3v2 frames
The following frames are declared in this draft.
AENC Audio encryption
APIC Attached picture
COMM Comments
COMR Commercial frame
ENCR Encryption method registration
EQUA Equalization
ETCO Event timing codes
GEOB General encapsulated object
GRID Group identification registration
IPLS Involved people list
LINK Linked information
MCDI Music CD identifier
MLLT MPEG location lookup table
OWNE Ownership frame
PRIV Private frame
PCNT Play counter
POPM Popularimeter
POSS Position synchronisation frame
RBUF Recommended buffer size
RVAD Relative volume adjustment
RVRB Reverb
SYLT Synchronized lyric/text
SYTC Synchronized tempo codes
TALB Album/Movie/Show title
TBPM BPM (beats per minute)
TCOM Composer
TCON Content type
TCOP Copyright message
TDAT Date
TDLY Playlist delay
TENC Encoded by
TEXT Lyricist/Text writer
TFLT File type
TIME Time
TIT1 Content group description
TIT2 Title/songname/content description
TIT3 Subtitle/Description refinement
TKEY Initial key
TLAN Language(s)
TLEN Length
TMED Media type
TOAL Original album/movie/show title
TOFN Original filename
TOLY Original lyricist(s)/text writer(s)
TOPE Original artist(s)/performer(s)
TORY Original release year
TOWN File owner/licensee
TPE1 Lead performer(s)/Soloist(s)
TPE2 Band/orchestra/accompaniment
TPE3 Conductor/performer refinement
TPE4 Interpreted, remixed, or otherwise modified by
TPOS Part of a set
TPUB Publisher
TRCK Track number/Position in set
TRDA Recording dates
TRSN Internet radio station name
TRSO Internet radio station owner
TSIZ Size
TSRC ISRC (international standard recording code)
TSSE Software/Hardware and settings used for encoding
TYER Year
TXXX User defined text information frame
UFID Unique file identifier
USER Terms of use
USLT Unsychronized lyric/text transcription
WCOM Commercial information
WCOP Copyright/Legal information
WOAF Official audio file webpage
WOAR Official artist/performer webpage
WOAS Official audio source webpage
WORS Official internet radio station homepage
WPAY Payment
WPUB Publishers official webpage
WXXX User defined URL link frame

ID3ID3讀取

mp3的id3信息存放在mp3文件結尾處的128字節處,結構如下:
type ID3struct =packed record
ID:array[0..2] of char
title :array[0..29] of char;
artist:array[0..29] of char;
album:array[0..29} of char;
year:array[0..3] of char;
comment:array[0..29] of char;
genre:byte;
指針讀出相應位置的數據,就可以讀出ID3信息:
program showID3;
{$apptype console}
var
tempfile:file of byte; //tempfile指針,二進制型文件
i:integer;
x:byte;
begin
assign(tempfile,)
reset(tempfile);//文件關聯,復位
seek(tempfile,(filesize(tempfile)-128)); //指針指向距文件結尾128字節處
writeln('ID:');
for i:=0 to 2 do
begin
read(tempfile,x);
write(chr(x));
end;
writeln;
writeln('title:');
for i:=0 to 29 do
begin
read(tempfile,x);
write(chr(x));
end;
writeln;
writeln('artist:');
for i:=0 to 29 do
begin
read(tempfile,x);
write(chr(x));
end;
writeln;
writeln('album:');
for i:=0 to 29 do
begin
read(tempfile,x);
write(chr(x));
end;
writeln;
writeln('year:');
for i:=0 to 3 do
begin
read(tempfile,x);
write(chr(x));
end;
writeln;
writeln('comment:');
for i:=0 to 29 do
begin
read(tempfile,x);
write(chr(x));
end;
writeln; //用循環的方法依次讀出各個字節
close(tempfile);
end.

ID3玩轉ID3

ID3聲色俱全

不知道你有沒有這樣的經歷,一些從網上下載的MP3音樂,文件名明明是01、02這樣的序號,但播放時卻能顯示出歌曲的正確名稱來,是不是有點奇妙?不過這沒有什麼,再看看下面這張圖,播放器裏不但有歌曲名稱,還顯示出了歌詞和歌手的圖片,是不是更酷啊?這其實都是ID3在暗中相助,只要看完這篇文章,你也能做到,讓我們開始非同一般的音樂之旅吧……。

ID3尋根溯源

ID3是什麼 MP3和一般的聲音文件不同,除音頻信息外,還包含該音樂的歌手名稱、專輯名稱、歌名、備註等附加信息,我們把這些附加信息稱為ID3 Tag,也就是ID3標記。起初MP3並不能保存這些信息,直到1996年,一個叫做Eric Kemp的人制作了Studio3軟件,它可以在MP3文件的最後部分增加固定的128字節小塊數據,用來記錄音樂的信息。很快,MP3ext的作者Michael Mutschler又將這個標記進行了擴展,並正式將其命名為ID3,而且還使用註釋的最後兩個字節來記錄CD和音樂的來源,其版本被定為ID3v1.1。不過ID3v1版本的限制太多,比如歌曲名長度被限制在30個英文字母,稍長一點的曲名就會被截掉,讓人頭痛不已。在這種情況下,它的升級版本ID3v2出現了。它首先解除了128個字節的限制,各個字段的長度也是彈性可變的,使可包含的音樂信息更為豐富,除了歌名、專輯名、演唱者外,還可保存歌詞、均衡器設置、圖片等信息。ID3v2的設計更靈活,擴展性更強,並且支持Unicode,因此歌詞信息支持多語言。ID3v2甚至能包含一個文件,所以未來的MP3可能會附帶有視頻文件,讓你不僅能聽,還可以看。微軟的Windows Midia Player就能很好地支持ID3v2,甚至在Windows XP中,你不需要打開任何播放器,只要進入一個存放MP3的文件夾,系統就能讀取ID3v2的信息來對文件分類排列。
有關Windows XP對MP3音樂文件夾的支持,請參看本刊2004年第11期系統應用欄目中的《用好Windows XP的音樂大管家》。

ID3選對工具

為MP3加上標籤筆者平時喜歡從網上下載MP3歌曲,積累得多了找起歌來就很不方便,既然知道了ID3那麼大的功用,何不借助它來管理一下呢。工欲善其事,必先利其器。首先在網上下載了多個ID3編輯軟件,通過試用比較,最終確定了用Tag&Rename。它是一個非常強大的媒體文件標籤編輯和重命名工具,除支持多種格式標籤外,它還有一項獨特功能,就是能從文件名倒查標籤信息(下文主要針對的是ID3v2版本)。
Tag&Rename小檔案
軟件版本:3.01
軟件大小:1789 KB軟件性質:免費軟件
適用平台:Windows 9x/ME/2000/XP
ID3 ID3
第一步:為了提高編輯ID3的效率,我首先儘可能地把硬盤上的歌曲按照歌手的名字分開在不同文件夾中保存,每個歌手下面又按不同的專輯名分開保存。第二步:啓動Tag&Rename,可以看到主界面上方是標籤信息欄面板,左下方是文件夾窗口。選中一個存放某張專輯的文件夾,Tag&Rename就會將裏面的MP3文件讀取到右邊的窗口,並顯示出MP3的文件名和標籤信息。按鍵盤上的Alt 2鍵切換到ID3v2模式。第三步:這時要分成兩種情況:一種情況是MP3文件是胡亂命名的,各個標籤字段也是空白的,總之沒有任何可利用的信息。另一種情況就是MP3文件名含有歌曲名或歌手的名字,如“專輯名_曲目號.MP3”、“曲目號_曲名.MP3”等,或者有部分歌曲已經填好標籤。
ID3 ID3
(1)第一種情況:這種情況下只能手工填寫全部標籤信息。按F3鍵進入“多文件標籤編輯器”標籤,再按Ctrl A鍵選中所有的文件,接着勾選標籤信息欄中的“藝術家”選項,然後在其右側的文本框裏填上歌手的名字,單擊“保存標籤”按鈕,即可批量修改所有選中歌曲中的“藝術家”項了。以此類推,可以批量填寫專輯、年份、流派等項。接下來填寫歌曲名稱和歌詞。由於歌曲名稱及歌詞是每首歌獨有的,所以不能用批量方法來填寫。按F5鍵打開標籤編輯器,在“標題”一欄中填上歌曲名稱,再單擊上方的“歌詞”選項卡切換到歌詞編輯界面,填入歌詞。如果你已經將歌詞保存為文本文件,可通過下面的“從文本文件載入”按鈕來添加歌詞,免了複製粘貼的辛苦。其他的信息,像年代、圖片什麼的,可根據自己的喜好來決定是否添加。全部填好後,單擊右下角的“保存並下一個”按鈕進入下一個文件的編輯,直到編輯完所有的歌曲為止。小提示到哪裏去找歌詞?著名的百度搜索引擎提供有歌詞搜索功能,只要進入,輸入歌名,並選擇“歌詞”即可快速找到需要的歌詞。
ID3 ID3
(2)第二種情況:這種情況下工作量將會小得多,我們可以將文件名中有用信息提取出來反存到標籤中。按F4鍵切換到“從文件名獲取標籤”窗口,裏面有“文件名掩碼”設定。這裏要舉例説明一下:如果你的歌曲文件名的規則是“音軌.曲名.MP3”(像“03.白雲.MP3”這樣的,這裏的“03”是音軌號,“白雲”是歌曲名),可以從右邊列出的文件名變量中查出音軌對應的變量是“%6”,歌曲名對應的變量是“%2”,此時,文件名掩碼就應該是“%6.%2”。填好掩碼後點擊右邊的“測試”按鈕,看看獲得的標籤是不是正確的,確認無誤後點擊下方的“寫入標籤”按鈕完成標籤的添加。如果在整張專輯中,有一兩首歌曲已經填好標籤信息,我們還可以將這一兩首歌中含有的信息複製到其他歌曲中。方法是:先Ctrl A鍵選中所有的文件,然後再單擊一下含有標籤信息的歌曲使它加亮顯示,點擊“從加亮的文件複製”按鈕,這首歌曲的標籤含有的信息就複製到左面的信息欄了,然後將你想要複製到其他文件中的那一欄信息選中,再點擊“保存標籤”就可以了。二:
ID3 ID3
id3還是quake系列3d遊戲引擎的數據格式