MP3標籤 ID3v1,ID3v2,APETAGEX

MP3文件的數據結構以及爲mp3內嵌歌詞的代碼

  MP3文件是由幀構成,幀是 MP3文件的最小組成單位。根據幀性質的不同,文件大體分爲四個部分:ID3v2標籤幀、數據幀、APEV2標籤幀、ID3v1標籤幀,而只有數據幀纔是必需的。
  數據幀包含了歌曲的壓縮數據。標籤幀提供了歌曲的演唱者、歌名、專輯、年份等信息。
  ID3v1 在文件結尾,以字符串“TAG”爲標識,其長度是固定的 128 個字節。
  ID3v2 在文件頭,以字符串“ID3”爲標識,長度不固定,擴展了 ID3V1 的信息量。
  APEV2 是最新出現的一種標籤,以字符串“APETAGEX”爲標識,長度不固定,位置也不固定,可能在文件末尾也可能在文件頭,比較常見的是位於文件尾部, 但在 ID3v1 之前。
  值得一提的是 Lyrics3v2,它是千千靜聽播放器發明的一種獨立幀,位於 ID3v1 之前,APEV2 之後(如果有 APEV2 的話),它專用於內嵌 Lrc 類型的歌詞文件。


一、ID3V1

表1:ID3V1結構
--------------------------------------------------------------------
名稱 字節   說明
--------------------------------------------------------------------
Tag   3   ID3V1標識符“TAG”的Ascii碼
Title  30  歌曲名
Artist  30  歌手名
Album  30  專輯名
Year   4   日期信息
Comment 28  註釋信息,有時爲30字節
Reserved 1   =0說明有音軌,下一字節就是音軌;≠0表示註釋是30個字節
Track  1   音軌(字節型數值),歌曲在專輯裏的序號 
Genre  1   歌曲風格(字節型數值)
--------------------------------------------------------------------
說明:
  ①如果MP3的註釋=30字節,那麼就要佔用 Reserved 和 Track 兩個字節,這要看 Reserved 是否=0,如果=0,那麼註釋有 28 個字節。如果不是,那麼註釋有 30 個字節。當註釋=30 個字節的時候,那就沒有 Track 了。
  ②如果 MP3 文件後面雖然有“TAG”三個字母,但字母后面全是0,那就不是一個合法的 ID3V1 信息,應該認爲沒有 ID3V1 信息。
  ③ID3V1 的各項信息都是順序存放,沒有任何標識將其分開,一般用 0補足規定的長度。比如歌曲名有 20 個字節,則在歌曲名後要補足 10 個 0,否則將造成信息錯誤。
  ④歌曲風格共 148 種,用編號表示,表2列出了前 30 種的風格與編號對照,詳情可上網查詢。

表2:30種歌曲風格與編號對照
---------------------------
編號 風格名稱  中譯義
---------------------------
00 Blues    布魯斯
01 ClassicRock 古典搖滾
02 Country   鄉村
03 Dance    舞曲
04 Disco    迪斯科
05 Funk     傷感爵士
06 Grunge    垃圾搖滾
07 Hip-Hop   饒舌
08 Jazz     爵士
09 Metal    金屬
0A NewAge    前衛
0B Oldies    懷舊
0C Other    其他
0D Pop     流行
0E R&B     搖滾布魯斯
0F Rap     說唱
10 Reggae    雷蓋扭擺舞
11 Rock     搖滾
12 Techno    電子流行樂
13 Industrial  工業
14 Alternative 多變
15 Ska     斯卡
16 DeathMetal  重金屬
17 Pranks    惡作劇
18 Soundtrack  電影配音
19 Euro-Techno 神遊舞曲
1A Ambient   流行
1B Trip-Hop   迷幻舞曲
1C Vocal    非純音樂
1D Jazz+Funk  爵士搖滾
1E Fusion    合成音樂
---------------------------


二、ID3V2
  ID3V2 與 ID3V1 的作用差不多,也是記錄 mp3 的有關信息,但 ID3V2 的結構比 ID3V1 要複雜得多,而且可以伸縮和擴展。ID3V2 到現在一共有 4 個版本,但流行的播放軟件一般只支持第 3 版,既ID3V2.3。由於ID3V1記錄在 MP3 文件的末尾,ID3V2 就只好記錄在 MP3 文件的首部了。
  每個 ID3V2.3 的標籤都一個標籤頭和若干個標籤幀或一個擴展標籤頭組成。歌曲的信息如標題、作者等都存放在不同的標籤幀中,擴展標籤頭和標籤幀並不是必要的,但每個標籤至少要有一個標籤幀。對於 VB 愛好者來說,你可以把 ID3V2 看作是一個對象,而把標籤幀看作是 ID3V2 的一個屬性,那麼,標籤幀的標識符就可以看作是屬性名了。

