wav文件格式分析與詳解

WAV文件是在PC機平臺上很常見的、最經典的多媒體音頻文件,最先於1991年8月出如今Windows 3.1操做系統上,文件擴展名爲WAV,是WaveFom的簡寫,也稱爲波形文件,可直接存儲聲音波形,還原的波形曲線十分逼真。WAV文件格式簡稱WAV格式是一種存儲聲音波形的數字音頻格式,是由微軟公司和IBM聯合設計的,通過了屢次修訂,可用於Windows,Macintosh,Linix等多種操做系統,詳述以下。html

 

波形文件的基礎知識

2.1 波形文件的存儲過程


聲源發出的聲波經過話筒被轉換成連續變化的電信號,通過放大、抗混疊濾波後,按固定的頻率進行採樣,每一個樣本是在一個採樣週期內檢測到的電信號幅度值;接下來將其由模擬電信號量化爲由二進制數表示的積分值;最後編碼並存儲爲音頻流數據。有的應用爲了節省存儲空間,存儲前,還要對採樣數據先進行壓縮。算法


2.2 WAV文件的編碼


編碼包括了兩方面內容,一是按必定格式存儲數據,二是採用必定的算法壓縮數據。WAV格式對音頻流的編碼沒有硬性規定,支持非壓縮的PCM(Puls Code Modulation)脈衝編碼調製格式,還支持壓縮型的微軟自適應分脈衝編碼調製Microsoft ADPCM(Adaptive Differential Puls Code Modulation)、國際電報聯盟(International Telegraph Union)制定的語音壓縮標準ITUG.711 a-law、ITU G.711-law、IMA ADPCM、ITU G.723 ADPCM (Yamaha)、GSM 6.十、ITU G.721 ADPCM編碼和其它壓縮算法。MP3編碼一樣也能夠運用在WAV中,只要安裝相應的Decode,就能夠播放WAV中的MP3音樂。數據結構

 

表 1編碼

塊標識(4Bytes)
塊長度(4Bytes)
數據

 

表 2 WAVE 文件結構spa

RIFF 塊
文件格式類型「WAVE」
fmt 塊
fact 塊(壓縮編碼格式要含有該塊)
data 塊

 

表 3 WAVE 文件頭格式操作系統

偏移
地址.net

字節數

數據
類型設計

字段名稱 字段說明
00H 4 字符 文檔標識 大寫字符串"RIFF",標明該文件爲有效的 RIFF 格式文檔。
04H 4 長整型數 文件數據長度 從下一個字段首地址開始到文件末尾的總字節數。該字段的數值加 8 爲當前文件的實際長度。
08H 4 字符 文件格式類型 全部 WAV 格式的文件此處爲字符串"WAVE",標明該文件是 WAV 格式文件。
0CH 4 字符 格式塊標識 小寫字符串,"fmt "。
10H 4 長整型數 格式塊長度。 其數值不肯定,取決於編碼格式。能夠是 1六、 18 、20、40 等。(見表 2)
14H 2 整型數 編碼格式代碼。 常見的 WAV 文件使用 PCM 脈衝編碼調製格式,該數值一般爲 1。(見表 3)
16H 2 整型數 聲道個數 單聲道爲 1,立體聲或雙聲道爲 2
18H 4 長整型數 採樣頻率 每一個聲道單位時間採樣次數。經常使用的採樣頻率有 11025, 22050 和 44100 kHz。
1CH 4 長整型數 數據傳輸速率, 該數值爲:聲道數×採樣頻率×每樣本的數據位數/8。播放軟件利用此值能夠估計緩衝區的大小。
20H 2 整型數 數據塊對齊單位 採樣幀大小。該數值爲:聲道數×位數/8。播放軟件須要一次處理多個該值大小的字節數據,用該數值調整緩衝區。
22H 2 整型數 採樣位數 存儲每一個採樣值所用的二進制數位數。常見的位數有 四、八、十二、1六、2四、32
24H       對基本格式塊的擴充部分(詳見擴展格式塊,格式塊的擴充)

 

