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歌詞文件),時和分可以省略,秒可以用小數。 |
MP3標籤 ID3v1,ID3v2,APETAGEX
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.