WAVE文件格式

WAVE文件格式分析

来源:
http://soundfile.sapp.org/doc/WaveFormat/
http://tiny.systems/software/soundProgrammer/WavFormatDocs.pdf

Wave文件是用于多媒体文件存储的Microsoft RIFF(Resource Interchange File Format 资源交换档案标准)规范的子集之一。一个RIFF文件以一个文件头(File Header)开始,接着是一系列数据块(data chunk)。一个Wave文件常常是一个带有一个单“WAVE”块的RIFF文件。该“WAVE”chunk由两个子快组成,一个“fmt”chunk用于详细说明数据格式,一个“data”chunk包含实际的样本数据。这种形式我们称为规范形式。
WAVE文件格式_第1张图片

Offset Size Name Description
0 4 ChunkID ASCII码”0x52494646”对应字母”RIFF”
4 4 ChunkSize 块大小是指除去ChunkID与ChunkSize的剩余部分有多少字节数据。注意:小尾字节序数。 Value=36+SubChunk2Size 或者 Value=4+(8+SubChunk1Size)+(8+SubChunk2Size)
8 4 Format ASCII码”0x57415645”对应字母”WAVE”。该块由两个子快组成,一个“fmt”chunk用于详细说明数据格式,一个“data”chunk包含实际的样本数据。
12 4 Subchunk1ID ASCII码”0x666d7420”对应字母”fmt “。
16 4 Subchunk1Size 如果文件采用PCM编码,则该子块剩余字节数为16。
20 2 AudioFormat 如果文件采用PCM编码(线性量化),则AudioFormat=1。AudioFormat代表不同的压缩方式。
22 2 NumChannels 声道数,单声道(Mono)为1, 双声道(Stereo)为 2。
24 4 SampleRate 取样率,例:44.1kHz,48kHz。
28 4 ByteRate 传输速率,单位:Byte/s。 Value==SampleRateNumChannelsBitsPerSample/8
32 2 BlockAlign 一个样点(包含所有声道)的字节数。 Value==NumChannelsBitsPerSample/8
34 2 BitsPerSample 每个样点对应的位数。
2 ExtraParamSize 如果采用PCM编码,该值不存在。
X ExtraParams 用于存储其他参数。如果采用PCM编码,该值不存在。
36 4 Subchunk2ID ASCII码”0x64617461”对应字母”data”。
40 4 Subchunk2Size 实际样本数据的大小(单位:字节)。 Value==NumSamplesNumChannelsBitsPerSample/8
44 * Data 实际的音频数据 。

这里写图片描述
WAVE文件格式_第2张图片
上图所示例子,该WAVE文件采用PCM编码。该音频具有双声道,每个样点进行16位量化编码,双声道的一个样点占4字节,存储顺序是每个样点的左右声道交替存储。


Q & A

  • 8bit与16bit样值的二进制编码表示是一样的吗?

    8bit样值以无符号形式存储,取值范围0-255 。而16bit样值以有符号的补码形式存储,取值范围-32768 to 32767。

  • 现有的WAV支持哪几种音频压缩方法

AudioFormat Description
0 (0x0000) Unknown
1 (0x0001) PCM/uncompressed
2 (0x0002) Microsoft ADPCM
6 (0x0006) ITU G.711 a-law
7 (0x0007) ITU G.711 µ-law
17 (0x0011) IMA ADPCM
20 (0x0016) ITU G.723 ADPCM (Yamaha)
49 (0x0031) ITU G.721 ADPCM
80 (0x0050) MPEG
65,536 (0xFFFF) Experimental

你可能感兴趣的:(数据压缩)