表 4 常見的壓縮編碼格式code

格式代碼 格式名稱 fmt 塊長度 fact 塊
1(0x0001) PCM/非壓縮格式 16  
2(0x0002 Microsoft ADPCM 18
3(0x0003) IEEE float 18
6(0x0006) ITU G.711 a-law 18
7(0x0007) ITU G.711 μ-law 18
49(0x0031) GSM 6.10 20
64(0x0040) ITU G.721 ADPCM  
65,534(0xFFFE) 見子格式塊中的編碼格式 40  

 

表5orm

偏移 長度 數據類型 字段名稱 字段說明
24H 2 整型數 擴展區長度 22
26H 2 整型數 有效採樣位數 最大值爲每一個採樣字節數*8
28H 4 長整形數 揚聲器位置 聲道號與揚聲器位置映射的二進制掩碼
32H 2 整型數 編碼格式 真正的編碼格式代碼
34H 14     \x00\x00\x00\x00\x10\x00\x80\x00\x00\xAA\x00\x38\x9B\x71

 

表 6 fact 塊結構示意圖

字段 長度 內容
塊標識 4 "fact"
塊長度 4 4(最小數值爲 4 個字節)
採樣總數 4 採樣總數 (每一個聲道)

 

表7

8位PCM

  樣本 1   樣本 2  
8 位單聲道 0 聲道   0 聲道  
8 位立體聲 0 聲道(左) 1 聲道(右) 0 聲道(左) 1 聲道(右)

表8

16位單聲道PCM,每一個採樣點佔2個字節

  樣本 1   樣本 2  

16 位單
聲道

0 聲道
低字節

0 聲道
高字節

0 聲道
低字節

0 聲道
高字節

 

表9

16位立聲道PCM,每一個採樣點佔4個字節

樣本 1      

0-左聲
道低字節

0-左聲
道高字節

1-右聲
道低字節

1-右聲
道高字節

 

2.3 PCM編碼格式


PCM編碼是直接存儲聲波採樣被量化後所產生的非壓縮數據,故被視爲單純的無損耗編碼格式,其優勢是可得到高質量的音頻信號。
基於PCM編碼的WAV格式是最基本的WAV格式,被聲卡直接支持,能直接存儲採樣的聲音數據,所存儲的數據能直接經過聲卡播放,還原的波形曲線與原始聲音波形十分接近,播放的聲音質量是一流的,在Windows平臺下被支持得最好,經常被用做在其它編碼的文件之間轉換的中間文件。PCM的缺點是文件體積過大,不適合長時間記錄。正由於如此,又出現了多種在PCM編碼的基礎上經改進發展起來的編碼格式,如:DPCM,ADPCM編碼等。


2.4 與聲音有關的三個參數


(1)採樣頻率:又稱取樣頻率。是單位時間內的採樣次數,決定了數字化音頻的質量。採樣頻率越高,數字化音頻的質量越好,還原的波形越完整,播放的聲音越真實,固然所佔的資源也越多。根據奎特採樣定理,要從採樣中徹底恢復原始信號的波形,採樣頻率要高於聲音中最高頻率的兩倍。人耳可聽到的聲音的頻率範圍是在16Hz-20kHz之間。所以,要將聽到的原聲音真實地還原出來,採樣頻率必須大於4 0k H z 。經常使用的採樣頻率有8 k H z 、1 1 . 02 5 k H z 、22.05kHz、44.1kHz、48kHz等幾種。22.05KHz至關於普通FM廣播的音質,44.1KHz理論上可達到CD的音質。對於高於48KHz的採樣頻率人耳很難分辨,沒有實際意義。
(2)採樣位數:也叫量化位數(單位:比特),是存儲每一個採樣值所用的二進制位數。採樣值反應了聲音的波動狀態。採樣位數決定了量化精度。採樣位數越長,量化的精度就越高,還原的波形曲線越真實,產生的量化噪聲越小,回放的效果就越逼真。經常使用的量化位數有四、八、十二、1六、24。量化位數與聲卡的位數和編碼有關。若是採用PCM編碼同時使用8 位聲卡, 可將音頻信號幅度從上限到下限化分紅256個音量等級,取值範圍爲0-255;使用16位聲卡,可將音頻信號幅度劃分紅了64K個音量等級,取值範圍爲-32768至32767。
(3)聲道數:是使用的聲音通道的個數,也是採樣時所產生的聲音波形的個數。播放聲音時,單聲道的WAV通常使用一個喇叭發聲,立體聲的WAV可使兩個喇叭發聲。記錄聲音時,單聲道,每次產生一個波形的數據,雙聲道,每次產生兩個波形的數據,所佔的存儲空間增長一倍。

3 WAV文件結構


在Windows環境下,大部分多媒體文件都是按照資源互換文
件格式(Resources lnterchange File Format) 存放信息,簡稱RIFF格式。構成RIFF文件的基本單位稱之爲塊(chunk)。每一個RIFF文檔是由若干個塊構成。每一個塊(chunk)由塊標識、塊長度及數據等三部分所組成,其結構如表1。

其中,塊標識保存的是由4個ASCII碼字符組成的塊名字。如不滿4個字符則在右邊以空格充填。塊長度字段,佔4個字節,保存的是當前塊數據的長度,不包括塊標識和塊長度字段。因此一個塊的實際長度爲塊長度字段內的數值加8。RIFF格式規定,只有 RIFF及LIST塊能夠含有子塊,其它的塊不容許包含子塊。一個RIFF格式文檔自己就是一個塊。其前4個字節爲文檔標識「RIFF」,同時也是RIFF的塊標識,標明該文檔是一個有效的RIFF文檔;第二部分爲文件的數據長度,佔4個字節,其數值爲文件長度-8;第三部分爲RIFF塊數據,其中,前4個字節爲文件格式類型標識,如:「WAVE」,「AVI」等,後面其它部分爲RIFF塊的子塊。

WAV文件採用的是RIFF格式結構。至少是由3個塊構成,分別是RIFF、fmt 和Data。全部基於壓縮編碼的WAV文件必須含有fact塊。此外全部其它塊都是可選的。塊fmt,Data及fact均爲RIFF塊的子塊。WAV文件的文件格式類型標識符爲「WAVE」。基本結構如表2。

4WAV文件頭格式


WAV文件由文件頭和數據體兩部分組成。其中,文件頭是由文件標識字段與格式塊兩部分組成,後者保存的是編碼參數和聲音參數,格式如表3。


4.1 擴展格式塊


當WAV文件採用非PCM編碼時,使用的是擴展格式塊,它是在基本格式塊fmt以後擴充了一個的數據結構。該結構的前兩字節爲長度字段,指出後面區域的長度。緊接其後的區域稱之爲擴展區,含有擴充的格式信息,其長度取決於壓縮編碼類型。當某種編碼格式(如ITU G.711 a-law)使擴展區的長度爲0時,長度字段還必須保留,只是長度字段的數值爲0。所以,擴展格式塊長度的最小值爲基本格式塊的長度16加2。


4.2 格式塊的擴充


當編碼格式代碼爲0xFFFE時,爲擴充標識碼。此時格式塊擴展區長度爲24字節,包含了新增的格式字段和真正的編碼格式代嗎,格式如表5。


4.3 fact塊


採用壓縮編碼(修訂版Rev.3之後出現的編碼格式)的WAV文件必須有含有fact塊。塊標識符爲「fact」。塊長度至少4個字節。目前fact塊只有一個數據項,爲每一個聲道採樣總數,或採樣幀總數。該數值可由data塊中的數據長度除以數據塊對齊單位的數值計算出。雖然基於壓縮編碼的文件含有fact塊,然而,實測中發現,將文件轉換成PCM編碼格式後,原fact塊仍然存在(如表6)。


5 WAV文件語音數據的組織結構


WAV文件的聲音數據保存在數據塊中。塊標識符爲「data」,塊長度值爲聲音數據的長度。從數據塊的第9個字符開始是聲音波形採樣數據。每一個樣本按採樣的時間前後順序寫入。樣本的字節數取決於採樣位數。對於多字節樣本,低位字節數據放在低地址單元,相鄰的高位字節數據放在高地址單元。多聲道樣本數據採用交替方式存儲。例如:立體聲(雙聲道)採樣值的存儲順序爲:通道1第1採樣值,通道2第1採樣值;通道1第2採
樣值,通道2第2採樣值;以此類推。基於PCM編碼的樣本數據排列方式如表7-9。

6 實例分析

 

1)「52 49 46 46」這個是Ascii字符「RIFF」,這部分是固定格式,代表這是一個WAVE文件頭。
2)「22 60 28 00」,這個是我這個WAV文件的數據大小,這個大小包括除了前面4個字節的全部字節,也就等於文件總字節數減去816進制的「22 60 28 00」對應是十進制的「2646050」
3)「57 41 56 45 66 6D 74 20」,也是Ascii字符「WAVEfmt」,這部分是固定格式。
之後是PCMWAVEFORMAT部分

