Waveform Audio File Format(WAVE,又或者是因为扩展名而被大众所知的WAV)Wave文件格式是用于存储数字音频数据的Windows本地文件格式。 由于Windows的普及和为平台编写的大量程序,它已经成为电脑上最广泛支持的数字音频文件格式之一。几乎每个可以打开或保存数字音频的现代程序都支持这种文件格式。 由于Wave文件格式是Windows原生的,因此Intel处理器,所有数据值都以Little-Endian(最低有效字节优先)顺序存储。Wave文件可以包含用于指定提示点标签,注释等的文本字符串。字符串以第一个字节指定字符串中以下ASCII文本字节数的格式存储。
Wave文件使用标准的RIFF结构,将文件内容(样本格式,数字音频样本等)分组为单独的块,每个包含自己的头和数据字节。块头指定块数据字节的类型和大小。该组织方法允许不使用或识别特定类型的块的程序轻松跳过它们,并继续处理已知的块。某些类型的块可能包含子块。
RIFF文件块的一个棘手之处在于它们必须是字对齐的。这意味着它们的总大小必须是2个字节的倍数(即2,4,6,8等等)。如果一个块包含奇数个数据字节,使其不能字对齐,那么最后一个数据字节就必须用值为零的额外字节来填充。这个额外的填充字节不计入块大小,因此程序必须总是对齐一个块头大小值,以便计算以下块的偏移量。
WAV格式数据由两部分组成,文件头和样值。文件头描述了WAV文件的基本特征,如文件大小、格式、量化比特数、声道数、采样率、比特率。
下表为一个.wav文件的数据流分析
Positions | Name | Sample Value | Description |
---|---|---|---|
1 - 4 | ChunkId | “RIFF” | Marks the file as a riff file. Characters are each 1 byte long. |
5 - 8 | ChunkSize | File size (integer) | Size of the overall file - 8 bytes, in bytes (32-bit integer). Typically, you’d fill this in after creation. |
9 -12 | Format | “WAVE” | File Type Header. For our purposes, it always equals “WAVE”. |
13-16 | Subchunk1ID | “fmt “ | Format chunk marker. Includes trailing null |
17-20 | Subchunk1Size | 16 | Length of format data as listed above |
21-22 | AudioFormat | 1 | Type of format (1 is PCM) - 2 byte integer |
23-24 | NumChanels | 2 | Number of Channels - 2 byte integer |
25-28 | SampleRate | 44100 | Sample Rate - 32 byte integer. Common values are 44100 (CD), 48000 (DAT). Sample Rate = Number of Samples per second, or Hertz. |
29-32 | ByteRate | 176400 | (Sample Rate * BitsPerSample * Channels) / 8. |
33-34 | BlockAlign | 4 | (BitsPerSample * Channels) / 8.1 - 8 bit mono2 - 8 bit stereo/16 bit mono4 - 16 bit stereo |
35-36 | BitsPerSample | 16 | Bits per sample |
37-40 | Subchunk2ID | “data” | “data” chunk header. Marks the beginning of the data section. |
41-44 | Data | File size (data) | Size of the data section. |
8bit和16bit样值的二进制编码方式表示一样吗?
8bit样值储存为unsighed bytes格式 ,取值范围为0-255。16bit样值则被储存为2字节signed integers,取值范围为-32768-32767。如果WAV文件通道数为2,左右声道交替储存。
现有的WAV支持哪几种音频压缩方法?
Code | 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) | GSM 6.10 |
64 (0x0040) | ITU G.721 ADPCM |
80 (0x0050) | MPEG |
65,536 (0xFFFF) | Experimental |
code对应着上文数据结构中的AudioFormat字段。