1. 程式人生 > >Mp3原理及檔案格式解析

Mp3原理及檔案格式解析

1.引言 文 件壓縮技術的日新月異使得MP3成為時下最燙手的音樂格式,優質的音樂隨著0與1的排列迅速散佈到世界各地,撼動人心。何謂MP3?MP3的全稱是 MPEG Audio Layer 3,它是一種高效的計算機音訊編碼方案,它以較大的壓縮比將音訊檔案轉換成較小的副檔名為.MP3的檔案,基本保持原檔案的音質。MP3是 ISO/MPEG標準的一部分,ISO/MPEG標準描述了使用高效能感知編碼方案的音訊壓縮,此標準一直在不斷更新以滿足“質高量小”的追求,現已形成 MPEG Layer 1、Layer 2、Layer 3三個音訊編碼解碼方案。MPEG Layer 3壓縮率可達1:10至1:12,1M的MP3檔案可播放1分鐘,而1分鐘CD音質的WAV檔案(44100Hz,16bit,雙聲道,60秒)要佔用 10M空間,這樣算來,一張650M的MP3光碟播放時間應在10小時以上,而同樣容量的一張CD盤播放時間在70分鐘左右。MP3的優勢是CD難以比擬 的。 2 MP3原理淺析 2.1 MPEG Audio標準 MPEG(Moving Picture Experts Group)是ISO下的一個動態圖象專家組,它制定的MPEG標準廣泛應用於各種多媒體中。MPEG標準包括視訊和音訊標準,其中音訊標準已制定出 MPEG-1、MPEG-2、MPEG-2 AAC和MPEG-4。 MPEG-1和MPEG-2標準使用同一個音訊編碼解碼族—Layer1、 2、3。MPEG-2一個新特點是採用低取樣率擴充套件降低資料流量,另一特點是多通道擴充套件,將主聲道增加為5個。MPEG-2 AAC(MPEG-2 Advanced Audio Coding)標準是Fraunhofer IIS同AT&T公司於1997年推出的,旨在顯著減少資料流量,MPEG-2 AAC採用的MDCT(Modified Discrete Cosine Transform)演算法,取樣率可在8KHz到96KHz之間,聲道數可在1-48之間。 MPEG Audio Layer 1、2、3三個層使用相同的濾波器組、位流結構和頭資訊,取樣頻率為32KHz、44.1KHz或48KHz。Layer 1是為數字壓縮磁帶DCC(Digital Compact Cassette)設計的,資料流量為384kbps,Layer 2在複雜性和效能間作了權衡,資料流量下降到256kbps-192kbps。Layer 3一開始就為低資料流量而設計,資料流量在128kbps-112kbps,Layer 3增加了MDCT變換,使其頻率分辨能力是Layer 2的18倍,Layer 3還使用了與MPEG Video類似的平均資訊量編碼(Entropy Coding),減少了冗餘資訊。MP3絕大部分使用的是MPEG-1標準。 2.2 音訊壓縮的目的 MP3格式始於80年代中期,德國 Erlangen的Fraunhofer研究所致力於高質量、低資料率的聲音編碼。讓我們來看一個例子:你想對你喜歡的一首長約4分鐘的歌曲取樣,將其存 儲在磁碟上,以CD音質的WAV格式抽樣,抽樣率為44.1kHz,即每秒鐘接收44100個值,立體聲,每次抽樣資料為16位(2位元組),則這首歌佔的 空間為: 44100x2聲道x2位元組x60秒x4分鐘=40.4MB 如果從Internet上下載這首歌,假設傳輸率為56kbps,則下載時間為: 40.4x106x8/56x103x60=96分鐘 即使是1M的寬頻網也需5分鐘以上,由此可見,音訊壓縮對減少音訊資料的儲存空間顯得尤為重要。 2.3 MP3編碼與解碼 MP3音訊壓縮包含編碼和解碼兩個部分。編碼是將WAV檔案中的資料轉換成高壓縮率的位流形式,解碼是接受位流並將其重建到WAV檔案中。 MP3 採用了感知音訊編碼(Perceptual Audio Coding)這一失真演算法。人耳感受聲音的頻率範圍是20Hz-20kHz,MP3截掉了大量的冗餘訊號和無關的訊號,編碼器通過混合濾波器組將原始聲 音變換到頻率域,利用心理聲學模型,估算剛好能被察覺到的噪聲水平,再經過量化,轉換成Huffman編碼,形成MP3位流。解碼器要簡單得多,它的任務 是從編碼後的譜線成分中,經過反量化和逆變換,提取出聲音訊號。MP3編碼和解碼流程如圖1所示。 2.4 修正的離散餘弦變換 修正的離散餘弦變換(MDCT)是指將一組時域資料轉換成頻域資料,以得知時域變化情況。MDCT是對DCT演算法的改進,。早期的快速演算法是快速付立葉變換(FFT),但FFT有複數運算,MDCT都是實數運算,便於程式設計。 在 壓縮音訊資料時,先將原始聲音資料分成固定的分塊,然後做順向MDCT(Forward MDCT)將每塊的值轉換為512個MDCT係數,解壓時,經反向MDCT(Inverse MDCT)將512個係數還原成原始聲音資料,前後的原始聲音資料是不一致的,因為在壓縮過程中,去掉了冗餘和不相關資料。FMDCT變換公式為: k=0,1,…,N/2-1 式中N是轉換視窗長度,即每塊樣本點數,N=8,16,…,1024,2048。 n0=(N/2+1)/2,X(n)為時域值,X(k)為頻域值。若N取1024點,則轉換成512個頻域值。 IMDCT變換公式為:

