1. 程式人生 > >wav文件格式分析與詳解

wav文件格式分析與詳解

操作 量化 可用 存在 進制 不同 都是 單純 _for

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

波形文件的基礎知識

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.10、ITU G.721 ADPCM編碼和其它壓縮算法。MP3編碼同樣也可以運用在WAV中,只要安裝相應的Decode,就可以播放WAV中的MP3音樂。

技術分享

表 1

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

表 2 WAVE 文件結構

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

表 3 WAVE 文件頭格式

偏移
地址

字節數

數據
類型

字段名稱 字段說明
00H 4 字符 文檔標識 大寫字符串"RIFF",標明該文件為有效的 RIFF 格式文檔。
04H 4 長整型數 文件數據長度 從下一個字段首地址開始到文件末尾的總字節數。該字段的數值加 8 為當前文件的實際長度。
08H 4 字符 文件格式類型 所有 WAV 格式的文件此處為字符串"WAVE",標明該文件是 WAV 格式文件。
0CH 4 字符 格式塊標識 小寫字符串,"fmt "。
10H 4 長整型數 格式塊長度。 其數值不確定,取決於編碼格式。可以是 16、 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 整型數 采樣位數 存儲每個采樣值所用的二進制數位數。常見的位數有 4、8、12、16、24、32
24H 對基本格式塊的擴充部分(詳見擴展格式塊,格式塊的擴充)

表 4 常見的壓縮編碼格式

格式代碼 格式名稱 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

表5

偏移 長度 數據類型 字段名稱 字段說明
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)采樣位數:也叫量化位數(單位:比特),是存儲每個采樣值所用的二進制位數。采樣值反應了聲音的波動狀態。采樣位數決定了量化精度。采樣位數越長,量化的精度就越高,還原的波形曲線越真實,產生的量化噪聲越小,回放的效果就越逼真。常用的量化位數有4、8、12、16、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

wav文件格式分析與詳解