WAVE文件格式分析
WAVE文件格式是Microsoft的RIFF规范的一个子集,用于存储多媒体文件。 一个RIFF文件以一个文件头跟随一个数据块序列开头。WAVE文件通常只是一个具有单个“WAVE”块的RIFF文件,它由两个子块组成 —— 一个指定数据格式的“fmt”块和包含实际采样数据的“data”块。
![这里写图片描述](https://img-blog.csdn.net/20170415123048333?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveWluZ3FpX2xvaw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
![这里写图片描述](https://img-blog.csdn.net/20170415125944170?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveWluZ3FpX2xvaw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
规范的WAVE格式从RIFF头开始
offset |
size |
name |
description |
0 |
4 |
ChuckID |
包含ASCII格式的字母“RIFF”0x52494646 |
4 |
4 |
ChuckSize |
36 + SubChunk2Size,或更准确地说:4 +(8 + SubChunk1Size)+(8 + SubChunk2Size)这是这个数字后面的块的其余部分的大小。这是以字节为单位减去8个字节的不包括在此计数中的两个字段(ChunkID和ChunkSize)后整个文件的大小。有图可看出,作为例子的WAV文件chuck大小为0x24F03F02。 |
8 |
4 |
Format |
包含ASCII格式的字母“WAVE”0x57415645 |
WAVE格式由两个subchunks组成:“fmt”和“data”
“fmt”子块描述声音数据的格式:
offset |
size |
name |
description |
12 |
4 |
Subchunk1ID |
包含字母“fmt”(0x666d7420) |
16 |
4 |
Subchunk1Size |
PCM编码时,这是Subchunk的其余部分的大小,字节大小为16。本例中为16(0x10000000),即采用pcm编码 |
20 |
2 |
AudioFormat |
PCM = 1(即线性量化)除1之外的值表示某种形式的压缩(0x0100) |
22 |
2 |
NumChannels |
表示声道数,单声道为1,双声道为2,等等(本例中为双声道) |
24 |
4 |
SampleRate |
采样率,有 8000, 44100等等,(本例中为0x44AC0000,即44100) |
28 |
4 |
ByteRate |
==SampleRate∗ |