come from : https://blog.csdn.net/luckywang1103/article/details/45697245
RIFF概念
大部分多媒体文件都遵循一种结构来存放信息,这种结构称为”资源互换文件格式”(Resource Interchange File Format)简称RIFF。例如声音的wav文件,视频的avi文件等都是由此结构衍生出来的。
RIFF基本结构如下:
块的标志 (4bytes) 数据大小 (4bytes)
数据 数据大小记录后面跟随的数据的大小,所以总的文件的大小是”数据大小+8bytes”
wav文件格式
起始地址 占用空间 含义
00H 4 bytes “RIFF”标志
04H 4 bytes 后面开始的文件的大小,真正的文件大小=这个值+0x08
08H 4 bytes “wav”
0cH 4 bytes “fmt”
10H 4 bytes sizeof(PCM_WAV_FORMAT)数值为16或更大值,记录14H开始到”data”标志之间的数据的大小
14H 2 bytes 编码格式0x0001代表pcm
16H 2 bytes channels,1-单声道,2-双声道
18H 4 bytes sample rate
1cH 4 bytes bits*sample rate*channels/8
20H 2 bytes bits*channels/8
22H 2 bytes bits
24H 4 bytes “data”
28H 4 bytes 后面开始的语音数据的大小,真正的文件大小=这个值+0x2c
2cH … 语音数据
以上说明:PCM_WAV_FORMAT是14H开始到”data”标志之间的一段数据。
先来分析一个wav文件
52 49 46 46: RIFF标志
a6 17 02 00: 后面的文件大小,按照pc小端模式,应该是0x000217a6,真正的文件大小还要在此基础上加8
57 41 56 45: WAVE标志
66 6d 74 20: fmt标志
10 00 00 00: 14H到”data”标志之间的数据大小,这里是0x00000010,16个字节
+++++ 14H到data之间的数据 ++++
01 00: 编码格式,0x0001代表pcm编码
01 00: channels,这里是单声道
80 bb 00 00: sample rate
00 77 01 00: bits*sample rate*channels/8
02 00: bits*channels/8
10 00: bits
++++++++++++++++++++++
64 61 74 61: “data”标志
82 17 02 00: “data”标志之后的语音数据大小,真正的文件大小在此基础上加0x2c
再来分析一个wav文件
52 49 46 46: RIFF标志
3c 80 04 00: 后面的文件大小,按照pc小端模式,应该是0x000217a6,真正的文件大小还要在此基础上加0x08
57 41 56 45: WAVE标志
66 6d 74 20: fmt标志
28 00 00 00: 14H到”data”标志之间的数据大小,这里是0x00000028,40个字节
+++++ 14H到data之间的数据 ++++
FE FF: 编码格式
02 00: channels
80 bb 00 00: sample rate
00 65 04 00: bits*sample rate*channels/8
06 00: bits*channels/8
18 00: bits
03 00 00 00:
….
00 38 9b 71
++++++++++++++++++++++
64 61 74 61: “data”标志
00 80 04 00: “data”标志之后的语音数据大小,真正的文件大小在此基础上加0x44
wav容器里面的音频数据
最基本的wav文件是PCM(脉冲编码调制)格式的。这种文件直接存储采样的声音数据没有经过任何压缩,是声卡支持的数据格式,要让声卡正确的播放其他被压缩的声音数据,就应该先把压缩的数据解压缩成PCM格式,然后再让声卡播放。
另外,由于wav只是一种文件存储的容器,也可以存储压缩过的数据,如G.711数据等,播放时需要解码成pcm(脉冲编码调制)格式以便声卡能够播放。
对于单声道声音文件,采样深度为8 bit(00H~FFH)或16 bit
对于双声道立体声音文件,采样深度为8 bit,则每次采样数据为16 bit,高8 bit(左声道)和低8 bit(右声道)分别代表两个声道;采样深度为16 bit类推。
具体wav数据bit位置安排方式如下:
部分参考自:http://blog.csdn.net/zhihu008/article/details/7854529