实例分析
1. 在网上下载wav的音频文件,使用mediainfo显示该音频文件的详细信息。
root@test:~$ mediainfo ~/Download/test.wav
General
Complete name : /home/test/Download/test.wav
Format : Wave
File size : 44.2 MiB
Duration : 4mn 22s
Overall bit rate mode : Constant
Overall bit rate : 1 411 Kbps
Audio
ID : 0
Format : PCM
Format settings, Endianness : Little
Codec ID : 1
Duration : 4mn 22s
Bit rate mode : Constant
Bit rate : 1 411.2 Kbps
Channel(s) : 2 channels
Sampling rate : 44.1 KHz
Bit depth : 16 bits
Stream size : 44.2 MiB (100%)2. 使用vim使用十六进制打开该文件
1 0000000: 5249 4646 741d c302 5741 5645 666d 7420 RIFFt...WAVEfmt
2 0000010: 1000 0000 0100 0200 44ac 0000 10b1 0200 ........D.......
3 0000020: 0400 1000 6461 7461 501d c302 0100 0000 ....dataP.......
4 0000030: ffff 0000 0000 0000 0000 0100 0000 ffff ................
5 0000040: 0000 0100 0000 ffff 0000 0000 ffff 0100 ................
6 0000050: 0200 ffff fdff 0100 0300 ffff ffff 0200 ................
7 0000060: 0000 feff 0100 0200 ffff feff 0100 0200 ................
8 0000070: ffff ffff 0100 0000 ffff 0100 0000 ffff ................3. 分析上述的数据
"
52 49 46 46" 对应的Ascii码字符为"RIFF"。
"
74 1d c3 02" 对应的就是ChunkSize,对应的十六进制是:0x2c31d74=46341492。那整个wav文件的大小就为: 46341492+8=46341500。将此值转化为MB位单位: 44.2MB,可以验证上述使用mediainfo的信息。
"
57 41 56 45" 对应的Ascii码字符为"WAVE"。
"
66 6d 74 20" 对应的Ascii码字符为"fmt"。
"
10 00 00 00" 四字节对应的是该音频的编码方式,通常为16,代表PCM编码方式。也就是十六进制0x10。
"
01 00" 对应为1,代表PCM编码方式。
"
02 00" 通道个数,通道数为2,验证上述mediainfo的信息。
"
44 ac 00 00" 采用频率,转化为十六进制为: 0xac44=44100=44.1KHz
"
10 b1 02 00" 每秒所需的字节数,转化为十六进制为: 0x2b110=176400。通过此值可以计算该音频的时长: 46341500/17600=4.37。0.37*60=22.2,则该音频的时长为4mn22s。
"
04 00" 数据对齐单位。
"
10 00" 采样位数,等于0x10=16。
"
64 61 74 61" 对应的Ascill码字符为"data"。
"
50 1d c3 02" 对应该音频的raw数据的大小,转化为十六进制为0x2c31d50=46341456,此值等于wav_size-44=46341500-44。