封装结构如下,由3个块组成,也可以说由文件头和数据组成
每一个chunk(数据块)都由3部分组成:
- id:chunk的标识
- data size:chunk的数据部分大小,字节为单位
- data,chunk的数据部分
整个WAV文件是一个RIFF chunk,它的data由3部分组成:
- format:文件类型
- fmt chunk
- 音频参数相关的chunk
- 它的data里面有采样率、声道数、位深度等参数信息
- data chunk
- 音频数据相关的chunk
- 它的data就是真正的音频数据(比如PCM数据)
RIFF chunk除去data chunk的data(音频数据)后,剩下的内容可以称为:WAV文件头,一般是44字节。
chunk ID都是大端模式,其余是小端模式
chunk fmt的结构主要是描述采样率,位深度,通道数,格式
fmt的chunk size 是16, 18 or 40,一般是16
format code(音频编码)这个最常见的是pcm填1,floating point PCM 填3
, ADPCM (2
), A-law (6
), μ-law (7
)
如果wave封装出来的文件播放有杂音,与源数据有差异,可能是这个格式填充错了
上面是存放pcm的结构
其实wave文件头中还有一个fact chunk在fmt chunk后面,来存放样本的总数,pcm数据可以通过文件大小,声道,位深度推算出总样本,但其他格式数据,是压缩的数据,需要带上这个