精华内容
下载资源
问答
  • WAV格式详解
    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)包含以下三个信息:

    名称大小类型端序含义
    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。
       以上步骤仅为逻辑推理得出,未经验证,但大致遵循以上步骤,如有错误,欢迎指正。
    更多相关内容
  • 本资源为标准的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:30
    wav格式报警铃声,共30多种声音,每个约20K大小,任意选用。
  • 包括ADPCM格式说明;wav文件格式分析详解;WAV文件格式分析与应用;wav音频格式
  • 在进行alsa和Linux的alsa测试驱动时,需要wav文件结果aplay和tinyplay来使用wav文件来播放,wav文件可以使用Adobe Audition CC 2018生成
  • 常用音效,常用铃声音效WAV格式打包下载
  • WAV 格式歌曲

    2016-04-20 16:45:14
    WAV 格式音频,超过60M,压缩后刚好。
  • 提示音.wav格式

    2018-11-16 15:24:06
    消息提示音,.wav格式,内附Java web调用方法类,亲测可用
  • wav文件格式详解

    2017-10-12 15:02:41
    wav文件格式详解的文档 音频开发的朋友可以看看 详细阐述了编码格式
  • wav格式音频测试文件 2分多
  • wav格式的报警声音

    2019-03-13 11:00:47
    报警声音wav格式,希望大家会喜欢,谢谢。
  • 96个报警铃音WAV格式

    2020-11-22 20:38:30
    96个报警铃音WAV格式,可用于各种报警设备开发,报警程序开发等,基本都是网络收集来的,应该是比较齐全的了
  • wav格式音频文件

    2016-10-12 17:27:06
    主要是几个不同的wav格式音频文件,用于解析wav文件头信息时需要用到,可以参考博客:Qt 之 解析wav文件的头信息(详细分析、对比不同wav文件的数据)...
  • 报警铃音WAV格式45个.zip
  • 中英文的 wav格式的语音。每段语音有20秒以上。很标准,可以做语音识别使用
  • 按键音素材wav格式.rar

    2021-03-31 10:25:48
    按键音素材wav格式
  • 8500个WAV格式的音效

    2019-03-27 17:56:46
    8500个WAV格式的音效Unity里面可以用。
  • 显示WAV的头文件格式

    2017-12-26 09:08:45
    VB代码显示WAV头文件格式和名称,可以查看WAV头文件的各个名称和数值
  • 分割WAV格式的软件

    2019-03-14 08:23:42
    分割WAV格式的软件,网上的资源,如果大量的分割需要注册,我是使用按大小分割,分割成两块,不需要注册,请按需下载!请按需下载!请按需下载!
  • 可将立体声WAV音频格式转换为C格式代码 用来下载调试播放
  • 因为想要读写pcm因此用python写了一个读pcm格式并将其转化为wav格式的程序,里面也包含有wav格式转换为pcm格式的程序。下载内容是一个压缩包,解压后有源码,有注释,有pcm格式的说明,有测试文件。
  • wav格式的各种提示音,包括来电提示,短消息,完成提示,cs提示,可以作为铃声,也可以用于开发,20中音效
  • 由于WAV采用PCM编码,音质也十分不错,于是考虑用STM32对WAV格式音频文件进行解码,上周末开始找资料和编程,其中也遇到了不少问题,不过功夫不负有心人,终还是顺利的跑起来了。先将资料和编程过程整理成本文,供...
  • 常用WAV格式报警铃声 ,可用于程序调用,或其他用途调用。
  • WAV格式音频文件,主要是小,方便测试, STM32上可以用来测试音频
  • 报警音频wav格式,你如果需要在APP内部播放这个铃声,那么可以下载这个文件
  • WAV文件格式资料合集

    2022-04-07 10:07:54
    关于WAV格式的资料合集,想深入学习单片机或嵌入式开发,或者感兴趣的同学可以学一下。 内容:1.wav文件格式分析详解2.WAV文件格式分析与应用3.wav音频格式4.IMA-ADPCM压缩和解压缩算法

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 51,729
精华内容 20,691
关键字:

wav什么格式