WAV 文件格式分析
WAV格式简介
WAVE(Waveform Audio File Format)是
微软专门为Windows系统定义的波形文件格式(Waveform Audio),由于其扩展名为"*.wav"。
波形文件(.wav)文件头示例
文件头中的关键值包括:
音频类型:WAVE
调制方法:以PCM为例(脉冲编码调制)
声道个数:2,大多数音频文件都有两个声道
采样频率:每个声道44 100 (根据奈奎斯特定理,每次采样使用的字节数和位数)
头文件下方是连续的数据信息,而数据长度是规定好的4字节的16进制数 04-5C-67-00 。
推导每个声道的采样值:
(1)大小端序转换
交换 04-5C-67-00 的字节和字,将小端序转换成大端序;
得到实际长度为 00-67-5C-04(16进制)-> 6 737 476(十进制)
(2)双声道分解
因为音频又两个声道,所以把上边的结果除以2,得每个声道 3 386 882个字节。
每个记录样本大小位16位(2字节)
因此每个声道得采样值为:1 693 441。
此外,例如音频时长38s,可用38s x 44 100 样例/s,求得采样值(精度不准)
格式解析
WAV
文件遵循RIFF规则,其内容以区块(chunk
)为最小单位进行存储。
WAV
文件一般由3个区块组成:RIFF chunk
、Format chunk
和Data chunk
。
另外,文件中还可能包含一些可选的区块,如:Fact chunk
、Cue points chunk
、Playlist chunk
、Associated data list chunk
等。
RIFF区块
名称 | 偏移地址 | 字节数 | 端序 | 内容 |
---|---|---|---|---|
ID | 0x00 | 4Byte | 大端 | 'RIFF' (0x52494646) |
Size | 0x04 | 4Byte | 小端 | fileSize - 8 |
Type | 0x08 | 4Byte | 大端 | 'WAVE'(0x57415645) |
- 以
'RIFF'
为标识 -
Size
是整个文件的长度减去ID
和Size
的长度 -
Type
是WAVE
表示后面需要两个子块:Format
区块和Data
区块
FORMAT区块
名称 | 偏移地址 | 字节数 | 端序 | 内容 |
---|---|---|---|---|
ID | 0x00 | 4Byte | 大端 | 'fmt ' (0x666D7420) |
Size | 0x04 | 4Byte | 小端 | 16 |
AudioFormat | 0x08 | 2Byte | 小端 | 音频格式 |
NumChannels | 0x0A | 2Byte | 小端 | 声道数 |
SampleRate | 0x0C | 4Byte | 小端 | 采样率 |
ByteRate | 0x10 | 4Byte | 小端 | 每秒数据字节数 |
BlockAlign | 0x14 | 2Byte | 小端 | 数据块对齐 |
BitsPerSample | 0x16 | 2Byte | 小端 | 采样位数 |
- 以
'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
DATA区块
名称 | 偏移地址 | 字节数 | 端序 | 内容 |
---|---|---|---|---|
ID | 0x00 | 4Byte | 大端 | 'data' (0x64617461) |
Size | 0x04 | 4Byte | 小端 | N |
Data | 0x08 | NByte | 小端 | 音频数据 |
- 以
'data'
为标识 -
Size
表示音频数据的长度,N = ByteRate * seconds -
Data
音频数据
小端存储
WAV
文件以小端形式来进行数据存储。
大端模式:数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中;
小端模式:数据的低位保存在内存的低地址中,而数据的高位,保存在内存的高地址中。
PCM数据在WAV
文件中的bit位排列方式
PCM数据类型 | 采样 | 采样 |
---|---|---|
8Bit 单声道 | 声道0 | 声道0 |
8Bit 双声道 | 声道0 | 声道1 |
16Bit 单声道 | 声道0低位,声道0高位 | 声道0低位,声道0高位 |
16Bit 双声道 | 声道0低位,声道0高位 | 声道1低位,声道1高位 |
推荐阅读
-
电力通信网络的联网分析
-
分析智能家居通信网络架构系统
-
华为 HPLC 模块功率载波收发器全拆解原理分析
-
RS485/Power Carrier/NB/LoRa/ZigBee 智能灯控制器对比分析
-
2020 年中国电力线载波通信行业发展现状及竞争格局分析,国家电网持续推进电网转型升级,配电自动化覆盖率达 90%"图"。
-
国家电网泛在电力物联网分析--架构形式
-
分析问题,思考 "检索 "TraceId 的过程。
-
深入分析 Java 中的 MyBatis Plus 注释 @InterceptorIgnore:拦截器行为的优雅控制
-
追风筝的人》分析:善与恶、背叛与救赎不过是一枚硬币的两面
-
JavaMelody 组件 XXE 漏洞 (CVE-2018-15531) 漏洞分析报告