概述
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 PCM 声音文件格式所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复