n=0,1,…,N-1 MDCT本身並不進行資料壓縮,它只是把訊號對映到另一個域,量化才使資料得到壓縮。在對量化後的變換樣值進行位元分配時要考慮使整個量化塊最小,這就成為有失真壓縮了。 3 MP3檔案格式分析 MP3檔案資料由多個幀組成,幀是MP3檔案最小組成單位。每個幀又由幀頭、附加資訊和聲音資料組成。每個幀播放時間是0.026秒,其長度隨位率的不同而不等。有些MP3檔案末尾有些額外位元組存放非聲音資料的說明資訊。MP3檔案結構如圖2所。3.1 幀頭格式 幀頭長4位元組,對於固定位率的MP3檔案,所有幀的幀頭格式一樣其資料結構如下: typedef FrameHeader{ unsigned int sync:11;//同步資訊 unsigned int version:2;//版本 unsigned int layer:2;//層 unsigned int protection:1;// CRC校驗 unsigned int bitrate:4;//位率 unsigned int frequency:2;//頻率 unsigned int padding:1;//幀長調節 unsigned int private:1;//保留字 unsigned int mode:2;//聲道模式 unsigned int mode extension:2;//擴充模式 unsigned int copyright:1;// 版權 unsigned int original:1;//原版標誌 unsigned int emphasis:2;//強調模式 }HEADER, *LPHEADER; 幀頭4位元組使用說明見表1。 表1 MP3幀頭位元組使用說明 名稱 長度(位) 說 明 同步 資訊 11 第1、2位元組 所有位均為1,第1位元組恆為FF。 版本 2 00-MPEG 2.5 01-未定義 10-MPEG 2 11-MPEG 1 層 2 00-未定義 01-Layer 3 10-Layer 2 11-Layer 1 CRC 校驗 1 0-校驗 1-不校驗 位率 4 第3位元組 取樣率,單位是kbps,例如採用MPEG-1 Layer 3,64kbps是,值為0101。 頻率 2 取樣頻率,對於MPEG-1: 00-44.1kHz 01-48kHz 10-32kHz 11-未定義 幀長 調節 1 用來調整檔案頭長度,0-無需調整,1-調整,具體調整計算方法見下文。 保留字 1 沒有使用。 聲道 模式 2 第4位元組 表示聲道, 00-立體聲 01-Joint Stereo 10-雙聲道 11-單聲道 擴充 模式 2 當聲道模式為01是才使用。 版權 1 檔案是否合法,0-不合法 1-合法 原版 標誌 1 是否原版, 0-非原版 1-原版 強調 方式 2 用於聲音經降噪壓縮後再補償的分類,很少用到,今後也可能不會用。 00-未定義 01-50/15ms 10-保留 11-CCITT J.17 MP3幀長取決於位率和頻率,計算公式為: 幀長= 144×bitrate∕frequency+padding 例如:位率為64kbps,頻率為44.1kHz,padding為1時,幀長為210位元組。幀頭後面是可變長度的附加資訊,對於標準的MP3檔案來說,其長度是32位元組,緊接其後的是壓縮的聲音資料,當解碼器讀到此處時就進行解碼了。 對 於固定位率(CBR,Constant Bitrate)的MP3檔案,並不是所有的幀都是等長的,有的幀可能多一個或幾個位元組。還有一種可變位率(VBR, Variable Bitrate)的MP3檔案,是為了使MP3檔案長度最小同時又保證聲音質量,與CBR檔案相比,除了第一幀不同外,其餘的都一樣。VBR的第一幀不包 含聲音資料,其長度是156個位元組,用來存放標準的聲音幀頭(4位元組)、VBR檔案標識、幀數、檔案位元組數等資訊,具體結構說明見表2。 表2 VBR檔案第一幀結構 字 節 說 明 1-4 與CBR相同的標準聲音幀頭 5-40 存放VBR檔案標識“Xing”(58 69 6E 67),此標識具體位置視採用的MPEG標準和聲道模式而定。標識的前後位元組沒有使用。 36-39 MPEG-1和非單聲道(常見) 21-24 MPEG-1和單聲道 21-24 MPEG-2和非單聲道 13-16 MPEG-2和單聲道 41-44 標誌,說明是否儲存了幀數、檔案長度、目錄表和VBR規模資訊,如果儲存了,則01 02 04 08。 45-48 幀數(包括第一幀) 49-52 檔案長度 53-152 目錄表,用來按時間進行位元組定位。 153-156 VBR規模,用於位率變動3.2 ID3標準 MP3 幀頭中除了儲存一些象private、copyright、original的簡單音樂說明資訊以外,沒有考慮存放歌名、作者、專輯名、年份等複雜資訊, 而這些資訊在MP3應用中非常必要。1996年,FricKemp在“Studio 3”專案中提出了在MP3檔案尾增加一塊用於存放歌曲的說明資訊,形成了ID3標準,至今已制定出ID3 V1.0,V1.1,V2.0,V2.3和V2.4標準。版本越高,記錄的相關資訊就越豐富詳盡。 ID3 V1.0標準並不周全,存放的資訊少,無法存放歌詞,無法錄入專輯封面、圖片等。V2.0是一個相當完備的標準,但給編寫軟體帶來困難,雖然贊成此格式的 人很多,在軟體中真正實現的卻極少。絕大多數MP3仍使用ID3 V1.0標準。此標準是將MP3檔案尾的最後128個位元組用來存放ID3資訊,這128個位元組使用說明見表3。 表3 ID3 V1.0檔案尾說明 位元組 長度 (位元組) 說 明 1-3 3 存放“TAG”字元,表示ID3 V1.0標準,緊接其後的是歌曲資訊。 4-33 30 歌名 34-63 30 作者 64-93 30 專輯名 94-97 4 年份 98-127 30 附註 128 1 MP3音樂類別,共147種。

3.3 檔案例項 在VC++中開啟一個名為test.mp3檔案,其內容如下: 000000 FF FB 52 8C 00 00 01 49 09 C5 05 24 60 00 2A C1 000010 19 40 A6 00 00 05 96 41 34 18 20 80 08 26 48 29 000020 83 04 00 01 61 41 40 50 10 04 00 C1 21 41 50 64 …… 0000D0 FE FF FB 52 8C 11 80 01 EE 90 65 6E 08 20 02 30 0000E0 32 0C CD C0 04 00 46 16 41 89 B8 01 00 08 36 48 0000F0 33 B7 00 00 01 02 FF FF FF F4 E1 2F FF FF FF FF …… 0001A0 DF FF FF FB 52 8C 12 00 01 FE 90 58 6E 09 A0 02 0001B0 33 B0 CA 85 E1 50 01 45 F6 19 61 BC 26 80 28 7C 0001C0 05 AC B4 20 28 94 FF FF FF FF FF FF FF FF FF FF …… 001390 7F FF FF FF FD 4E 00 54 41 47 54 45 53 54 00 00 0013A0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …… 0013F0 00 00 00 00 04 19 14 03 00 00 00 00 00 00 00 00 001400 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 001410 00 00 00 00 00 00 4E 該檔案長度1416H(5.142K),幀頭為:FF FB 52 8C,轉換成二進位制為: 11111111 11111011 01010010 10001100 對照表1可知,test.mp3幀頭資訊見表4。 表4 test.mp3檔案幀頭資訊 名稱 位值 說 明 同步資訊 11111111111 第1位元組恆為FF,11位均為1。 版本 11 MPEG 1 層 01 Layer 3 CRC校驗 1 不校驗 位率 0101 64kbps 頻率 00 44.1kHz 幀長調節 1 調整,幀長是210位元組。 保留字 0 沒有使用。 聲道模式 10 雙聲道 擴充模式 00 未使用。 版權 1 合法 原版標誌 1 原版 強調方式 00 未定義第1397H開始的三個位元組是54 41 47,存放的是字元“TAG”,表示此檔案有ID3 V1.0資訊。 139AH開始的30個位元組存放歌名,前4個非00位元組是54 45 53 54,表示“TEST”; 13F4H開始的4個位元組是04 19 14 03,存放年份“04/25/2003”; 最後1個位元組是4E,表示音樂類別,代號為78,即“Rock&Roll”; 其它位元組均為00,未儲存資訊。 4 結束語 聲 音作為一類重要的多媒體資料,人們總是在不斷尋求更高效率的壓縮方法和新的聲音檔案格式。MP3檔案中使用了MDCT變換,它是一種結構簡單、易於程式設計的 準最佳變換,,避免了最佳變換(K-L)難以求解協方差矩陣特徵值及特徵向量的困擾。通過對MP3檔案格式的分析,不難發現它的欠缺。MP3檔案每個幀都 有4位元組的相同幀頭,對於一個含有大量幀的MP3檔案來說,需要一定的空間開銷。ID3存放音樂說明資訊,幀頭中的private、copyright等 資訊也是說明資訊,音樂的說明資訊有些零亂的感覺。 無論如何,MP3的發展勢不可擋,MP3已成為公認的聲音資料格式,MP3正與JPEG影象、PDF文件成為多媒體資訊處理領域的熱點。