以一個wav文件爲實例分析wav文件格式

一:RIFF介紹

在Windows環境中,大多數的多媒體文件都是以一種通用的結構來存放的,這種結構成爲“資源互換文件格式”,簡稱RIFF。RIFF文件是按照little-endian 字節順序寫入的,即其編碼的順序是倒序(如:編碼類型標識存放爲0001,則其解碼時應解爲0100)。

RIFF可以看做是一種樹狀結構,其基本構成單位是塊(chunk),每個塊由塊標識,塊大小和塊內容三部分組成。RIFF文件通常是由若干塊組成,每個文件都是以“RIFF”爲標識符開始的,RIFFchunk是一個文件最大的chunk,其數據部分可再包含其他子塊(類似一臺硬盤的根目錄)。需要注意的是,一般的塊(chunk)要求不能包含其他塊,但標識符爲“RIFF”和“LIST”的塊除外。

二:wav文件格式介紹

wav文件,即數字化波形聲音文件,是一種遵循RIFF結構的音頻文件。它一般是通過PCM編碼的無損壓縮編碼文件,音頻質量高。

wav文件由文件頭和數據體兩大部分組成,文件頭包含了各數據塊的標識符,相應的塊大小及文件的編碼類型,聲道數,採樣頻率及採樣位數等參數的設置;數據體放的是經編碼後的音頻數據。PCM編碼的頭文件如下圖所示:


由該圖可知,wav文件是以“RIFF”標識符開始的,wav文件頭標識了文件類型。後面接的分別是wav的兩個基本塊:fmt塊和fact塊。

wav 可使用三個參數來表示聲音:採樣位數、採樣頻率和聲道數。

下面通過對一個wav文件的分析來分析wav文件的格式:

下圖中是包含了文件頭和數據塊的一個wav文件。(可能由於該音頻前部分都處於無音頻數據或者數據較小,所有有一大塊爲0)。

圖中紅色部分框出的是“RIFF”的文件頭,四個字節表示的是“RIFF”的ASCII碼值;

其後用黑色線框出的是該wav文件的大小(即從下個地址開始到文件尾的總字節數,按照低位在前高位在後排列,這裏我們可以知道該文件的大小爲0x00A76F62=12021602字節=);

其後黃色線框框出的爲“WAVE”文件頭,四個字節表示的是“WAVE”的ASCII碼值;

其後橙色線框框出的爲“FMT”辨別碼,標識fmt塊的開始,最後以字節爲空格;

其後橙色線框框出的爲“fmt”塊的大小(這裏我們可以計算出該塊大小爲0x00000012=18字節,需要注意這裏的大小不包括前面辨別碼和標識大小所佔的字節,所以可知一個塊的大小=數據大小+8字節;

其後藍色標出的兩字節表示文件的編碼類型(PCM編碼:0100 ,ADPCM:0200,可知這裏爲PCM編碼);

其後紫色標出的兩字節表示聲道數(單聲道0100雙聲道0200,這裏爲雙聲道);

其後黑色框出的四字節表示採樣頻率(這裏fs=0x0000BB80=52352Hz=52.352kHz);

其後粉色框出的四字節表示波形數據傳輸速率(每秒平均字節數=採樣頻率*音頻通道數*每次採樣得到的樣本位數/8);

        其後藍色框出的兩字節表示採樣大小(=通道數*每次採樣得到的樣本位數/8)

其後紅色框出的兩字節表示採樣位數(這裏表示16位);

其後黑色框出的兩字節爲系統預留(全部置零,僅8位採樣有);

其後藍色框出的四字節爲“DATA”塊標識(data的ASCII碼);

其後綠色框出的四字節爲數據區的大小(我們可以看出該數據區共有0xA76F3C=10972988字節);

其後的數據都屬於數據區數據。


以上就是對一個wav文件格式的分析。

三:wav文件的優缺點

優點:編碼簡單,無壓縮(PCM無壓縮編碼)

缺點:需要音頻存儲空間

四:問題解答

問題1:8bit和16bit樣值的二進制編碼表示一樣嗎?


答:不一樣。8bit用1字節編碼,00H和FFH分別表示最小和最大采樣聲音數據;而16bit用二字節編碼,按照little Indian編碼方式,低位在前一字節,高位在後一字節。


問題2:現有的WAV支持哪幾種音頻壓縮方法?


答:標準PCM、ADPCM等所有支持ACM規範的編碼方式








發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章