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
最后
以上就是虚拟月饼最近收集整理的关于WAVE PCM 声音文件格式的全部内容,更多相关WAVE内容请搜索靠谱客的其他文章。
发表评论 取消回复