1. 程式人生 > >MP3檔案結構(1)

MP3檔案結構(1)

概述:整個MP3檔案大體分為三部分:TAG_V2(ID3V2),音訊資料幀(Frame),TAG_V1(ID3V1);

結構 描述
ID3V2 包含了作者,作曲,專輯等資訊,長度不固定,擴充套件了ID3V1的資訊量。
Frame 一系列的幀,個數由檔案大小和幀長決定;每個FRAME的長度可能不固定,也可能固定,由位率bitrate決定;每個FRAME又分為幀頭和資料實體兩部分;幀頭記錄了mp3的位率,取樣率,版本等資訊,每個幀之間相互獨立。
ID3V1 包含了作者,作曲,專輯等資訊,長度為128BYTE。

1、ID3V2

ID3V2 到現在一共有4 個版本,但流行的播放軟體一般只支援第3 版, 既ID3v2.3。
ID3V2.3 的標籤有一個標籤頭和若干個標籤幀(含標籤幀頭10位元組)或一個擴充套件標籤頭組成。關於曲目的資訊如標題、作者等都存放在不同的標籤幀中,擴充套件標籤頭和標籤幀並不是必要的,但每個標籤至少要有一個標籤幀。標籤頭和標籤幀一起順序存放在MP3 檔案的首部。

標籤頭

在檔案的首部順序記錄10 個位元組的標籤頭。資料結構如下

標籤頭10位元組

char Header
[3]; /*必須為"ID3"否則認為標籤不存在*/ char Ver; /*版本號ID3V2.3 就記錄3*/ char Revision; /*副版本號此版本記錄為0*/ char Flag; /*存放標誌的位元組,這個版本只定義了三位,稍後詳細解說*/ char Size[4]; /*標籤幀大小=包括所有標籤幀頭(非標籤頭)的10 個位元組和所有的標籤幀內容的大小*/
標籤幀大小計算公式:total_size =(Size[0]&0x7F)*0x80*0x80*0x80 +(Size[1]&0x7F)*0x80*0x80 + (Size[2]&0x7F)*0x80 +(Size[3]&0x7F)

ID3V2部分的總大小=標籤幀大小+標籤頭大小10;

標籤幀

標籤幀資料的起始位置順序記錄了10個位元組的標籤幀頭,資料結構如下

標籤幀幀頭及資料

char ID[4]; /*用四個字元標識一個幀,說明其內容,稍後有常用的標識對照表*/
char Size[4]; /*幀內容的大小,不包括幀頭,不得小於1*/
char Flags[2]; /*存放標誌,只定義了6 位,稍後詳細解說*/
標籤幀內容大小計算公式:FSize = Size[0]*0x100000000 + Size[1]*0x10000+ Size[2]*0x100 + Size[3];