文章目录
WAV
简介
WAVE文件 是最常用的数字化声音文件格式之一
扩展名为 .wav 符合RIFF文件规范
适用Windows平台
支持MS ADPCM 、CCITT A LAW等压缩运算法
支持多种音频数字 取样频率和声道
(MS ADPCM 针对16bit或更高声音波形数据的一种有损压缩算法,它将声音流中每次采样的16bit数据以4bit存储 即压缩比1:4,ADPCM针对连续的波形数据,保存波形的变化情况,已达到描述整个波形的目的
CCITT A LAW 彩铃格式 A率压缩算法
)
组成
WAV由若干Chunk组成
包括①RIFF WAV Chunk 、②Format Chunk、③Fact Chunk和④Data Chunk
各部分由块标识符(4ASCLL)、数据大小和数据三部分组成
RIFF Chunk
//RIFF块
typedef_packed struct
{
u32 ChunkID;
u32 ChunkSize; //集合大小 文件总大小8
u32 Format; //集合大小 WAVE 即0X45564157
}ChunkRIFF;
Format块
//fmt 块
typedef _packed struct
{
u32 ChunkID; //chunk id 固定fmt ,即0X2074D66
u32 ChunkSize; //子集合大小
u16 AudioFormat; //音频格式 表示线性PCM
u16 NumOfChannels; //通道数量 1:单声道 2:双声道
u32 SampleRate; //采样率0X1F40 表示8Khz
u32 ByteRate; //字节速率 =采样率*通道数*(ADC位数/8)
u16 BlockAlign; //块对齐(字节)
u16 BitsPerSamples; //单个采样的位数 16位PCM 设置为16
u16 ByteExtraData; //附加数据字节2个
}ChunkFMT;
Fact Chunk
非PCM格式的文件中 一般会在Format结构后加入一个FACT块
typedef _packed struct
{
u32 ChunkID ; //chunk id
u32 ChunkSize; //子集合大小 这里为4
u32 DataFactSize; //数据转换为PCM格式后的大小
}ChunkFACT;