一、各種WAV檔案頭格式

來源:互聯網
上載者:User

     Wav檔案也分好幾個種類,相應的非資料資訊儲存在檔案頭部分,以下是各種WAV檔案頭格式。

表1 8KHz採樣、16位元量化的線性PCM語音訊號的WAVE檔案頭格式表(共44位元組)
位移地址 位元組數 資料類型 內容 檔案頭定義為
00H 4 char "RIFF" char riff_id[4]="RIFF"
04H 4 long int 檔案總長-8 long int size0=文總長-8
08H 8 char "WAVEfmt " char wave_fmt[8]
10H 4 long int 10 00 00 00H(PCM) long int size1=0x10
14H 2 int 01 00H int fmttag=0x01
16H 2 int int channel=1 或2
18H 4 long int 採樣率 long int samplespersec
1CH 4 long int 每秒播放位元組數 long int bytepersec
20H 2 int 採樣一次占位元組數 int blockalign=聲道數*量化數/8
22H 2 int 量化數 int bitpersamples=8或16
24H 4 char "data" char data_id="data"
28H 4 long int 採樣資料位元組數 long int size2=文長-44
2CH 到文尾 char 採樣資料  


 

 

表2 8KHz採樣、8位元A律量化的PCM語音訊號的WAVE檔案頭格式表(共58位元組)


位移地址 位元組數 資料類型 內容 檔案頭定義為
00H 4 char "RIFF" char riff_id[4]="RIFF"
04H 4 long int 檔案總長-8 long int size0=文總長-8
08H 8 char "WAVEfmt " char wave_fmt[8]
10H 4 long int 12000000H(ALAW) long int size1=0x12
14H 2 int 06 00H int fmttag=0x06
16H 2 int 聲道數 int channel=1 或2
18H 4 long int 採樣率 long int samplespersec
1CH 4 long int 每秒播放位元組數 long int bytepersec
20H 2 int 採樣一次占位元組數 int blockalign=0x01
22H 4 long int 量化數 long int bitpersamples=8
26H 4 char "fact" char wave_fact="fact"
2AH 8 char 0400000000530700H定 char temp
32H 4 char "data" char wave_data="data"
36H 4 long int 採樣資料位元組數 lont int size2=文長-58

 

 

表3 8KHz採樣、8位元U律量化的PCM語音訊號的WAVE檔案頭格式表(共58位元組)


位移地址 位元組數 資料類型 內容 檔案頭定義為
00H 4 char "RIFF" char riff_id[4]="RIFF"
04H 4 long int 檔案總長-8 long int size0=文總長-8
08H 8 char "WAVEfmt " char wave_fmt[8]
10H 4 long int 12000000H(ULAW) long int size1=0x12
14H 2 int 07 00H int fmttag=0x07
16H 2 int 聲道數 int channel=1 或2
18H 4 long int 採樣率 long int samplespersec
1CH 4 long int 每秒播放位元組數 long int bytepersec
20H 2 int 採樣一次占位元組數 int blockalign=0x01
22H 4 long int 量化數 long int bitpersamples=8
26H 4 char "fact" char wave_fact="fact"
2AH 8 char 0400000000530700H定 char temp
32H 4 char "data" char wave_data="data"
36H 4 long int 採樣資料位元組數 lont int size2=文長-58

 

 

表4 ADPCM語音編碼後的WAVE檔案頭格式表(共90位元組)

 

位移地址 位元組數 資料類型 內容 檔案頭定義為
00H 4 char "RIFF" char riff_id[4]="RIFF"
04H 4 long int 檔案總長-8 long int size0=文總長-8
08H 8 char "WAVEfmt " char wave_fmt[8]
10H 4 long int 32000000H(ADPCM) long int size1=0x32
14H 2 int 02 00H int fmttag=0x02
16H 2 int 聲道數 int channel=1 或2
18H 4 long int 採樣率 long int samplespersec
1CH 4 long int 每秒播放位元組數 long int bytepersec
20H 2 int 採樣一次占位元組數 int blockalign=聲道數*量化數/8
22H 2 int 量化數 int bitpersamples=4
24H 34 char 固定位元組 char temp1
46H 4 char "fact" char wave_fact="fact"
4AH 8 char 0400000004930600H定 char temp2
52H 4 char "data" char wave_data="data"
56H 4 long int 採樣資料位元組數 lont int size2=文長-90
5AH 到文尾 採樣資料    


 

 

表5 GSM語音編碼後的WAVE檔案頭格式表(共60位元組)

