WAV格式解析

news/2025/2/12 8:20:29/

 

 WAV为微软公司(Microsoft)开发的一种声音文件格式,它符合RIFF(Resource Interchange File Format)文件规范,用于保存Windows平台的音频信息资源,被Windows平台及其应用程序所广泛支持,

该格式也支持MSADPCM,CCITT A LAW等多种压缩运算法,支持多种音频数字,取样频率和声道,标准格式化的WAV文件和CD格式一样,也是44.1K的取样频率,16位量化数字,因此在声音文件质量和CD相差无几。

 

WAVE文件为了与RIFF保持一致,数据采用“chunk”来存储。

因此,如果想要在WAVE文件中补充一些新的信息,只需要在在新chunk中添加信息,而不需要改变整个文件。这也是设计IFF最初的目的。

对于一个基本的WAVE文件而言,最少包含以下三种Chunk:

以上三个chunk 顺序固定,对于其它的chunk,顺序没有严格的限制。

 

具体格式如下:

 

然而,所有基于压缩编码的WAV文件必须含有fact块。此外所有其它块都是可选的。fmt,Data及fact块均为RIFF块的子块。WAV文件的文件格式类型标识符为“WAVE”。

 

 

各个chunk中字段的意义如下:

RIFF chunk

IDbig-endianFOURCC 值为'R' 'I' 'F' 'F'
Sizelittle-endiandata字段中数据的字节数
Databig-endian包含其它的chunk

 

 

 

 

 

 

Format chunk

IDbig-endian   FOURCC 值为 'f' 'm' 't' ' '
Sizelittle-endian     数据字段包含数据的大小。如无扩展块,则值为16;有扩展块,则值为 16 + 2字节扩展块长度 + 扩展块长度或者值为18(只有扩展块的长度为2字节,值为0)
Datalittle-endianformat_tag2字节,表示音频数据的格式。如值为1,表示使用PCM格式。
little-endianchannels2字节,声道数。值为1则为单声道,为2则是双声道。
little-endiansamples_per_sec采样率,主要有22.05KHz,44.1kHz和48KHz。
little-endianbytes_per sec音频的码率,每秒播放的字节数。samples_per_sec * channels * bits_per_sample / 8,可以估算出使用缓冲区的大小
little-endianblock_align数据块对齐单位,一次采样的大小,值为声道数 * 量化位数 / 8,在播放时需要一次处理多个该值大小的字节数据。
little-endianbits_per_sample音频sample的量化位数,有16位,24位和32位等。
 cbSize扩展区的长度
 扩展格式块内容22字节,具体介绍请看下面

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 其中 format_tag 可以取如下值:

