wav 文件格式详解
WAVE 文件规范来自微软。文件格式使用 RIFF 块,每个块由块标识符、块长度和块数据组成。
文件编码
编码包括了两方面内容,一是按一定格式存储数据,二是采用一定的算法压缩数据。WAV 格式对音频流的编码没有硬性规定,支持非压缩的 PCM(Puls Code Modulation) 脉冲编码调制格式,还支持压缩型的微软自适应分脉冲编码调制 Microsoft ADPCM(Adaptive Differential Puls Code Modulation)、国际电报联盟 (International Telegraph Union) 制定的语音压缩标准 ITUG.711 a-law、ITU G.711-law、IMA ADPCM、ITU G.723 ADPCM (Yamaha)、GSM 6.10、ITU G.721 ADPCM 编码和其它压缩算法。MP3 编码同样也可以运用在 WAV 中,只要安装相应的 Decode, 就可以播放 WAV 中的 MP3 音乐。
PCM 格式
PCM 编码是直接存储声波采样被量化后所产生的非压缩数据,故被视为单纯的无损耗编码格式,其优点是可获得高质量的音频信号。
基于 PCM 编码的 WAV 格式是最基本的 WAV 格式,被声卡直接支持,能直接存储采样的声音数据,所存储的数据能直接通过声卡播放,还原的波形曲线与原始声音波形十分接近,播放的声音质量是一流的,在 Windows 平台下被支持得最好,常常被用作在其它编码的文件之间转换的中间文件。PCM 的缺点是文件体积过大,不适合长时间记录。正因为如此,又出现了多种在 PCM 编码的基础上经改进发展起来的编码格式,如:DPCM,ADPCM 编码等。
文件格式
WAV 文件采用的是 RIFF 格式结构,WAV 文件有一个主 RIFF 块,它包括一个 Wave 标识符,后跟一个子块。数据以低位字节顺序存储。
fmt 块指定数据的格式。采样数据的格式块有 3 种,这些不同于基本 fmt 块。
非 PCM 格式必须 fact 块。
data 块包含采样数据。
example:
如果采样数据是 PCM 格式,则通常可以省略 fact 块。
整体来说如下图概括
代码表示
1 | typedef struct WAV_HEADER { |