wav音频格式解析

wav音频格式解析 本文参考: WAVE文件格式解析 - Tocy - 博客园 (cnblogs.com) Wave File Specifications (mcgill.ca) 简介 WAV文件是一种常见的音频文件格式,其结构遵循RIFF(Resource Interchange File Format)规范,这种规范来源于微软和IBM,我们可以在参考博客中找到相关规范文档。 WAV文件是由chunk组成的,这些chunk通常由ckID、cksize、chunk data组成。 文件结构 首先是很经典的结构图: 这张图中有很多值得注意的地方: 在最左边表明了当前的字段的编码属于小端模式还是大端模式。 图中以不同的颜色区分了不同的chunk,而其中的subchunk表明了这些chunk之间的关系。 每个chunk都有其承载的信息内容,这些信息的组织也有相关规范。 接下来分别分析其中的chunk 本文中分析hex文件的截图来源于HexEd.it — 基于浏览器的十六进制编辑器 RIFF RIFF字段是每个WAV文件都有的部分 field Length Contents ckid 4 “RIFF” cksize 4 4+n WAVEID 4 “WAVE” WAVE chunks n 包括格式信息和数据块 这张表列出了RIFFchunk的结构,从中可知: 其他的信息都在WAVE chunk中,即开始的图中的subchunk部分。 同时,我们也知道这里的4+n指的是WAVEID的4字节和WAVE chunks的n字节,不包括ckid和cksize。 RIFF和WAVE属于固定的内容,是不会变的。 上图是对一个wav的文件放入16进制编辑器分析的截图,我们可以很容易看到转化为ASCII的RIFF和WAV字段。 fmt chunk fmt块是一个可选的块,但是其中包含很多重要的信息,包括channels、sample pre seconds、bits per sample等,所以一般的文件都会有这个块,没有这部分信息很多的播放器会无法解析播放。 Field Length Contents ckID 4 “fmt " cksize 4 16/18/40 wFormatTag 2 Format code 对应不同的音频编码 nChannels 4 声道数 nSamplePreSecond 4 采样率 nAvgBytesPerSec 4 音频码率 nBlockAlign 2 音频数据块大小 wBitsPerSample 2 量化位数,比如8bit、16bit cbSize 2 extension扩展块的大小(0 or 22) wValidBitsPerSample 2 有效位数 dwChannelMask 4 声道掩码,比如左声道、右声道 SubFormat 16 GUID,数据格式码 该表格中表示了许多重要信息,我们要注意以下几点: ...

August 18, 2026 · 2 min · 255 words · hy