WAV 文件格式分析
来源:互联网 发布:域名是什么样子 编辑:程序博客网 时间:2024/05/16 03:46
一、 WAV文件简介
波形音频文件格式 (WAV / WAVE)是Microsoft开发的一种数字化声音文件格式,用于在PC上存储音频比特流,文件扩展名为“*.wav”。
WAV文件采用RIFF文件格式结构,即具有特定的容器格式。RIFF文件结构由“块”(chunk)为基本单元构成,每个块中包含4字节标识符,4字节块的大小,以及一个数据块序列。WAVE文件通常只是一个具有单个“WAVE”块的RIFF文件,它由两个子块组成:一个指定数据格式的“fmt”块和包含实际采样数据的“data”块。
虽然WAV文件可以包含压缩音频,但最常见的WAV音频格式是脉冲编码调制(PCM)格式的未压缩音频,即直接存储采样的声音数据,没有经过任何的压缩。
WAV文件数据格式采用小端字节顺序存储方式。
二、WAV文件内部结构
WAV格式以RIFF标头开始:
0~4(bytes)ChunkID包含ASCII格式的字母“RIFF”4~8ChunkSize文件长度(不包含ChunkID和ChunkSize所占字节)
8~12format包含ASCII格式的字母“WAVE”
WAV格式由两个子块组成:“fmt”和“data”:
“fmt”描述声音数据的格式:
12~16Subchunk1ID包含字母“fmt”16~20Subchunk1Sizefmt块的大小(不包含Subchunk1ID和Subchunk1Size所占字节)20~22AudioFormat音频数据的编码方式,1表示PCM编码22~24NumChannels声道数,单声道为1,双声道为224~28SampleRate采样率(每秒采样数),如4410028~32ByteRate音频数据传送速率,单位是字节。
== SampleRate * NumChannels * BitsPerSample / 8
32~34BlockAlign每次采样的大小,单位是字节。16bit=4
== NumChannels * BitsPerSample / 8
34~36BitsPerSample每个声道的采样精度。16bit=16
“data”子块包含数据的大小和实际的声音数据:
36~40Subchunk2ID包含字母“data”40~44Subchunk2Size音频数据块的大小(不包含Subchunk2ID和Subchunk2Size所占字节)44~Data实际的声音数据
例如,用二进制编辑器打开一个WAV文件,如下:
可以看出,该WAV文件是一个16bit双声道(立体声)的音频文件。
WAV数据根据声道和bit数可分为以下几种形式:
所以8bit和16bit样值的二进制编码表示不同,8bitPCM波形样本的数据采用一字节编码,范围从0~255;16bitPCM波形样本的数据采用两字节编码,且低字节在前,高字节在后,范围从-32768~32767。
三、WAV的其它音频压缩方法
WAV对音频流的编码没有硬性规定,除了PCM之外,还有几乎所有支持ACM规范的编码都可以为WAV的音频流进行编码。
下表给出WAV文件其他形式的压缩方法,其中code信息在WAV文件字段的第21、22个byte,通过十六进制查看器我们可以看到一个WAV文件的压缩码类型。
Code Description
0 (0x0000) Unknown
1 (0x0001) PCM/uncompressed
2 (0x0002) Microsoft ADPCM
6 (0x0006) ITU G.711 a-law
7 (0x0007) ITU G.711 µ-law
17 (0x0011) IMA ADPCM
20 (0x0016) ITU G.723 ADPCM (Yamaha)
49 (0x0031) GSM 6.10
64 (0x0040) ITU G.721 ADPCM
80 (0x0050) MPEG
65,536 (0xFFFF) Experimental
四、WAV文件采样率转换
WAV文件可以进行采样率的转换,例如将采样率为48khz的WAV文件转换成44.1khz,由于48Khz和44.1khz不是整数倍的关系,不能通过插值或者抽取直接转换。可以先做插值,再做抽取,这样既不会产生数据的丢失,也避免了频谱的混叠失真。可求出48khz和44.1khz的最小公倍数为7056khz,先对48khz文件进行插值处理,在两个相邻抽样值之间插入146个邻近抽样值,将采样率变为7056khz,再每隔159个样值抽取一个,这样就可以将采样率转换为44.1khz。
- wav文件格式分析详解
- WAV文件格式分析
- wav文件格式分析详解
- wav文件格式分析详解
- wav文件格式分析详解
- wav文件格式分析详解
- wav文件格式分析详解
- wav文件格式分析详解
- wav文件格式分析详解
- wav文件格式分析详解
- WAV文件格式分析
- wav文件格式分析详解
- wav文件格式分析详解
- wav文件格式分析详解
- wav文件格式分析详解
- wav文件格式分析详解
- WAV文件格式分析
- wav文件格式分析详解
- PHP 数组和字符串互相转换实现方法
- 内存泄漏及管理(02)-内存泄漏的分析和处理
- Linux 动态库与静态库制作及使用详解
- call与apply(2) //有疑问
- 图形学之深度缓存简介
- WAV 文件格式分析
- Java四种代码块及运行优先级
- Linux静态库的使用
- 病毒侵袭 HDU
- 求最大公约数
- Hibernate 一级缓存的细节
- C++11——移动语义
- Liner_Shaker_Full
- 递归实例总结