1.D3V2標籤頭
  一首MP3如果有ID3V2.3的話,那麼ID3V2.3的標籤頭佔用文件最前面的10個字節,其數據結構如下:

表3:ID3V2.3標籤頭結構
--------------------------------------------------------------------
名稱  字節  說明
--------------------------------------------------------------------
Header  3    ID3V2.3標識符"ID3"的Ascii碼,否則認爲沒有ID3V2.3
Ver    1  版本號,=03
Revision 1  副版本號,=00
flag   1  標誌字節,一般沒意義,=00
Size   4  標籤內容長度,高位在前,不包括標籤頭的10個字節
---------------------------------------------------------------------
說明:
  ①Size 字段的計算公式如下(從左至右):
size =字節1的值×&H200000+字節2的值×&H4000+字節3的值×&H80+字節4的值
  ②如果所有標籤幀的總長度<標籤內容長度,則須用0填滿。

2.D3V2標籤幀 
  標籤內容由若干個標籤幀組成。每個標籤幀都由一個10個字節的幀頭和至少 1個字節的不固定長度的幀內容組成,它們順序存放在文件中。
  每個幀都由幀頭和幀內容組成,數據結構如下:

表4:標籤幀的結構
----------------------------------------------------------
名稱  字節  說明
----------------------------------------------------------
FrameID 4    幀標識符的Ascii碼,常用標識符的意義見表5
Size   4    幀內容及編碼方式的合計長度,高位在前
Flags  2    標誌,只使用了6位,詳見表6,一般均=0
encode  4    幀內容所用的編碼方式。許多幀沒有此項
幀內容      至少 1 個字節
----------------------------------------------------------
說明:
  ①Size的計算同上。
  ②標籤幀之間沒有特殊的分隔符,要得到一個完整的標籤幀內容必須先從幀頭中得到幀內容長度。
    ③encode 有 4 個可能值:
       0:表示幀內容字符用 ISO-8859-1 編碼;
       1:表示幀內容字符用 UTF-16LE 編碼;
       2:表示幀內容字符用 UTF-16BE 編碼;
       3:表示幀內容字符用 UTF-8 編碼(僅ID3V2.4才支持)
  但經常看到的是"eng"這樣的字符形式,它表示幀內容所使用的自然語言爲英語。也許 D3V2 標籤幀進化到現在,encode 已經用“自然語言”取代了“編碼方式”。
  ⑤幀內容均爲字符串,常以 00 開頭。

表5:標籤幀標識符的意義
---------------------------------------
名稱  意義
---------------------------------------
AENC: 音頻加密技術
APIC: 附加描述
COMM: 註釋,相當於ID3v1的Comment
COMR: 廣告
ENCR: 加密方法註冊
ETC0: 事件時間編碼
GEOB: 常規壓縮對象
GRID: 組識別註冊
IPLS: 複雜類別列表
MCDI: 音樂CD標識符
MLLT: MPEG位置查找表格
OWNE: 所有權
PRIV: 私有
PCNT: 播放計數
POPM: 普通儀表
POSS: 位置同步
RBUF: 推薦緩衝區大小
RVAD: 音量調節器
RVRB: 混響
SYLT: 同步歌詞或文本
SYTC: 同步節拍編碼
TALB: 專輯,相當於ID3v1的Album
TBPM: 每分鐘節拍數 
TCOM: 作曲家 
TCON: 流派(風格),見表2
TCOP: 版權
TDAT: 日期
TDLY: 播放列表返錄 
TENC: 編碼 
TEXT: 歌詞作者 
TFLT: 文件類型 
TIME: 時間
TIT1: 內容組描述 
TIT2: 標題,相當於ID3v1的Title 
TIT3: 副標題
TKEY: 最初關鍵字 
TLAN: 語言 
TLEN: 長度 
TMED: 媒體類型 
TOAL: 原唱片集 
TOFN: 原文件名 
TOLY: 原歌詞作者
TOPE: 原藝術家
TORY: 最初發行年份 
TOWM: 文件所有者(許可證者) 
TPE1: 藝術家相當於ID3v1的Artist 
TPE2: 樂隊
TPE3: 指揮者
TPE4: 翻譯(記錄員、修改員) 
TPOS: 作品集部分 
TPUB: 發行人 
TRCK: 音軌(曲號),相當於ID3v1的Track
TRDA: 錄製日期 
TRSN: Intenet電臺名稱 
TRSO: Intenet電臺所有者 
TSIZ: 大小  
TSRC: ISRC(國際的標準記錄代碼) 
TSSE: 編碼使用的軟件(硬件設置) 
TYER: 年代,相當於ID3v1的Year
TXXX: 年度
UFID: 唯一的文件標識符
USER: 使用條款
USLT: 歌詞 
WCOM: 廣告信息
WCOP: 版權信息
WOAF: 官方音頻文件網頁
WOAR: 官方藝術家網頁
WOAS: 官方音頻原始資料網頁
WORS: 官方互聯網無線配置首頁
WPAY: 付款
WPUB: 出版商官方網頁
WXXX: 用戶定義的URL鏈接 
---------------------------------------
說明:
  ①幀內容是數字的,都用 Ascii 字符表示。
  ②有的 TCON(風格、流派)的幀內容是直接用字符串表示的,如“genre”,而有的則是用編號表示的,如“28 31 32 29”就是用字符串“(12)”表示 12 號風格,我們在解析的時候要注意。
  ③TRCK(音軌)的幀內容格式是:N/M。其中,分母表示專輯中共有 M 首歌曲,分子表示專輯中的第 N 首曲。

