音频编解码·格式篇(1)Wave PCM audio format(WAV)

时间:2022-10-07 19:41:47

音频编解码·格式篇(1)Wave PCM audio format(WAV)

  • 作者:柳大·Poechant
  • 博客:Blog.CSDN.net/Poechant
  • 邮箱:zhongchao.ustc@gmail.com
  • 日期:April 6th, 2012

0 音频编解码基础

  • 采样率:声音信号在“模数转换”过程中单位时间内采样的次数。
  • 采样值:每一次采样周期内声音模拟信号的积分值。
  • 单声道:11.025 KHz 采样值,8 Bits 采样值(0x00 - 0xFF)。
  • 双声道:44.1 KHz 采样值,16 Bits 采样值。高八位表示左声道,低八位表示右声道。

1 WAV音频文件格式

见下图:

音频编解码·格式篇(1)Wave PCM audio format(WAV)

  • 文件头
    • RIFF/WAV 文件标识段
    • 声音数据格式说明段
  • 数据体:由 PCM(脉冲编码调制)格式表示的样本组成。

单声道 WAV 文件中,声道0代表左声道,声道1代表右声道;多声道 WAV 文件中,左右声道的样本是交替出现的。

1.1 文件头格式:

偏移地址 字节数 数据类型 内容
0x00 4 char “RIFF”标志
0x04 4 long int 文件长度
0x08 4 char “WAVE”标志
0x0C 4 char “fmt ”标志
0x10 4   过度字节(不定)
0x14 2 int 格式类别(0x10是PCM形式的声音格式)
0x16 2 int 通道数(1为单声道,2为双声道)
0x18 2 int 采样率(每秒的样本数,表示每个通道的播放速度)
0x1C 4 long int 波形音频数据传输速率,为(通道数x每秒数据位数x样本的数据位数/8,播放器根据此值估算缓冲区大小)
0x20 2 int 数据块的调整数,为(通道数x没样本的数据位值/8),播放软件一次需要处理多个该值大小的字节数据,以便就爱将其值用于缓冲区的调整
0x22 2   每样本的数据位数,表示每个声道中各样本的数据位数,如果有多个声道,对每个声道而言,样本大小都一样

1.2 数据体格式:

偏移地址 字节数 数据类型 内容
0x24 4 char 数据标记符“data”
0x28 4 long int 语音数据的长度

然后就是语音数据帧了。下表中的0声道代表左声道,1声道代表右声道:

偏移地址 sample1 sample2
8位单声道 0声道 0声道
8位双声道 0声道,1声道 0声道,1声道
16位单声道 0声道低字节,0声道高字节 0声道低字节,0声道高字节
16位双声道 0声道低字节,0声道搞字节 1声道低字节,1声道高字节

1.3 WAV文件格式实例分析(转载)

地址段 0 1 2 3 4 5 6 7 8 9 A B C D E F
0x00000000 52 49 46 46 0A 06 01 00 57 41 56 45 66 6D 74 20
0x00000010 12 00 00 00 01 00 02 00 44 AC 00 00 10 B1 02 00
0x00000020 04 00 10 00 00 00 66 61 63 74 04 00 00 00 76 41
0x00000030 00 00 64 61 74 61 D8 05 01 00 00 00 00 00 FF FF
0x00000040 00 00 FE FF FE FF 00 00 00 00 FE FF FE FF 00 00
0x00000050 64 61 6B 61 D8 05 01 00                
地址段 字节数 数据类型 内容
0x00 - 0x03 4 4个char 标志位,"RIFF"
0x04 - 0x07 4 1个int 文件长度,小尾端,实际是0x0001060A
0x08 - 0x0B 4 4个char 标志位,“WAVE”
0x0C - 0x0F 4 4个char 标志位,“fmt ”,fmt表示为,最后一个是空格
0x10 - 0x13 4 1个int 0x00000012,sizeof(PCMWAVEFORMAT)
0x14 - 0x15 2 1个short 格式类别,1(WAVE_FORMAT_PCM)表示PCM形式的声音数据
0x16 - 0x17 2 1个short 通道数,1为单声道,2为双声道
0x18 - 0x1B 4 1个int 采样率
0x1C - 0x1F 4 1个int 0x10B10000,每秒数据量
0x20 - 0x21 2 1个short 数据块的调整值(按字节算)
0x22 - 0x4F      
0x50 - 0x53 4 4个char 标志位,“data”
0x54 - 0x57 4 1个int 语音数据大小,0x000105D8

Reference

  1. WAV(PCM)文件格式分析