(原创)Wav文件格式解析

2017/03/20 语音识别

介绍

人耳可以听到的声音频率在20HZ~20kHz之间的声波,称为音频。

音频本身是模拟信号,通过AD采样转换变成数字信号,这些数字信号称为PCM数据,采样参数有采样率,比特,通道等。

  • 采样率指每秒采集多少次,一般有16000hz,44100hz。
  • 比特代表每采一次用多少位表示,一般有8位,16位。
  • 通道代表使用多少条并行ad采样器,一般分单通道和双通道。

PCM数据虽然能保存音频文件,但给用户使用时却不知道上面的三个信息,造成解码问题,因此,一般在PCM文件前加个头,用来指示PCM数据信息。

Wav是音频最简单的无压缩格式,本身由三部分组成。

img

结构

头部

包含12个字节共三个参数:

  1. 资源交换档案标准(Resource Interchange File Format) (RIFF)头部:固定为“RIFF”,占用4个字节。
  2. ChunkSize:它等于PCM数据字节数+36。
  3. Format:固定为“WAVE”

格式

  1. Subchunk1ID:固定为“fmt”。
  2. Subchunk1Size:代表格式段剩余多少字节。
  3. AudioFormat:音频格式,PCM = 1,因此一般为1.
  4. NumChannels:通道数量,Mono = 1, Stereo = 2。
  5. SampleRate:采样率,8000,16000,44100。
  6. ByteRate:比特率,等于SampleRate * NumChannels * BitsPerSample/8。
  7. BlockAlign:代表每一帧的字节数量,等于NumChannels * BitsPerSample/8。
  8. BitsPerSample:位数,8 bits = 8, 16 bits = 16等。
  9. ExtraParamSize:如果是PCM, 该字段不存在。
  10. ExtraParams:如果是PCM,该字段不存在。

数据

  1. Subchunk2ID:固定为“data”。
  2. Subchunk2Size:表示实际的音频数据字节总数,等于NumSamples * NumChannels * BitsPerSample/8。
  3. Data:PCM数据。

注意

在文档中,除了PCM数据部分,其它部分都是采用大端模式存储, 但是本人在windows10系统中亲测,发现wav全都是采用小端模式存储。

如下图:

img

该文件大小为32046,对应上述ChunkSize(4-8字节)应该是00007D26,在图中存储变成267D0000,由此证明是采用小端模式。

很多嵌入式芯片,如ARM,MIPS等采集出来的PCM是小端模式,而JAVA虚拟机和网络传输统一采用大端模式,因此数据不能直接使用,需要把数据小端转大端先。

实践

如下图片就是android开发的app,采集音频数据的例子:

img


知识共享许可协议
本作品采用知识共享署名-非商业性使用 4.0 国际许可协议进行许可。

站内搜索

    撩我备注-博客

    joinee

    目录结构