WAV (RIFF) 文件是一个包含标头和数据的多格式文件,是微软的 RIFF
规范存储的多媒体文件格式的子集。其基本构成为以“块”(chunk)组成的
单元,RIFF 文件以一串数据块(data chunks)组成的文件头为开始,"标
准型"wav文件往往只是 RIFF 文件中一个单独的"WAVE"大块,包含两个子
块:描述数据格式信息的fmt块和包含实际的示例数据的数据块
(如下图,来源网络):
字节 | 示例值 | 描述 |
1-4 | "RIFF" | 将文件标记为RIFF文件,每字符用1个字节表示。 |
5-8 | 文件大小(整数) | 4个字节整数表示总体文件大小,以字节为单位(32 位整数)在创建之后即填写 |
9-12 | "WAVE" | 文件类型标记为WAVE |
13-16 | fmt | 标记格式块,描述数据格式信息 |
17-20 | 16 | 上面列出的格式数据的长度 |
21-22 | 1 | 2 字节整数,描述格式类型(如1 是 PCM) |
23-24 | 2 | 2 字节整数,描述通道数目,1为单声道,2为双声道 |
25-28 | 44100 | |
29-32 | 176400 | 4字节整数,描述比特率=(采样率* 每样值位数*渠道) / 8。 |
33-34 | 4 | (每样值位数* 通道) / 8。表示所有通道的一个样值所需比特数。8 位 mono2即8 位立体声;16 位 mono4即16 位立体声 |
35-36 | 16 | 每样值位数(常用16比特或8比特表示样值) |
37-40 | "data" | "data"块标记,标记数据节开始。 |
41-44 | 文件数据大小 | 描述数据节的大小。 |
举个例子, 这是一个以16进制表示的72字节大小的WAV文件数据:
52 49 46 46 24 08 00 00 57 41 56 45 66 6d74 20 10 00 00 00 01 00 02 00
22 56 00 00 88 58 01 00 04 00 10 00 64 6174 61 00 08 00 00 00 00 00 00
24 17 1e f3 3c 13 3c 14 16 f9 18 f9 34 e723 a6 3c f2 24 f2 11 ce 1a 0d
下图是这些数据的表示意义,可以看出,前44个字节为文件头,后面28字节分别表示左右声道样本值:
注意︰
所假设的波形数据文件的默认字节排序是小端字节序,而采用大端字节排序方
案编写的文件具有标识符 RIFX 而不是RIFF。
问题:
1.8比特样值和16比特样值的二进制编码一样吗?
8 比特采样存储为无符号字节,范围从 0 至 255;
16 比特采样存储为可补充 2 字节的有符号整数,范围从-32768到 32767。
2.现有的WAV支持哪几种音频压缩方法?
3.如何将采样频率从48kHz转化为44.1kHz?
需要将WAV文件头中的chunkSize、sampleRate、
byteRate、subchunk2Size都重新计算更改。
参考资料:
http://soundfile.sapp.org/doc/WaveFormat/
http://www.topherlee.com/software/pcm-tut-wavformat.html