WAV格式详解

news/2024/11/2 2:36:55/

概述

WAV即WAVE,是经典的Windows音频数据封装格式,由Microsoft开发。数据本身格式为PCM,也可以支持一些编码格式的数据,比如最近流行的AAC编码。如果是PCM,则为无损格式,文件会比较大,并且大小相对固定,可以使用以下公式计算文件大小。

FileSize = HeadSize + TimeInSecond * SampleRate * Channels * BitsPerSample / 8

其中HeadSize为WAV文件头部长度;SampleRate,即采样率,可选8000、16000、32000、44100或48000;Channels表示声道数量,通常为1或2;BitsPerSample代表单个Sample的位深,可选8、16以及32,其中32位时可以是float类型。
 WAV是一种极其简单的文件格式,如果对其结构足够熟悉,完全可以自己通过代码写入WAV文件,从而免去引入一些复杂中间库。特别是在对音频进行调试的时候,能提高效率,降低复杂度。
 WAV格式遵循RIFF规范,所有WAV都有一个文件头,记录着音频流的采样和编码信息。数据块的记录方式是小尾端(little-endian)。

RIFF

RIFF,全称Resource Interchange File Format,是一种按照标记区块存储数据的通用文件存储格式,多用于存储音频、视频等多媒体数据。Microsoft在Windows下的WAV、AVI等都是基于RIFF实现的。
 一个标准的RIFF规范规范文件,最小存储单位为“块”(Chunk),每个块(Chunk)包含以下三个信息:

名称大小类型端序含义
FOURCC4字符大端用于标识Chunk ID或chunk 类型,通常为Chunk ID
Data Field Size4整形小端特别注意,该长度不包含其本身,以及FOURCC
Data Field---数据域,如果Chunk ID为"RIFF"或"LIST",则开始四个字节为类型码

只有ID为"RIFF"或者"LIST"的块允许拥有子块(SubChunk)。RIFF文件的第一个块的ID必须是"RIFF",也就是说ID为"LIST"的块只能是子块(SubChunk),他们和各个子块形成了复杂的RIFF文件结构。
 RIFF数据域的的起始位置四个字节为类型码(Form Type),用于说明数据域的格式,比如WAV文件的类型码为"WAVE"。
 “LIST"块的数据域的起始位置也有一个四字节类型码(List Type),用于说明LIST数据域的数据内容。比如,类型码为"INFO"时,其数据域可能包括"ICOP”、"ICRD"块,用于记录文件版权和创建时间信息。

WAV

以最简单的无损WAV格式文件为例,此时文件的音频数据部分为PCM,比较简单,重点在于WAV头部。一个典型的WAV文件头部长度为44字节,包含了采样率,通道数,位深等信息,如下表所示。

偏移位置大小类型端序含义
0x00-0x034字符大端"RIFF"块(0x52494646),标记为RIFF文件格式
0x04-0x074整型小端块数据域大小(Chunk Size),即从下一个地址开始,到文件末尾的总字节数,或者文件总字节数-8。从0x08开始一直到文件末尾,都是ID为"RIFF"块的内容,其中会包含两个子块,"fmt “和"data”
0x08-0x0B4字符大端类型码(Form Type),WAV文件格式标记,即"WAVE"四个字母
0x0C-0x0F4字符大端"fmt "子块(0x666D7420),注意末尾的空格
0x10-0x134整形小端子块数据域大小(SubChunk Size)
0x14-0x152整形小端编码格式(Audio Format),1代表PCM无损格式
0x16-0x172整形小端声道数(Channels),1或2
0x18-0x1B4整形小端采样率(Sample Rate)
0x1C-0x1F4整形小端传输速率(Byte Rate),每秒数据字节数,SampleRate * Channels * BitsPerSample / 8
0x20-0x212整形小端每个采样所需的字节数BlockAlign,BitsPerSample*Channels/8
0x22-0x232整形小端单个采样位深(Bits Per Sample),可选8、16或32
0x24-0x274字符大端"data"子块 (0x64617461)
0x28-0x2B4整形小端子块数据域大小(SubChunk Size)
0x2C-eosNPCM

上表为典型的WAV头部格式,从0x00到0x2B总共44字节,从0x2C开始一直到文件末尾都是PCM音频数据。所以如果你已经知道了PCM的采样信息,那么可以直接跳过头部的解析,直接从0x2C开始读取PCM即可,但是对于另一些无损的WAV文件却是不行的。

WAV扩展

有一些WAV的头部并不仅仅只有44个字节,比如通过FFmpge编码而来的WAV文件头部信息通常大于44个字节。这是因为根据WAV规范,其头部还支持携带附加信息,所以只按照44个字节的长度去解析WAV头部信息是不一定正确的,还需要考虑附加信息。那么如何知道一个WAV文件头部是否包含附加信息呢?
 根据"fmt "子块长度来判断即可。

如果fmt SubChunk Size等于0x10(16),表示头部不包含附加信息,即WAV头部信息长度为44;如果等于0x12(18),则包含附加信息,此时头部信息长度大于44。

