作者:U友60759920 | 来源:互联网 | 2023-05-18 15:36
WAVE文件格式是Microsoft为存储多媒体的RIFF规范的一部分。一个RIFF文件以一个文件头开始,然后是一系列的数据块。一个WAVE文件常常仅由一个WAVE块构成,WAVE块包含一个说明格式的
WAVE文件格式是Microsoft为存储多媒体的RIFF规范的一部分。一个RIFF文件以一个文件头开始,然后是一系列的数据块。一个WAVE文件常常仅由一个WAVE块构成,WAVE块包含一个说明格式的fmt块和存储取样信息的数据块。
标准WAVE文件格式
偏移 |
长度(字节) |
变量名 |
描述 |
备注 |
0 |
4 |
ChunkID |
ASCII字符“RIFF”,大端形式 |
RIFF头 |
4 |
4 |
ChunkSize |
36+SubChunk2Size,即:4 + (8 + SubChunk1Size) + (8 + SubChunk2Size),指除文件前8字节后的字节数 |
RIFF头 |
8 |
4 |
Format |
ASCII字符“WAVE”,大端形式 |
RIFF头 |
12 |
4 |
Subchunk1ID |
ASCII字符“fmt ”,大端形式 |
Fmt子块 |
16 |
4 |
Subchunk1Size |
对于PCM文件为16。指除前8字节的Fmt块大小 |
Fmt子块 |
20 |
2 |
AudioFormat |
PCM=1,其他值指以某种形式压缩(见表2) |
Fmt子块 |
22 |
2 |
NumChannels |
单声道=1,立体声=2 |
Fmt子块 |
24 |
4 |
SampleRate |
取样率,取16000 |
Fmt子块 |
28 |
4 |
ByteRate |
SampleRate * NumChannels * BitsPerSample/8 |
Fmt子块 |
32 |
2 |
BlockAlign |
NumChannels * BitsPerSample/8,所有声道中一个样本数据的字节总数 |
Fmt子块 |
34 |
2 |
BitsPerSample |
8或16 |
Fmt子块 |
36 |
4 |
Subchunk2ID |
ASCII字符串“data” |
Data子块 |
40 |
4 |
Subchunk2Size |
NumSamples * NumChannels * BitsPerSample/8,指数据中的字节数 |
Data子块 |
44 |
* |
Data |
实际的声音数据 |
|
表2 Format Code 格式编码
格式编码 |
预处理符号 |
数据 |
0x0001 |
WAVE_FORMAT_PCM |
PCM |
0x0003 |
WAVE_FORMAT_IEEE_FLOAT |
Ieee float |
0x0006 |
WAVE_FORMAT_ALAW |
8bits ITU-T G.711 A-law |
0x0007 |
WAVE_FORMAT_MULAW |
8-bit ITU-T G.711 u-law |
0xFFFE |
WAVE_FORMAT_EXTENSIBLE |
|
注意:
1)WAVE文件默认的字节顺序是小端顺序,若是大端顺序用RIFX代替RIFF标识
2)取样数据必须是偶数字节
3)8位取样数据被存储为无符号数,从0到255.16位的取样数据被存储为补码,从-32768到32767
4)在wave数据流中可能有添加的子块。每一个子块有char SubChunkID[4],unsigned long SubChunkSize和SubChunkSize字节的数据
5)RIFF代表Resource Interchange File Format