-
2022-01-23 17:10:13
概述
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)包含以下三个信息:名称 大小 类型 端序 含义 FOURCC 4 字符 大端 用于标识Chunk ID或chunk 类型,通常为Chunk ID Data Field Size 4 整形 小端 特别注意,该长度不包含其本身,以及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-0x03 4 字符 大端 "RIFF"块(0x52494646),标记为RIFF文件格式 0x04-0x07 4 整型 小端 块数据域大小(Chunk Size),即从下一个地址开始,到文件末尾的总字节数,或者文件总字节数-8。从0x08开始一直到文件末尾,都是ID为"RIFF"块的内容,其中会包含两个子块,"fmt “和"data” 0x08-0x0B 4 字符 大端 类型码(Form Type),WAV文件格式标记,即"WAVE"四个字母 0x0C-0x0F 4 字符 大端 "fmt "子块(0x666D7420),注意末尾的空格 0x10-0x13 4 整形 小端 子块数据域大小(SubChunk Size) 0x14-0x15 2 整形 小端 编码格式(Audio Format),1代表PCM无损格式 0x16-0x17 2 整形 小端 声道数(Channels),1或2 0x18-0x1B 4 整形 小端 采样率(Sample Rate) 0x1C-0x1F 4 整形 小端 传输速率(Byte Rate),每秒数据字节数,SampleRate * Channels * BitsPerSample / 8 0x20-0x21 2 整形 小端 每个采样所需的字节数BlockAlign,BitsPerSample*Channels/8 0x22-0x23 2 整形 小端 单个采样位深(Bits Per Sample),可选8、16或32 0x24-0x27 4 字符 大端 "data"子块 (0x64617461) 0x28-0x2B 4 整形 小端 子块数据域大小(SubChunk Size) 0x2C-eos N PCM 上表为典型的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-0x03 4 字符 大端 "RIFF"块(0x52494646),标记为RIFF文件格式 0x04-0x07 4 整型 小端 块数据域大小(Chunk Size),即从下一个地址开始,到文件末尾的总字节数,或者文件总字节数-8。从0x08开始一直到文件末尾,都是ID为"RIFF"块的内容,其中会包含两个子块,"fmt “和"data” 0x08-0x0B 4 字符 大端 类型码(Form Type),WAV文件格式标记,即"WAVE"四个字母 0x0C-0x0F 4 字符 大端 "fmt "子块(0x666D7420),注意末尾的空格 0x10-0x13 4 整形 小端 子块数据域大小(SubChunk Size),这里为0x12 0x14-0x15 2 整形 小端 编码格式(Audio Format),1代表PCM无损格式 0x16-0x17 2 整形 小端 声道数(Channels),1或2 0x18-0x1B 4 整形 小端 采样率(Sample Rate) 0x1C-0x1F 4 整形 小端 传输速率(Byte Rate),每秒数据字节数,SampleRate * Channels * BitsPerSample / 8 0x20-0x21 2 整形 小端 每个采样所需的字节数BlockAlign,BitsPerSample*Channels/8 0x22-0x23 2 整形 小端 单个采样位深(Bits Per Sample),可选8、16或32 0x24-0x25 2 0x26-不定 - - - 可选附加信息,标准RIFF Chunk 不定 4 字符 大端 "data"子块 (0x64617461) 不定 4 整形 小端 子块数据域大小(SubChunk Size) 不定 N PCM 如果一个无损WAV文件头部包含了附加信息,那么PCM音频所在的位置就不确定了,但由于附加信息也是一个子块(SubChunk),根据RIFF规范,该子块也必然记录着其长度信息,所以我们还是有办法能够动态计算出其位置,下面是计算步骤:
- 判断fmt块长度是否为18。
- 如果fmt长度为18,那么必然从0x26位置开始为附加信息块,0x30-0x33位置记录着该子块长度。
- 根据步骤2获取的子块长度,假定为N(16进制),那么PCM音频信息开始位置为:0x34 + N + 8。
以上步骤仅为逻辑推理得出,未经验证,但大致遵循以上步骤,如有错误,欢迎指正。
更多相关内容 -
标准wav格式的音频文件
2020-02-29 16:38:54本资源为标准的wav格式的音频资源,wav格式是音频中比较常见的格式,也是高清的音频数据,本资源供大家调试蓝牙音乐使用,如A2DP功能使用,对大家调试会有很大的帮助,欢迎从事音频和喜欢音频调试的朋友一起交流学习... -
铃音WAV格式.zip
2019-11-04 17:55:15资源包内有91个报警铃音文件,WAV格式支持C# SoundPlayer调用播放 -
45个报警铃音WAV格式
2020-07-26 20:43:38文件内含45个报警wav格式音频,纯音乐,可用于程序调用,编程,软件工程开发,MATLAB,用作开发系统报警铃声 -
wav格式报警铃声
2019-04-11 15:42:30wav格式报警铃声,共30多种声音,每个约20K大小,任意选用。 -
8,WAV文件格式说明_wav_wav文件格式说明_
2021-09-30 17:29:16包括ADPCM格式说明;wav文件格式分析详解;WAV文件格式分析与应用;wav音频格式 -
音频测试文件,wav格式
2020-10-20 15:11:46在进行alsa和Linux的alsa测试驱动时,需要wav文件结果aplay和tinyplay来使用wav文件来播放,wav文件可以使用Adobe Audition CC 2018生成 -
常用音效,常用铃声音效WAV格式打包下载.zip
2022-01-16 13:08:35常用音效,常用铃声音效WAV格式打包下载 -
WAV 格式歌曲
2016-04-20 16:45:14WAV 格式音频,超过60M,压缩后刚好。 -
提示音.wav格式
2018-11-16 15:24:06消息提示音,.wav格式,内附Java web调用方法类,亲测可用 -
wav文件格式详解
2017-10-12 15:02:41wav文件格式详解的文档 音频开发的朋友可以看看 详细阐述了编码格式 -
纯净wav格式朗诵音频文件,可用于音频测试
2021-04-21 11:18:12wav格式音频测试文件 2分多 -
wav格式的报警声音
2019-03-13 11:00:47报警声音wav格式,希望大家会喜欢,谢谢。 -
96个报警铃音WAV格式
2020-11-22 20:38:3096个报警铃音WAV格式,可用于各种报警设备开发,报警程序开发等,基本都是网络收集来的,应该是比较齐全的了 -
wav格式音频文件
2016-10-12 17:27:06主要是几个不同的wav格式音频文件,用于解析wav文件头信息时需要用到,可以参考博客:Qt 之 解析wav文件的头信息(详细分析、对比不同wav文件的数据)... -
报警铃音WAV格式45个.zip
2021-12-01 14:41:28报警铃音WAV格式45个.zip -
标准语音测试包_wav格式_中文_英文.zip
2021-03-11 12:22:25中英文的 wav格式的语音。每段语音有20秒以上。很标准,可以做语音识别使用 -
按键音素材wav格式.rar
2021-03-31 10:25:48按键音素材wav格式 -
8500个WAV格式的音效
2019-03-27 17:56:468500个WAV格式的音效Unity里面可以用。 -
显示WAV的头文件格式
2017-12-26 09:08:45VB代码显示WAV头文件格式和名称,可以查看WAV头文件的各个名称和数值 -
分割WAV格式的软件
2019-03-14 08:23:42分割WAV格式的软件,网上的资源,如果大量的分割需要注册,我是使用按大小分割,分割成两块,不需要注册,请按需下载!请按需下载!请按需下载! -
WAV转C格式 声音文件转换器
2019-02-27 16:40:33可将立体声WAV音频格式转换为C格式代码 用来下载调试播放 -
wav格式和pcm格式相互转换源代码
2018-05-11 08:49:57因为想要读写pcm因此用python写了一个读pcm格式并将其转化为wav格式的程序,里面也包含有wav格式转换为pcm格式的程序。下载内容是一个压缩包,解压后有源码,有注释,有pcm格式的说明,有测试文件。 -
wav格式的各种提示音,包括来电提示,短消息,完成提示,cs提示
2020-10-08 13:47:53wav格式的各种提示音,包括来电提示,短消息,完成提示,cs提示,可以作为铃声,也可以用于开发,20中音效 -
基于STM32的WAV音频格式播放器
2021-01-19 17:12:28由于WAV采用PCM编码,音质也十分不错,于是考虑用STM32对WAV格式音频文件进行解码,上周末开始找资料和编程,其中也遇到了不少问题,不过功夫不负有心人,终还是顺利的跑起来了。先将资料和编程过程整理成本文,供... -
WAV格式报警铃声(90个)
2018-08-29 14:04:19常用WAV格式报警铃声 ,可用于程序调用,或其他用途调用。 -
WAV格式音频文件,主要是小,方便测试
2019-07-12 16:20:38WAV格式音频文件,主要是小,方便测试, STM32上可以用来测试音频 -
45个报警铃音WAV格式.zip
2019-09-12 10:34:25报警音频wav格式,你如果需要在APP内部播放这个铃声,那么可以下载这个文件 -
WAV文件格式资料合集
2022-04-07 10:07:54关于WAV格式的资料合集,想深入学习单片机或嵌入式开发,或者感兴趣的同学可以学一下。 内容:1.wav文件格式分析详解2.WAV文件格式分析与应用3.wav音频格式4.IMA-ADPCM压缩和解压缩算法