1.概述
Waveform Audio File Format
(WAVE
矿卑,又或者是因?yàn)?code>WAV后綴而被大眾所知的),它采用RIFF
(Resource Interchange File Format)文件格式結(jié)構(gòu)兔辅。通常用來保存PCM
格式的原始音頻數(shù)據(jù),所以通常被稱為無損音頻击喂。但是嚴(yán)格意義上來講,WAV
也可以存儲其它壓縮格式的音頻數(shù)據(jù)碰辅。
2.格式解析
WAV
文件遵循RIFF規(guī)則懂昂,其內(nèi)容以區(qū)塊(chunk
)為最小單位進(jìn)行存儲。WAV
文件一般由3個(gè)區(qū)塊組成:RIFF chunk
没宾、Format chunk
和Data chunk
凌彬。另外,文件中還可能包含一些可選的區(qū)塊循衰,如:Fact chunk
铲敛、Cue points chunk
、Playlist chunk
会钝、Associated data list chunk
等伐蒋。
本文將只介紹RIFF chunk
工三、Format chunk
和Data chunk
。
2.1 RIFF區(qū)塊
名稱 | 偏移地址 | 字節(jié)數(shù) | 端序 | 內(nèi)容 |
---|---|---|---|---|
ID | 0x00 | 4Byte | 大端 | 'RIFF' (0x52494646) |
Size | 0x04 | 4Byte | 小端 | fileSize - 8 |
Type | 0x08 | 4Byte | 大端 | 'WAVE'(0x57415645) |
- 以
'RIFF'
為標(biāo)識 -
Size
是整個(gè)文件的長度減去ID
和Size
的長度 -
Type
是WAVE
表示后面需要兩個(gè)子塊:Format
區(qū)塊和Data
區(qū)塊
2.2 FORMAT區(qū)塊
名稱 | 偏移地址 | 字節(jié)數(shù) | 端序 | 內(nèi)容 |
---|---|---|---|---|
ID | 0x00 | 4Byte | 大端 | 'fmt ' (0x666D7420) |
Size | 0x04 | 4Byte | 小端 | 16 |
AudioFormat | 0x08 | 2Byte | 小端 | 音頻格式 |
NumChannels | 0x0A | 2Byte | 小端 | 聲道數(shù) |
SampleRate | 0x0C | 4Byte | 小端 | 采樣率 |
ByteRate | 0x10 | 4Byte | 小端 | 每秒數(shù)據(jù)字節(jié)數(shù) |
BlockAlign | 0x14 | 2Byte | 小端 | 數(shù)據(jù)塊對齊 |
BitsPerSample | 0x16 | 2Byte | 小端 | 采樣位數(shù) |
- 以
'fmt '
為標(biāo)識 -
Size
表示該區(qū)塊數(shù)據(jù)的長度(不包含ID
和Size
的長度) -
AudioFormat
表示Data
區(qū)塊存儲的音頻數(shù)據(jù)的格式先鱼,PCM
音頻數(shù)據(jù)的值為1 -
NumChannels
表示音頻數(shù)據(jù)的聲道數(shù)俭正,1:單聲道,2:雙聲道 -
SampleRate
表示音頻數(shù)據(jù)的采樣率 -
ByteRate
每秒數(shù)據(jù)字節(jié)數(shù) = SampleRate * NumChannels * BitsPerSample / 8 -
BlockAlign
每個(gè)采樣所需的字節(jié)數(shù) = NumChannels * BitsPerSample / 8 -
BitsPerSample
每個(gè)采樣存儲的bit數(shù)焙畔,8:8bit掸读,16:16bit,32:32bit
2.3 DATA區(qū)塊
名稱 | 偏移地址 | 字節(jié)數(shù) | 端序 | 內(nèi)容 |
---|---|---|---|---|
ID | 0x00 | 4Byte | 大端 | 'data' (0x64617461) |
Size | 0x04 | 4Byte | 小端 | N |
Data | 0x08 | NByte | 小端 | 音頻數(shù)據(jù) |
- 以
'data'
為標(biāo)識 -
Size
表示音頻數(shù)據(jù)的長度宏多,N = ByteRate * seconds -
Data
音頻數(shù)據(jù)
3. 小端存儲
WAV
文件以小端形式來進(jìn)行數(shù)據(jù)存儲儿惫。
所謂的大端模式,是指數(shù)據(jù)的低位保存在內(nèi)存的高地址中伸但,而數(shù)據(jù)的高位肾请,保存在內(nèi)存的低地址中;
所謂的小端模式砌烁,是指數(shù)據(jù)的低位保存在內(nèi)存的低地址中筐喳,而數(shù)據(jù)的高位保存在內(nèi)存的高地址中。
下面解釋一下PCM數(shù)據(jù)在WAV
文件中的bit位排列方式
PCM數(shù)據(jù)類型 | 采樣 | 采樣 |
---|---|---|
8Bit 單聲道 | 聲道0 | 聲道0 |
8Bit 雙聲道 | 聲道0 | 聲道1 |
16Bit 單聲道 | 聲道0低位函喉,聲道0高位 | 聲道0低位避归,聲道0高位 |
16Bit 雙聲道 | 聲道0低位,聲道0高位 | 聲道1低位管呵,聲道1高位 |