【Audio】WAV音频文件格式结构解析

网上找的一些资料,和自己的调试经验,总结~

音频文件

链接: 提取码:73p1

WAV

WAV文件是在PC机平台上很常见的、最经典的多媒体音频文件,最早于1991年8月出现在Windows 3.1操作系统上,文件扩展名为WAV,是WaveFom的简写,也称为波形文件,可直接存储声音波形,还原的波形曲线十分逼真。WAV文件格式简称WAV格式是一种存储声音波形的数字音频格式,是由微软公司和IBM联合设计的,经过了多次修订,可用于Windows,Macintosh,Linix等多种操作系统,详述如下。

格式解析

(1)、RIFF区块
    以’RIFF’为标识 Size是整个文件的长度减去ID和Size的长度 Type是WAVE表示后面需要两个子块:Format区块和Data区块
typedef struct
{
    uint32_t ID;   /*  "RIFF" = 0x46464952 */
    uint32_t Size; /* file length - 8 */
    uint32_t Format;    /* WAVE = 0x45564157 */
} WavRIFF;
(2)、FORMAT区块
    以’fmt 为标识 Size表示该区块数据的长度(不包含ID和Size的长度) AudioFormat表示Data区块存储的音频数据的格式,PCM音频数据的值为1 NumChannels表示音频数据的声道数,1:单声道,2:双声道 SampleRate表示音频数据的采样率 ByteRate每秒数据字节数 = SampleRate * NumChannels * BitsPerSample / 8 BlockAlign每个采样所需的字节数 = NumChannels * BitsPerSample / 8 BitsPerSample每个采样存储的bit数,8:8bit,16:16bit,32:32bit
typedef struct
{
    uint32_t ID;	/* "fmt " = 0x20746D66 */
    uint32_t Size;
    uint16_t AudioFormat;
    uint16_t NumOfChannels;
    uint32_t SampleRate;
    uint32_t ByteRate;
    uint16_t BlockAlign;
    uint16_t BitsPerSample;
    uint16_t ByteExtraData;
} WavFMT;

NumChannels=2(双声道)、SampleRate = 44100Hz、BitsPerSample=16 ByteRate = 176400、BlockAlign = 4;

(3)、DATA区块
    以’data’为标识 Size表示音频数据的长度,N = ByteRate * seconds Data音频数据
typedef struct
{
    uint32_t ID;	/* "data" = 0x61746164 */
    uint32_t Size;
} WavDATA;

size = 0x05fdfd50 = 100531536 从data头到尾,一共刚好100531536;

经验分享 程序员 微信小程序 职场和发展