当WAV头部包含附加信息时,fmt SubChunk Size长度为18,并且紧随是另一个子块,这个包含了一些自定义的附加信息,接着往下才是"data"子块,格式如下:

偏移位置大小类型端序含义
0x00-0x034字符大端"RIFF"块(0x52494646),标记为RIFF文件格式
0x04-0x074整型小端块数据域大小(Chunk Size),即从下一个地址开始,到文件末尾的总字节数,或者文件总字节数-8。从0x08开始一直到文件末尾,都是ID为"RIFF"块的内容,其中会包含两个子块,"fmt “和"data”
0x08-0x0B4字符大端类型码(Form Type),WAV文件格式标记,即"WAVE"四个字母
0x0C-0x0F4字符大端"fmt "子块(0x666D7420),注意末尾的空格
0x10-0x134整形小端子块数据域大小(SubChunk Size),这里为0x12
0x14-0x152整形小端编码格式(Audio Format),1代表PCM无损格式
0x16-0x172整形小端声道数(Channels),1或2
0x18-0x1B4整形小端采样率(Sample Rate)
0x1C-0x1F4整形小端传输速率(Byte Rate),每秒数据字节数,SampleRate * Channels * BitsPerSample / 8
0x20-0x212整形小端每个采样所需的字节数BlockAlign,BitsPerSample*Channels/8
0x22-0x232整形小端单个采样位深(Bits Per Sample),可选8、16或32
0x24-0x252
0x26-不定---可选附加信息,标准RIFF Chunk
不定4字符大端"data"子块 (0x64617461)
不定4整形小端子块数据域大小(SubChunk Size)
不定NPCM

如果一个无损WAV文件头部包含了附加信息,那么PCM音频所在的位置就不确定了,但由于附加信息也是一个子块(SubChunk),根据RIFF规范,该子块也必然记录着其长度信息,所以我们还是有办法能够动态计算出其位置,下面是计算步骤:

  1. 判断fmt块长度是否为18。
  2. 如果fmt长度为18,那么必然从0x26位置开始为附加信息块,0x30-0x33位置记录着该子块长度。
  3. 根据步骤2获取的子块长度,假定为N(16进制),那么PCM音频信息开始位置为:0x34 + N + 8。
     以上步骤仅为逻辑推理得出,未经验证,但大致遵循以上步骤,如有错误,欢迎指正。

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

相关文章

音频存储格式wav介绍与解析

音频格式 音频格式中 规定了使用多少 bits 来对信号进行编码。 无压缩的格式无损压缩有损压缩 1. wav 音频格式介绍 微软 和 IBM 于 1991 年 提出的资源交换的文件格式 RIFF( resource interchange File Format); wav 是 属于RIFF 中的一…

wav音频文件格式

在做音频信号采集或音频信号分析时会经常遇到wav格式的文件,本章将介绍wav文件的格式。wav是基于资源交换文件格式(RIFF(Resource Interchange File Format))的应用之一。RIFF是一种带标签的文件结构,其可以…

wav数据格式详解

1. 音频简介 经常见到这样的描述: 44100HZ 16bit stereo 或者 22050HZ 8bit mono 等等. 44100HZ 16bit stereo: 每秒钟有 44100 次采样, 采样数据用 16 位(2字节)记录, 双声道(立体声); 22050HZ 8bit mono: 每秒钟有 22050 次采样, 采样数据用 8 位(1字节)记录, 单声道; 当然…

WAV音频文件

WAV音频文件 象棋小子 1048272975 WAV是一种保存音频信息的文件格式,广泛应用于Windows及其应用程序中,如今主流的音频播放器都支持WAV音频文件的播放。 1. WAV音频格式 WAV是录音时用的标准Windows文件格式,文件扩展名为”.wav”&…

WAV格式文件分析

WAV格式文件分析 目录 WAV格式文件分析概述一、WAV格式文件1、波形声音文件格式 WAV2、音频文件参数简介 二、文件结构1、WAV文件的文件头2、WAV文件的数据体 三、WAV格式文件数据体结构1、RIFF Chunk区块2、Format Chunk区块3、DATA区块 总结 参考及引用材料 概述 WAV格式目前…

音频格式wav与mp3和wma的区别与音质

MP3 全称是Moving Picture Experts Group Audio Layer III。简单的说,MP3就是一种音频压缩技术,由于这种压缩方式的全称叫MPEG Audio Layer3,所以人们把它简称为MP3。 wma 是微软在制订的音频压缩文件格式,比mp3标准晚&#xf…

wav文件格式分析详解

wav文件格式分析详解 一、综述 WAVE文件作为多媒体中使用的声波文件格式之一,它是以RIFF格式为标准的。RIFF是英文Resource Interchange File Format的缩写,每个WAVE文件的头四个字节便是“RIFF”。 WAVE文件是由若干个Chunk组成的。按照在文件中的…

wav文件格式详解

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