常用語音編碼的WAVE文件頭格式剖析--各種編碼

  WAVE文件頭作爲多媒體中使用的聲波文件格式之一,它是以RIFF格式爲標準的。RIFF是英文Resource Interchange File Format的縮寫,每個WAVE文件的頭四個字節便是“RIFF”。合理利用WAVE文件頭可以更有效地進行語音解碼。

  通常意義上說的語音編碼都是指將8KHz採樣、16比特量化的線性PCM語音信號壓縮成其它格式的語音信號,解碼時就將其它格式的語音信號變換成8KHz採樣、16比特量化的線性PCM語音信號。一般說來,這個轉換過程比較複雜,費時費力。如果對其它格式的語音信號直接加上對應的WAVE文件頭就不用這個轉換過程,用微軟自帶的錄音機就可解碼語音。

  下面就分別剖析各種語音編碼的WAVE文件頭格式,用如下各個表(表1到表7)進行對比即可。


表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

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