概述
Waveform Audio File Format(WAVE,又或者是因为WAV后缀而被大众所知的),它采用RIFF(Resource Interchange File Format)文件格式结构。通常用来保存PCM格式的原始音频数据,所以通常被称为无损音频。但是严格意义上来讲,WAV也可以存储其它压缩格式的音频数据。
文件结构
WAV文件遵循RIFF规则,其内容以区块(chunk)为最小单位进行存储。WAV文件一般由3个区块组成:RIFF chunk、Format chunk和Data chunk。另外,文件中还可能包含一些可选的区块,如:Fact chunk、Cue points chunk、Playlist chunk、Associated data list chunk等。
RIFF区块
名称 | 偏移地址 | 字节数 | 端序 | 内容 |
---|---|---|---|---|
ID | 0x00 | 4Byte | 大端 | 'RIFF' (0x52494646) |
Size | 0x04 | 4Byte | 小端 | fileSize - 8 |
Type | 0x08 | 4Byte | 大端 | 'WAVE'(0x57415645) |
- 以
'RIFF'
为标识 Size
是整个文件的长度减去ID
和Size
的长度Type
是WAVE
表示后面需要两个子块:Format
区块和Data
区块
在UltraEdit软件中打开.wav文件,标出WAV首部数据部分:
红框:ID,52 49 46 46 对应的ASCII字符为RIFF
蓝框:Size(文件大小),从低位向高位读入。该部分的实际值应为6C E6 02 00 的反向顺序 00 02 E6 6C
绿框:Type,57 41 56 45对应的ASCII字符为WAVE
FORMAT区块
红框:ID,66 6D 74 20对应的ASCII字符即为fmt
蓝框:声道数,02 00 表示该音频文件为双声道
绿框:采样率,从低位向高位,00 00 AC 44 换成10进制为44100
DATA区块
名称 | 偏移地址 | 字节数 | 端序 | 内容 |
---|---|---|---|---|
ID | 0x00 | 4Byte | 大端 | 'data' (0x64617461) |
Size | 0x04 | 4Byte | 小端 | N |
Data | 0x08 | NByte | 小端 | 音频数据 |
对于Data块,根据声道数和采样率的不同情况,布局如下(每列代表8bits):
其他区块
在WAV中还存在其他的数据块,存放不同的辅助信息,这些块都以RIFF数据块格式存储,
当ID为“RIFF”或“LIST”时,允许该数据块中包含子块。"LIST"块的数据域的起始位置也有一个四字节类型码(List Type),用于说明LIST数据域的数据内容。比如,类型码为"INFO"时,其数据域可能包括"ICOP"、"ICRD"块,用于记录文件版权和创建时间信息。
参考资料
https://blog.csdn.net/imxiangzi/article/details/80265978