![]()
WAV作为音频文件,其格式规则由微软和IBM共同制定。常用作无压缩的文件格式。
作为音频文件,文件特征包括:声道数,量化位数\((8bit, 16bit, 24bit)\),取样频率\((16khz, 22khz……)\)
wav格式文件所占容量\((B) = (取样频率 *
量化位数 * 声道数) * 时间 / 8\),除以8 的原因是因为 1字节 =
8bit
为了方便查看具体的编码的细节,我们首先先介绍下Ubuntu下一款16进制的文本查看器hexdump,其相应参数说明如下:
- hexdump -C <==
规范的十六进制和ASCII码显示(Canonical hex+ASCII display )
- hexdump -b <== 单字节八进制显示(One-byte octal
display)
- hexdump -c <== 单字节字符显示(One-byte
character display)
- hexdump -d <== 双字节十进制显示(Two-byte
decimal display)
- hexdump -o <== 双字节八进制显示(Two-byte octal
display)
- hexdump -x <== 双字节十六进制显示(Two-byte
hexadecimal display)
比较来比较去,还是hexdump
-C的显示效果更好些。
具体的编码方式定义如下:
起始地址 |
大小(byte) |
数据块类型 |
内容 |
00H |
4 |
字符 |
资源交换文件标志(RIFF) |
04H |
4 |
长整数 |
从下个地址开始到文件尾的总字节数 |
08H |
4 |
字符 |
WAV文件标志(WAVE) |
0CH |
4 |
字符 |
波形格式标志(fmt
),最后一位空格。 |
10H |
4 |
整数 |
过滤字节(一般为00000010H),若为00000012H则说明数据头携带附加信息(见“附加信息”)。 |
14H |
2 |
整数 |
为1时表示线性PCM编码,大于1时表示有压缩的编码。这里是0001H |
16H |
2 |
整数 |
通道数,1为单声道,2为双声道。这里是0001H。 |
18H |
4 |
长整数 |
采样频率,这里00001f40H = 8000 Hz |
1CH |
4 |
长整数 |
byte率(每秒平均字节数) =
采样频率×通道数×位数/8 003e80H = 16000 = 8000116/8 |
20H |
2 |
整数 |
DATA数据块长度(字节) |
22H |
2 |
整数 |
PCM
位宽,0010H即16,一个量化样本占2byte。 |
随后2字节 |
2 |
整数 |
附加信息(可选,由上方过滤字节确定) |
随后4字节 |
4 |
字符 |
数据标示符(data) |
随后4字节 |
4 |
长整数 |
DATA总数据长度字节 |
随后 |
|
|
DATA数据块 00a640H = 42560 |