位移地址 位元組數 資料類型 內容 檔案頭定義為
00H 4 char "RIFF" char riff_id[4]="RIFF"
04H 4 long int 檔案總長-8 long int size0=文總長-8
08H 8 char "WAVEfmt " char wave_fmt[8]
10H 4 long int 14000000H(GSM) long int size1=0x14
14H 2 int 31 00H int fmttag=0x31
16H 2 int 聲道數 int channel=1 或2
18H 4 long int 採樣率 long int samplespersec
1CH 4 long int 每秒播放位元組數 long int bytepersec
20H 8 char 4100000002004001H定 char temp1
28H 8 char 6661637404000000H定 char temp2
30H 4 char 40 E2 05 00H定 char temp3
34H 4 char "data" char wave_data="data"
38H 4 long int 採樣資料位元組數 lont int size2=文長-60
3CH 到文尾 採樣資料    


 

 

表6 SBC語音編碼後的WAVE檔案頭格式表(共58位元組)

位移地址 位元組數 資料類型 內容 檔案頭定義為
00H 4 char "RIFF" char riff_id[4]="RIFF"
04H 4 long int 檔案總長-8 long int size0=文總長-8
08H 8 char "WAVEfmt " char wave_fmt[8]
10H 4 long int 12000000H(SBC) long int size1=0x12
14H 2 int 71 00H int fmttag=0x71
16H 2 int 聲道數 int channel=1 或2
18H 4 long int 採樣率 long int samplespersec
1CH 4 long int 每秒播放位元組數 long int bytepersec
20H 2 int 採樣一次占位元組數 int blockalign=0x25
22H 4 long int 量化數 long int bitpersamples=16
26H 4 char "fact" char wave_fact="fact"
2AH 8 char 0400000076280400H定 char temp
32H 4 char "data" char wave_data="data"
36H 4 long int 採樣資料位元組數 lont int size2=文長-59


 

 

表7 CELP語音編碼後的WAVE檔案頭格式表(共58位元組)

位移地址 位元組數 資料類型 內容 檔案頭定義為
00H 4 char "RIFF" char riff_id[4]="RIFF"
04H 4 long int 檔案總長-8 long int size0=文總長-8
08H 8 char "WAVEfmt " char wave_fmt[8]
10H 4 long int 12000000H(CELP) long int size1=0x12
14H 2 int 70 00H int fmttag=0x70
16H 2 int 聲道數 int channel=1 或2
18H 4 long int 採樣率 long int samplespersec
1CH 4 long int 每秒播放位元組數 long int bytepersec
20H 2 int 採樣一次占位元組數 int blockalign=0x0C
22H 4 long int 量化數 long int bitpersamples=16
26H 4 char "fact" char wave_fact="fact"
2AH 8 char 0400000060520700H定 char temp
32H 4 char "data" char wave_data="data"
36H 4 long int 採樣資料位元組數 lont int size2=文長-58

 

WAVEFORMATEX 

typedef struct{WORD wFormatTag; WORD nChannels; DWORD nSamplesPerSec; DWORD nAvgBytesPerSec; WORD nBlockAlign; WORD wBitsPerSample; WORD cbSize; } WAVEFORMATEX;

具體參數解釋如下:
wFormatTag:波形資料的格式,定義在MMREG.H檔案中
nChannels:波形資料的通道數:單聲道或立體聲
nSamplesPerSec:採樣率,對於PCM格式的波形資料,採樣率有8.0 kHz,11.025kHz,22.05 kHz,44.1 kHz等
nAvgBytesPerSec:資料率,對於PCM格式的波形資料,資料率等於採樣率乘以每樣點位元組數
nBlockAlign:每個樣點位元組數
wBitsPerSample:採樣精度,對於PCM格式的波形資料,採樣精度為8或16
cbSize:附加格式資訊的資料區塊大小
概念2、定義裝置頭結構
WAVEHDR定義了指向波形資料緩衝區的裝置頭。

WAVEHDR 

typedef struct { LPSTR lpData; DWORD dwBufferLength; DWORD dwBytesRecorded; DWORD dwUser; DWORD dwFlags; DWORD dwLoops; struct wavehdr_tag * lpNext; DWORD reserved; } WAVEHDR;

lpData:波形資料的緩衝區地址
dwBufferLength:波形資料的緩衝區地址的長度
dwBytesRecorded:當裝置用於錄音時,標誌已經錄入的資料長度
dwUser:使用者資料
dwFlags:波形資料的緩衝區的屬性
dwLoops:播放迴圈的次數,僅用於播放控制中
lpNext和reserved均為保留值
注意:上述結構體以及我們在程式中所使用到的“HWAVEIN””HWAVEOUT”結構體均是系統已經存在的,我們只需要對其進行賦值即可。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.