WAVE文件格式

WAVE文件格式分析

來源:
http://soundfile.sapp.org/doc/WaveFormat/
http://tiny.systems/software/soundProgrammer/WavFormatDocs.pdf

Wave文件是用於多媒體文件存儲的Microsoft RIFF(Resource Interchange File Format 資源交換檔案標準)規範的子集之一。一個RIFF文件以一個文件頭(File Header)開始,接着是一系列數據塊(data chunk)。一個Wave文件常常是一個帶有一個單“WAVE”塊的RIFF文件。該“WAVE”chunk由兩個子快組成,一個“fmt”chunk用於詳細說明數據格式,一個“data”chunk包含實際的樣本數據。這種形式我們稱爲規範形式。
這裏寫圖片描述

Offset Size Name Description
0 4 ChunkID ASCII碼”0x52494646”對應字母”RIFF”
4 4 ChunkSize 塊大小是指除去ChunkID與ChunkSize的剩餘部分有多少字節數據。注意:小尾字節序數。Value=36+SubChunk2Size 或者 Value=4+(8+SubChunk1Size)+(8+SubChunk2Size)
8 4 Format ASCII碼”0x57415645”對應字母”WAVE”。該塊由兩個子快組成,一個“fmt”chunk用於詳細說明數據格式,一個“data”chunk包含實際的樣本數據。
12 4 Subchunk1ID ASCII碼”0x666d7420”對應字母”fmt “。
16 4 Subchunk1Size 如果文件採用PCM編碼,則該子塊剩餘字節數爲16。
20 2 AudioFormat 如果文件採用PCM編碼(線性量化),則AudioFormat=1。AudioFormat代表不同的壓縮方式。
22 2 NumChannels 聲道數,單聲道(Mono)爲1, 雙聲道(Stereo)爲 2。
24 4 SampleRate 取樣率,例:44.1kHz,48kHz。
28 4 ByteRate 傳輸速率,單位:Byte/s。 Value==SampleRateNumChannelsBitsPerSample/8
32 2 BlockAlign 一個樣點(包含所有聲道)的字節數。Value==NumChannelsBitsPerSample/8
34 2 BitsPerSample 每個樣點對應的位數。
2 ExtraParamSize 如果採用PCM編碼,該值不存在。
X ExtraParams 用於存儲其他參數。如果採用PCM編碼,該值不存在。
36 4 Subchunk2ID ASCII碼”0x64617461”對應字母”data”。
40 4 Subchunk2Size 實際樣本數據的大小(單位:字節)。Value==NumSamplesNumChannelsBitsPerSample/8
44 * Data 實際的音頻數據 。

這裏寫圖片描述
這裏寫圖片描述
上圖所示例子,該WAVE文件採用PCM編碼。該音頻具有雙聲道,每個樣點進行16位量化編碼,雙聲道的一個樣點佔4字節,存儲順序是每個樣點的左右聲道交替存儲。


Q & A

  • 8bit與16bit樣值的二進制編碼表示是一樣的嗎?

    8bit樣值以無符號形式存儲,取值範圍0-255 。而16bit樣值以有符號的補碼形式存儲,取值範圍-32768 to 32767。

  • 現有的WAV支持哪幾種音頻壓縮方法

AudioFormat Description
0 (0x0000) Unknown
1 (0x0001) PCM/uncompressed
2 (0x0002) Microsoft ADPCM
6 (0x0006) ITU G.711 a-law
7 (0x0007) ITU G.711 µ-law
17 (0x0011) IMA ADPCM
20 (0x0016) ITU G.723 ADPCM (Yamaha)
49 (0x0031) ITU G.721 ADPCM
80 (0x0050) MPEG
65,536 (0xFFFF) Experimental

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