格式代码格式名称fmt 块长度fact 块
1(0x0001)PCM/非压缩格式16 
2(0x0002Microsoft ADPCM18
3(0x0003)IEEE float18
6(0x0006)ITU G.711 a-law18
7(0x0007)ITU G.711 μ-law18
49(0x0031)GSM 6.1020
64(0x0040)ITU G.721 ADPCM 
65,534(0xFFFE)见子格式块中的编码格式40 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

其中的扩展格式块:

当WAV文件使用的不是PCM编码方式是,就需要扩展格式块,它是在基本的Format chunk又添加一段数据。

该数据的前两个字节,表示的扩展块的长度。紧接其后的是扩展的数据区,含有扩展的格式信息,其具体的长度取决于压缩编码的类型。

当某种编码方式(如 ITU G.711 a-law)使扩展区的长度为0,扩展区的长度字段还必须保留,只是其值设置为0。

扩展区的各个字节的含义如下:

Size扩展区的数据长度 ,可以为0或22
valid_bits_per_sample有效的采样位数,最大值为采样字节数 * 8。可以使用更灵活的量化位数,通常音频sample的量化位数为8的倍数,但是使用了WAVE_FORMAT_EXTENSIBLE时,量化的位数有扩展区中的valid bits per sample来描述,可以小于Format chunk中制定的bits per sample
channle mask4字节,声道掩码
sub format16字节,GUID,include the data format code,数据格式码。

 

 

 

在Format chunk中的format_tag设置为0xFFFE时,表示使用扩展区中的sub_format来决定音频的数据的编码方式。在以下几种情况下必须要使用WAVE_FORMAT_EXTENSIBLE

  • PCM数据的量化位数大于16
  • 音频的采样声道大于2
  • 实际的量化位数不是8的倍数
  • 存储顺序和播放顺序不一致,需要指定从声道顺序到声卡播放顺序的映射情况。

 

 

Fact chunk (可选)

IDFOURCC 值为 'f' 'a' 'c' 't'
Size数据域的长度,4(最小值为4)
Data每个声道的采样总数 4字节

 

 

 

 

 

 

Data chunk

IDFOURCC 值为'd' 'a' 't' 'a'
Size数据域的长度
Data

具体的音频数据存放在这里

 

 

 

 

 

 

Data块中存放的是音频的采样数据。每个sample按照采样的时间顺序写入,对于使用多个字节的sample,使用小端模式存放(低位字节存放在低地址,高位字节存放在高地址)。对于多声道的sample采用交叉存放的方式。例如:立体双声道的sample存储顺序为:声道1的第一个sample,声道2的第一个sample;声道1的第二个sample,声道2的第二个sample;依次类推....。对于PCM数据,有以下两种的存储方式:

  • 单声道,量化位数为8,使用偏移二进制码
  • 除上面之外的,使用补码方式存储。

 

 

描述WAVE文件的基本单元是“Sample”,一个Sample代表采样一次得到的数据。因此如果用44KHz采样,将在一秒中得到44000个Sample。

每个Sample可以用8位、24位,甚至32位表示(位数没有限制,只要是8的整数倍即可),位数越高,音频质量越好。

注意:8位代表无符号的数值,而16位或16位以上代表有符号的数值

 

 

每秒数据大小(字节)=采样率 * 声道数 * sample比特数 / 8

 

转载于:https://www.cnblogs.com/zoneofmine/p/10850465.html


http://www.ppmy.cn/news/576577.html

相关文章

WAV文件格式分析(附AVI文件格式分析)

目录 一、WAV格式简介 二、WAV格式结构 1.RIFF chunk 2.Format chunk 3.Data chunk 三、AVI文件格式分析 Q1:音频和视频的数据是如何放置的?交织放置or连续放置? Q2:一个视频帧大约占据多少字节?一个音频数据块…

音频处理-2 WAV格式

后续要将流量中的音频数据转为WAV格式文件,所以本节重点说下WAV格式。 WAV文件是在PC机平台上很常见的、最经典的多媒体音频文件,最早于1991年8月出现在Windows 3.1操作系统上,文件扩展名为WAV,是WaveFom的简写,也称为波形文件,可直接存储声音波形,还原的波形曲线十…

[音视频] wav 格式

wav 格式结构 WAV文件遵循RIFF规则,其内容以区块(chunk)为最小单位进行存储。WAV文件一般由3个区块组成:RIFF chunk、Format chunk和Data chunk。另外,文件中还可能包含一些可选的区块,如:Fact…

wav文件详解

wav文件详解 分类: 视频音频图像处理算法 2013-10-10 13:50 66人阅读 评论(0) 收藏 举报 音频 wav 格式介绍 ffmpeg 目录(?)[] 工具 我们这里使用的工具有ffmpeg, cooledit, ultraedit。 音频文件 我们以这音频文件为介绍例子 文件链接http://pan.baidu.com/s…

读写wav格式文件

读写wav格式文件 本文所有相关代码(包括未来的)均可在该代码库找到 https://gitcode.net/PeaZomboss/learnaudios 本文代码在MinGW-w64 gcc/g和MSVC(vs2022)环境下编译测试通过。 MinGW gcc/g可以在以下链接下载: https://github.com/niX…

wav音频文件格式解析【个人笔记】(自用)

目录 1. WAV格式2. WAV的二进制格式解析 2.1 WAV文件格式2.2 C语言解析wav文件3. WAV文件语音数据的组织结构4. 总结 回到顶部 1. WAV格式 wav是微软开发的一种音频文件格式,注意,wav文件格式是无损音频文件格式,相对于其他音频格式文件数…

灵动微32位MCU适用于家电应用领域的MCU产品推荐

伴随着移动互联网的发展,智能家居产品和解决方案也已经在互联网、地产、运营商等领域得到广泛推广,在电力负荷高峰期通过电网与智能家居平台和产品互动将为家电和上下游企业带来新的机遇与挑战。智能,节能,便捷将是家电未来的主要…

创维电视天赐系统成功安装第三方应用教程

转载自原教程https://www.sohu.com/a/121650375_415937 天赐系统可以先打开ADB,然后通过悟空遥控器或者电视应用安装器进行推送安装软件,具体方法如下: 一、打开电视【系统设置】,选择【本机信息】,然后遥控器按“上…