音訊編解碼·格式篇(1)Wave PCM audio format(WAV)
0 音訊編解碼基礎
- 取樣率:聲音訊號在“模數轉換”過程中單位時間內取樣的次數。
- 取樣值:每一次取樣週期內聲音模擬訊號的積分值。
- 單聲道:11.025 KHz 取樣值,8 Bits 取樣值(0x00 - 0xFF)。
- 雙聲道:44.1 KHz 取樣值,16 Bits 取樣值。高八位表示左聲道,低八位表示右聲道。
1 WAV音訊檔案格式
見下圖:
- 檔案頭
- 資料體:由 PCM(脈衝編碼調製)格式表示的樣本組成。
單聲道 WAV 檔案中,聲道0代表左聲道,聲道1代表右聲道;多聲道 WAV 檔案中,左右聲道的樣本是交替出現的。
1.1 檔案頭格式:
偏移地址 |
位元組數 |
資料型別 |
內容 |
---|
0x00 |
4 |
char |
“RIFF”標誌 |
0x04 |
4 |
long int |
檔案長度 |
0x08 |
4 |
char |
“WAVE”標誌 |
0x0C |
4 |
char |
“fmt ”標誌 |
0x10 |
4 |
|
過度位元組(不定) |
0x14 |
2 |
int |
格式類別(0x10是PCM形式的聲音格式) |
0x16 |
2 |
int |
通道數(1為單聲道,2為雙聲道) |
0x18 |
2 |
int |
取樣率(每秒的樣本數,表示每個通道的播放速度) |
0x1C |
4 |
long int |
波形音訊資料傳輸速率,為(通道數x每秒資料位數x樣本的資料位數/8,播放器根據此值估算緩衝區大小) |
0x20 |
2 |
int |
資料塊的調整數,為(通道數x沒樣本的資料位值/8),播放軟體一次需要處理多個該值大小的位元組資料,以便就愛將其值用於緩衝區的調整 |
0x22 |
2 |
|
每樣本的資料位數,表示每個聲道中各樣本的資料位數,如果有多個聲道,對每個聲道而言,樣本大小都一樣 |
1.2 資料體格式:
偏移地址 |
位元組數 |
資料型別 |
內容 |
---|
0x24 |
4 |
char |
資料標記符“data” |
0x28 |
4 |
long int |
語音資料的長度 |
然後就是語音資料幀了。下表中的0聲道代表左聲道,1聲道代表右聲道:
偏移地址 |
sample1 |
sample2 |
---|
8位單聲道 |
0聲道 |
0聲道 |
8位雙聲道 |
0聲道,1聲道 |
0聲道,1聲道 |
16位單聲道 |
0聲道低位元組,0聲道高位元組 |
0聲道低位元組,0聲道高位元組 |
16位雙聲道 |
0聲道低位元組,0聲道搞位元組 |
1聲道低位元組,1聲道高位元組 |
1.3 WAV檔案格式例項分析(轉載)
地址段 |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
A |
B |
C |
D |
E |
F |
---|
0x00000000 |
52 |
49 |
46 |
46 |
0A |
06 |
01 |
00 |
57 |
41 |
56 |
45 |
66 |
6D |
74 |
20 |
0x00000010 |
12 |
00 |
00 |
00 |
01 |
00 |
02 |
00 |
44 |
AC |
00 |
00 |
10 |
B1 |
02 |
00 |
0x00000020 |
04 |
00 |
10 |
00 |
00 |
00 |
66 |
61 |
63 |
74 |
04 |
00 |
00 |
00 |
76 |
41 |
0x00000030 |
00 |
00 |
64 |
61 |
74 |
61 |
D8 |
05 |
01 |
00 |
00 |
00 |
00 |
00 |
FF |
FF |
0x00000040 |
00 |
00 |
FE |
FF |
FE |
FF |
00 |
00 |
00 |
00 |
FE |
FF |
FE |
FF |
00 |
00 |
… |
… |
… |
… |
… |
… |
… |
… |
… |
… |
… |
… |
… |
… |
… |
… |
… |
0x00000050 |
64 |
61 |
6B |
61 |
D8 |
05 |
01 |
00 |
|
|
|
|
|
|
|
|
地址段 |
位元組數 |
資料型別 |
內容 |
---|
0x00 - 0x03 |
4 |
4個char |
標誌位,"RIFF" |
0x04 - 0x07 |
4 |
1個int |
檔案長度,小尾端,實際是0x0001060A |
0x08 - 0x0B |
4 |
4個char |
標誌位,“WAVE” |
0x0C - 0x0F |
4 |
4個char |
標誌位,“fmt ”,fmt表示為,最後一個是空格 |
0x10 - 0x13 |
4 |
1個int |
0x00000012,sizeof(PCMWAVEFORMAT) |
0x14 - 0x15 |
2 |
1個short |
格式類別,1(WAVE_FORMAT_PCM)表示PCM形式的聲音資料 |
0x16 - 0x17 |
2 |
1個short |
通道數,1為單聲道,2為雙聲道 |
0x18 - 0x1B |
4 |
1個int |
取樣率 |
0x1C - 0x1F |
4 |
1個int |
0x10B10000,每秒資料量 |
0x20 - 0x21 |
2 |
1個short |
資料塊的調整值(按位元組算) |
0x22 - 0x4F |
|
|
|
0x50 - 0x53 |
4 |
4個char |
標誌位,“data” |
0x54 - 0x57 |
4 |
1個int |
語音資料大小,0x000105D8 |
Reference
- WAV(PCM)檔案格式分析