表6:標籤幀中Flags標誌的意義
----------------------------------------------------
位址 意義
----------------------------------------------------
0  標籤保護標誌,如設置表示此幀作廢
1  文件保護標誌,如設置表示此幀作廢
2  只讀標誌,如設置表示此幀不能修改
3  壓縮標誌,如設置表示1個字節存放2個BCD碼錶示數字
4  加密標誌
5  組標誌,如設置表示此幀和其它的某幀是一組
----------------------------------------------------


三、APEV2
  APEV2 的特點是:字符串用 UTF-8 編碼;允許給幀標識自由命名。

表7:APEv2標籤結構
-------------
名稱   字節
-------------
標籤頭  32
標籤幀1  
標籤幀2  
...    
標籤尾  32  
-------------
說明:個別 APEV2 沒有標籤尾。

表8:APEV2標籤頭結構
------------------------------------------------------
名稱   字節  說明
------------------------------------------------------
headerID 8   “APETAGEX”的Ascii碼
version  4   APEV版本,現在常用APEV2(D0 07 00 00)
Size   4   所有標籤幀和標籤尾的總長度,低位在前
Count   4   標籤幀個數,低位在前
flags   4   填充標記(00 00 00 A0)
reserved 8   保留,全爲0
------------------------------------------------------

表9:APEV2標籤尾結構
---------------------------------------------------------
名稱   字節  說明
---------------------------------------------------------
headerID 8   “APETAGEX”的Ascii碼
version  4   APEV版本,現在常用APEV2(D0 07 00 00)
Size   4   標籤幀總長度(包括標籤尾本身),低位在前
Count   4   標籤幀個數,低位在前
flags   4   填充標記(00 00 00 80)
reserved 8   保留,全爲0
---------------------------------------------------------

表10:APEV2標籤幀結構
-------------------------------------------
名稱   字節  說明
-------------------------------------------
Size   4    幀內容長度,低位在前
flags   4    填充標記
ID         幀標識,長度不固定
Pre    1    幀標識的結束字符,恆爲0
Value       幀內容,長度由Size確定
-------------------------------------------
說明:APEV2 中,幀內容均爲字符串,且均使用 UTF-8 編碼。

表11:常用幀標識的意義
-----------------------------
名稱     意義
-----------------------------
Album      專輯名
Artist      歌手名
Comment     註釋
Composer     作曲家
Copyright    版權
Encoder     編碼類型
Genre      風格
Lyric      歌詞
Orchestra    樂隊
Title      歌曲名
Track      音軌號
WM/AuthorWebpaga 作者網頁
WM/BPM
WM/CodedBy    編碼依據
WM/EncodedBy   英文編碼依據
WM/FileWebpage  文件網頁
WM/GenreID    風格編號
WM/OrigArtist  原創藝術家
WM/PromotionURL 推銷URL
WM/URL
WM/Writer    作者
WMFSDKVersion  發行版本
WMFSDKNeeded   發行必需
Year       發行日期
-----------------------------
說明:Lyric 幀可以儲存帶時間參數的歌詞,格式爲:“[時:分:秒] 歌詞 換行符”(類似於 Lrc歌詞文件),時和分可以省略,秒可以用小數。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章