WAV格式文件分析
WAV格式简介
WAV是最常见的声音文件格式之一,是微软公司专门为Windows开发的一种标准数字音频文件,该文件能记录各种单声道或立体声的声音信息,并能保证声音不失真。它符合资源互换文件格式(RIFF)规范,用于保存Windows平台的音频信息资源,被Windows平台及其应用程序所广泛支持。Wave格式支持MSADPCM、CCITT A律、CCITT μ律和其他压缩算法,支持多种音频位数、采样频率和声道,是PC机上最为流行的声音文件格式;但其文件尺寸较大,多用于存储简短的声音片段。(来自百度百科)
WAV格式组成
WAV文件遵循RIFF规则,其内容以chunk为最小单位进行存储。WAV文件一般由三个区块组成:RIFF chunk,Format chunk和Data chunk。同时,文件中也可能存在一些可选的区块,比如:Fact chunk,PlayList chunk等。在分析的过程中,我们重点分析前三种区块:RIFF chunk,Format chunk和Data chunk。
下面详细给出各区块的组成结构:
1 RIFF Chunk
名称 | 字节数 | 偏移地址 | 端序 | 内容 |
ID | 4 | 0x00 | 大端 | RIFF (0x52494646) |
SIZE | 4 | 0x04 | 小端 | fileSize - 8 |
Type | 4 | 0x08 | 大端 | WAVE(0x57415645 |
以RIFF为标识
Size是指的整个文件的大小减去ID和Size的长度。故是f i l e s i z e − 8 filesize - 8filesize−8
Type为Wave表示后面需要有两个子块:Format和Data
2 Format Chunk
名称 | 字节数 | 偏移地址 | 内容 | |
ID | 4 | 0x00 | 大端 | fmt (0x666D7420) |
Size | 4 | 0x04 | 小端 | 16/18 |
AudioFormat | 2 | 0x08 | 小端 | 音频格式 |
NumChannels | 2 | 0x0A | 小端 | 声道数 |
SampleRate | 4 | 0x0C | 小端 | 采样率 |
ByteRate | 4 | 0x10 | 小端 | 每秒数据字节数 |
BlockAlign | 2 | 0x14 | 小端 | 数据块对齐 |
BitsPerSample | 2 | 0x16 | 小端 | 采样位数 |
以fmt为标识
Size表示该区块数据的长度(不包含ID和Size的长度)为16时WAV头部不包含附加信息。
AudioFormat表示Data区块存储的音频数据的格式,PCM音频数据的值为1
NumChannels表示音频数据的声道数,1:单声道,2:双声道
SampleRate表示音频数据的采样率
ByteRate每秒数据字节数 S a m p l e R a t e ∗ N u m C h a n n e l s ∗ B i t s P e r S a m p l e / 8 SampleRate * NumChannels * BitsPerSample / 8SampleRate∗NumChannels∗BitsPerSample/8
BlockAlign每个采样所需的字节数 N u m C h a n n e l s ∗ B i t s P e r S a m p l e / 8 NumChannels * BitsPerSample / 8NumChannels∗BitsPerSample/8
BitsPerSample每个采样存储的bit数,取值有8,16,32
3 Data Chunk
名称 | 偏移地址 | 字节数 | 端序 | 内容 |
ID | 0x00 | 4 | 大 | data(0x64617461) |
Size | 0x04 | 4 | 小 | 视实际情况 |
Data | 0x08 | 文件大小有关 | 小 | 音频数据 |
Data为标识
Size表示音频的长度B y t e R a t e ∗ S e c o n d s ByteRate * SecondsByteRate∗Seconds
Data表示数据
对于Data Chunk,声道数和采样率不同,造成不同的数据布局
大小端端序
Wave文件以小端端序来存储数据
- 大端模式,是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中,如PNG文件格式;
- 小端模式,是指数据的低位保存在内存的低地址中,而数据的高位保存在内存的高地址中。