4)「12 00 00 00」,這是一個DWORD,對應數字18,這個對應定義中的PCMWAVEFORMAT部分的大小,能夠看到後面的這個段內容正好是18個字節。通常狀況下大小爲16,此時最後附加信息沒有,上面這個文件多了兩個字節的附加信息。
5)「01 00」,這是一個WORD,對應定義爲編碼格式(WAVE_FORMAT_PCM格式通常用的是這個)。
6)「01 00」,這是一個WORD,對應數字1,表示聲道數爲1,是個單聲道Wav
7)「22 56 00 00」對應數字22050,表明的是採樣頻率22050,採樣率(每秒樣本數),表示每一個通道的播放速度
8)「44 AC 00 00」對應數字44100,表明的是每秒的數據量,波形音頻數據傳送速率,其值爲通道數×每秒樣本數×每樣本的數據位數/81*22050*16/8)。播放軟件利用此值能夠估計緩衝區的大小。
9)「02 00」對應數字是2,表示塊對齊的內容。數據塊的調整數(按字節算的),其值爲通道數×每樣本的數據位值/8。播放軟件須要一次處理多個該值大小的字節數據,以便將其值用於緩衝區的調整。
10)「10 00」數值爲16,採樣大小爲16Bits,每樣本的數據位數,表示每一個聲道中各個樣本的數據位數。若是有多個聲道,對每一個聲道而言,樣本大小都同樣。
11)「00 00」此處爲附加信息(可選),和(4)中的size對應。

12)「66 61 73 74」 Fact是可選字段,通常當wav文件由某些軟件轉化而成,則包含該項,「04 00 00 00」Fact字段的大小爲4字節,「F8 2F 14 00」fact數據。

13)「64 61 74 61」,這個是Ascii字符「data」,標示頭結束,開始數據區域。
14)「F0 5F 28 00」十六進制數是「0x285ff0」,對應十進制2646000,是數據區的開頭,之後數據總數,看一下前面正好能夠看到,文件大小是2646050,從(2)到(13)包括(13)正好是2646050-2646000=50字節。


7 結語


對WAV格式影響最大的參數是編碼格式。採用不一樣的編碼的WAV格式是不一樣的,PCM是最多見的編碼格式,其它的爲壓縮編碼格式,通常不多使用,有的已經廢棄。隨着人們認識的進步可能還會有新的編碼格式出現。從此對WAV文件格式的更多的研究是壓縮編碼格式。

 

原文連接:http://www.docin.com/p-1263172990.html

原文連接: http://blog.csdn.net/mcgrady_tracy/article/details/52502263

相關文章
相關標籤/搜索