【数据压缩3】WAV格式文件分析

本文详细介绍了WAV格式文件的结构,包括RIFF文件格式、fmt子块和data子块的组成。通过具体实例分析了一个WAV文件,揭示了RIFF标头、fmt子块和data子块的关键参数,并提到了data部分前存在未明确解释的34字节拓展字段,引发对这部分数据含义的探讨。
摘要由CSDN通过智能技术生成

目录

WAV格式文件概述

关于RIFF文件格式

WAV文件内部结构

WAV格式文件具体实例分析

1.RIFF标头部分

2.fmt部分

3.data部分

问题


  • WAV格式文件概述

Waveform Audio Format(WAVE,又或者是因为.wav后缀而被大众所知的),它采用RIFF(Resource Interchange File Format)文件格式结构。通常用来保存PCM格式的原始音频数据,所以通常被称为无损音频。但是严格意义上来讲,wav也可以存储其它压缩格式的音频数据。

关于RIFF文件格式

  1. 构成RIFF文件的基本单位称之为块(chunk)。
  2. 每个RIFF文档是由若干个块构成。
  3. 每个块(chunk)由块标识、块长度及数据等三部分所组成。

WAV文件内部结构

(1)RIFF标头

0-3字节ChunkID包含ASCII格式的字母"RIFF",表明该文件为有效的 RIFF 格式文档
4-7字节ChunkSize从下一个字段首地址开始到文件末尾的总字节数。该字段的数值加 8 为当前文件的实际长度。
8-11字节format包含ASCII格式的字母"WAV",表明该文件是 WAV 格式文件

(2)fmt子块——描述声音数据的格式

12-15字节Subchunk1ID包含小写字符串"fmt "
16-19字节Subchunk1Sizefmt块的大小(不包含Subchunk1ID和Subchunk1Size所占字节),其数值取决于编码格式,可以是 16、 18 、20、40 等。
20-21字节AudioFormat音频数据的编码方式,1表示PCM编码
22-23字节NumChannels声道数,单声道为1,双声道为2
24-27字节SampleRate采样率(每秒采样数),如44100
28-31字节ByteRate音频数据传送速率,单位是字节。该数值为:SampleRate× NumChannels×BitsPerSample/8。播放软件利用此值可以估计缓冲区的大小。
32-33字节BlockAlign

采样帧大小(即每次采样的大小),单位是字节。该数值为:NumChannels × BitsPerSample/8。播放软件需要一次处理多个该值大小的字节数据,用该数值调整缓冲区。

34-35字节BitsPerSample存储每个采样值所用的二进制数位数,即记录每个声道的采样精度。常见的位数有 4、8、12、16、24、32。

(3)data子块——描述数据的大小和实际的声音数据

36-39字节Subchunk2ID包含字母“data”
40-43字节Subchunk2Size音频数据块的大小(不包含Subchunk2ID和Subchunk2Size所占字节)
44及以后字节Data实际的声音数据

 注:data字段不一定是从36字节开始,data之前可能还会有拓展字段

  • WAV格式文件具体实例分析

以下列wav文件为例进行分析:

 用二进制编辑器打开该文件:

1.RIFF标头部分

(1)第1-4字节:52 49 46 46 表示"RIFF”的ACSII字符,表明该文件为有效的 RIFF 格式文档
(2)第5-8字节:A6 88 E5 00 说明这个文件的数据大小,根据低位在前高位在后的原则,这串数据为0xE588A6,说明该文件大小为15042726+8=15042734字节。
打开文件属性可以验证:

(3) 第9-12字节:57 41 56 45 表示"WAV”的ACSII字符,表明该文件是 WAV 格式文件

2.fmt部分

(1)第13-16字节:66 6D 74 20 表示“fmt”的ASCII字符,是固定的
(2)第17-20字节:10 00 00 00 表示格式块长度,这串数据为0x00000010,表示块长度为16
(3)第21-22字节:01 00 这是一个WORD,表示编码格式为PCM
(4)第23-24字节:02 00 这是一个WORD,表示此文件为双声道文件
(5)第25-28字节:44 AC 00 00 表示采样频率,这串数据为0xAC44,表示采样频率为44100
(6)第29-32字节:10 B1 02 00 表示每秒数据量,这串数据为0x2B110,表示音频数据传送速率为176400,可以根据公式计算:SampleRate× NumChannels×BitsPerSample(根据后面可知为16)/8 = 44100×2×16/8=176400
(7)第33-34字节: 04 00 表示采样帧大小,这串数据为0x04,十进制数为4,也可以根据公式计算:NumChannels × BitsPerSample/8 = 2 × 16/8 = 4
(8)第35-36字节:10 00 表示每样本的数据位数,即16bit

3.data部分

(1)64 61 74 61:表示“data”的ASCII字符
(2)60 88 E5 00:表示音频数据块的大小,但是不包含Subchunk2ID和Subchunk2Size所占字节,这串数据为0xE58860,即音频数据块大小为15042656字节,与前面的整个文件数据数据大小15042726字节相差70字节,表明data前的头文件占70字节

  • 问题

本实例中data部分前fmt部分后有34字节的拓展字段,在查找资料的过程中,一般都没有这些拓展部分,这些拓展部分也不知道具体表示什么意思,期待读者们在评论区里跟小编讨论讨论^-^

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值