WAV文件格式详解

2023-10-31



.概述

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


常见的声音文件主要有两种,分别对应于单声道(11.025KHz 采样率、8Bit 的采样值)和双声道(44.1KHz 采样率、16Bit 的采样值)。采样率是指:声音信号在“模→数”转换过程中单位时间内采样的次数。采样值是指每一次采样周期 
内声音模拟信号的积分值。

对于单声道声音文件,采样数据为八位的短整数(short int 00H-FFH);而对于双声道立体声声音文件,每次采样数据为一个16位的整数(int),高八位和低八位分别代表左右两个声道。



1. 音频简介

 

经常见到这样的描述: 44100HZ 16bit stereo 或者 22050HZ 8bit mono 等等.

44100HZ 16bit stereo: 每秒钟有 44100 次采样, 采样数据用 16 位(2字节)记录, 双声道(立体声);

22050HZ 8bit  mono: 每秒钟有 22050 次采样, 采样数据用 8 位(1字节)记录, 单声道;

 

当然也可以有 16bit 的单声道或 8bit 的立体声, 等等。

 

采样率是指:声音信号在“模→数”转换过程中单位时间内采样的次数。采样值是指每一次采样周期内声音模拟信号的积分值。

 

对于单声道声音文件,采样数据为八位的短整数(short int 00H-FFH);

而对于双声道立体声声音文件,每次采样数据为一个16位的整数(int),高八位(左声道)和低八位(右声道)分别代表两个声道。

 

人对频率的识别范围是 20HZ - 20000HZ, 如果每秒钟能对声音做 20000 个采样, 回放时就足可以满足人耳的需求. 所以 22050 的采样频率是常用的, 44100已是CD音质, 超过48000的采样对人耳已经没有意义。这和电影的每秒 24 帧图片的道理差不多。

 

每个采样数据记录的是振幅, 采样精度取决于储存空间的大小:

1 字节(也就是8bit) 只能记录 256 个数, 也就是只能将振幅划分成 256 个等级;

2 字节(也就是16bit) 可以细到 65536 个数, 这已是 CD 标准了;

4 字节(也就是32bit) 能把振幅细分到 4294967296 个等级, 实在是没必要了.

如果是双声道(stereo), 采样就是双份的, 文件也差不多要大一倍.

 

这样我们就可以根据一个 wav 文件的大小、采样频率和采样大小估算出一个 wav 文件的播放长度。

 

譬如 "Windows XP 启动.wav" 的文件长度是 424,644 字节, 它是 "22050HZ / 16bit / 立体声" 格式(这可以从其 "属性->摘要" 里看到),

那么它的每秒的传输速率(位速, 也叫比特率、取样率)是 22050*16*2 = 705600(bit/s), 换算成字节单位就是 705600/8 = 88200(字节/秒), 
播放时间:424644(总字节数) / 88200(每秒字节数) ≈ 4.8145578(秒)。

但是这还不够精确, 包装标准的 PCM 格式的 WAVE 文件(*.wav)中至少带有 42 个字节的头信息, 在计算播放时间时应该将其去掉, 
所以就有:(424644-42) / (22050*16*2/8) ≈ 4.8140816(秒). 这样就比较精确了.

 

关于声音文件还有一个概念: "位速", 也有叫做比特率、取样率, 譬如上面文件的位速是 705.6kbps 或 705600bps, 其中的 b 是 bit, ps 是每秒的意思;

 

压缩的音频文件常常用位速来表示, 譬如达到 CD 音质的 MP3 是: 128kbps / 44100HZ.




2.格式解析

WAV文件遵循RIFF规则,其内容以区块(chunk)为最小单位进行存储。WAV文件一般由3个区块组成:RIFF chunkFormat chunkData chunk。另外,文件中还可能包含一些可选的区块,如:Fact chunkCue points chunkPlaylist chunkAssociated data list chunk等。
本文将只介绍RIFF chunkFormat chunkData chunk


常见的wave文件的格式图示

 

2.1 RIFF区块

名称 偏移地址 字节数 端序 内容
ID 0x00 4Byte 大端 'RIFF' (0x52494646)
Size 0x04 4Byte 小端 fileSize - 8
Type 0x08 4Byte 大端 'WAVE'(0x57415645)
  • 'RIFF'为标识
  • Size是整个文件的长度减去IDSize的长度
  • TypeWAVE表示后面需要两个子块:Format区块和Data区块

2.2 FORMAT区块

名称 偏移地址 字节数 端序 内容
ID 0x00 4Byte 大端 'fmt ' (0x666D7420)
Size 0x04 4Byte 小端 16
AudioFormat 0x08 2Byte 小端 音频格式
NumChannels 0x0A 2Byte 小端 声道数
SampleRate 0x0C 4Byte 小端 采样率
ByteRate 0x10 4Byte 小端 每秒数据字节数
BlockAlign 0x14 2Byte 小端 数据块对齐
BitsPerSample 0x16 2Byte 小端 采样位数
  • 'fmt '为标识
  • Size表示该区块数据的长度(不包含IDSize的长度)
  • AudioFormat表示Data区块存储的音频数据的格式,PCM音频数据的值为1
  • NumChannels表示音频数据的声道数,1:单声道,2:双声道
  • SampleRate表示音频数据的采样率
  • ByteRate每秒数据字节数 = SampleRate * NumChannels * BitsPerSample / 8
  • BlockAlign每个采样所需的字节数 = NumChannels * BitsPerSample / 8
  • BitsPerSample每个采样存储的bit数,8:8bit,16:16bit,32:32bit

[注意] 这个区域只需要关心 NumChannels SampleRate BitsPerSample 三个参数就可以了,其它的都是依据这三个计算出来的。

2.3 DATA区块

名称 偏移地址 字节数 端序 内容
ID 0x00 4Byte 大端 'data' (0x64617461)
Size 0x04 4Byte 小端 N
Data 0x08 NByte 小端 音频数据
  • 'data'为标识
  • Size表示音频数据的长度,N = ByteRate * seconds
  • Data音频数据

对于Data块,根据声道数和采样率的不同情况,布局如下(每列代表8bits):

1. 8 Bit 单声道:

采样1 采样2
数据1 数据2

2. 8 Bit 双声道

采样1 采样2
声道1数据1 声道2数据1 声道1数据2 声道2数据2

1. 16 Bit 单声道:

采样1 采样2
数据1低字节 数据1高字节 数据1低字节 数据1高字节

2. 16 Bit 双声道

采样1  
声道1数据1低字节 声道1数据1高字节 声道2数据1低字节 声道2数据1高字节
采样2      
声道1数据2低字节 声道1数据2高字节 声道2数据2低字节 声道2数据2高字节

 

下面我们看一个具体的例子,声音文件如下:

52 49 46 46 24 08 00 00 57 41 56 45 
66 6d 74 20 10 00 00 00 01 00 02 00 
22 56 00 00 88 58 01 00 04 00 10 00 
64 61 74 61 00 08 00 00 00 00 00 00 
24 17 1e f3 3c 13 3c 14 16 f9 18 f9 
34 e7 23 a6 3c f2 24 f2 11 ce 1a 0d 

对应的分析如下图所示:

untitled


3. 小端存储

WAV文件以小端形式来进行数据存储。

所谓的大端模式,是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中;
所谓的小端模式,是指数据的低位保存在内存的低地址中,而数据的高位保存在内存的高地址中。


参考:

wave文件(*.wav)格式、PCM数据格式

http://www.cnblogs.com/cheney23reg/archive/2010/08/08/1795067.html



WAVE 文件格式分析


WAV文件格式详解

https://www.jianshu.com/p/947528f3dff8


WAVE PCM soundfile format

http://soundfile.sapp.org/doc/WaveFormat/


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WAV文件格式详解 的相关文章

  • Wwise指引贴

    几种音频软件的比较 Criware音频引擎跟Wwise在功能上有什么直接的区别么 为什么很多大厂都选择Wwise
  • 音频系统POP音的原理和解决方法

    音频系统POP音的原理和解决方法 目录 文章目录 音频系统POP音的原理和解决方法 目录 音频IC与功放IC的电源时序与功能模块使能时序 功放IC输入端INP与INN的阻抗匹配 增大VBIAS滤波电容 BTL输出和SE输出 减小输出端耦合电
  • 【C】借助DirectSound进行流的形式无缝播放的例子

    DirectSound是DirectX的一个组件 用于播放声音 BGM等 和DirectMusic不一样 DirectSound用于播放波形声音 WAV无损等 而不是midi音乐 通常大家使用DirectSound是直接把一个声波数据全部载
  • 实时音频编程(一)

    系列文章目录 实时音频编程 一 实时音频编程 二 实践与技巧 文章目录 系列文章目录 简介 实时系统 实时系统的分类 实时音频系统 什么会产生 glitch 阻塞 算法的最坏时间复杂度 锁 不使用锁的第一个原因 优先级倒置 不使用锁的第二个
  • 运用Microsoft.DirectX.DirectSound和Microsoft.DirectX实现简单的录音功能

    1 首先要使用Microsoft DirectX DirectSound和Microsoft DirectX这两个dll进行录音 需要先安装microsoft directx 9 0cz这个组件 百度云盘下载地址 http pan baid
  • AMR 文件解析及编解码流程

    CONTENT AMR简介 AMR 话音质量评定 AMR 文件结构解析 AMR 帧结构解析 AMR 帧读取算法 AMR 解码原理及流程 AMR 模式选择自适应机制 一 AMR 简介 基于新的网络和新的要求 无论是从节省传输频带资源 还是保持
  • Android Audio系统框架

    Audio System 二 之 Audio系统框架 二 Linux Audio系统框架 2 1 Application 层 2 2 Framework 层 2 3 Libraries 层 2 4 HAL 层 2 5 Tinyalsa 层
  • BES 的蓝牙串口SPP数据收发实验

    1
  • A²B汽车音频总线介绍

    A B使远程I S TDM成为可能 I S是飞利浦公司为数字音频设备之间的音频数据传输而制定的一种总线标准 该总线专责于设备之间的数据传输 广泛应用于各种多媒体系统 I C是两线式串行总线 用于连接微控制器及其外围设备 简单来说就是I C传
  • 六、Audio-ALSA架构中的codec

    一 codec简介 处理器如果既想 听到 外界的声音 又想向外界传达自己的 心声 那么就需要同时用到 DAC 和 ADC 这两款芯片 那是不是买两颗 DAC 和 ADC 芯片就行了呢 答案肯定是可以的 但是音频不单单是能出声 能听到就行 我
  • AMR文件格式分析

    最近在传输手机录音时 遇到了AMR编码的问题 开始以为可以任意截断amr文件 加个文件头就可以播放的 后来发现是有问题 这样得到的amr音频有些不能正常播放 后来参看amr格式后 才知道amr文件是一帧一帧的 如果是按照完整的帧前面添加文件
  • DirectX编程:利用 DirectSound 录音

    DirectX编程 利用 DirectSound 录音 转载 http www cnblogs com stg609 archive 2008 10 24 1318931 html 花了一阵子 把DirectX安装后自带的帮助文件中的那部分
  • 免费的包噪音网站分享

    免费的包噪音网站分享 现代生活中 噪音扰人 影响健康和情绪 白噪音可以为人们提供放松心情 提高睡眠质量和专注力的帮助 现在有很多免费的白噪音网站可以任意使用和分享 包括海浪声 雨声 蝉鸣声等等 非常适合在办公室 家里或者旅途中使用 本文为您
  • Linux车机平台pulseaudio多alsasink配置

    https www freedesktop org wiki Software PulseAudio 官网上的介绍是这样的 pulseaudio 是一个POSIX操作系统上的声音系统 是音频应用的代理 它允许你对音频数据 在从应用传递到硬件
  • Java把V3音频文件转化为wav文件的算法的代码

    将写内容过程经常用到的内容段做个备份 如下内容内容是关于Java把V3音频文件转化为wav文件的算法的内容 import java io BufferedInputStream import java io BufferedOutputSt
  • 内行看门道:看似“佛系”的《QQ炫舞手游》,背后的音频技术一点都不简单

    欢迎大家前往腾讯云 社区 获取更多腾讯海量技术实践干货哦 本文由腾讯游戏云发表于云 社区专栏 内行看门道 看似 佛系 的 QQ炫舞手游 背后的音频技术一点都不简单 3月14日 腾讯旗下知名手游 QQ炫舞 正式上线各大应用商店 并迅速登上Ap
  • 麦克输入

    如图所示 单端输入只有一个输入引脚ADCIN 使用公共地GND作为电路的返回端 ADC的采样值 ADCIN电压 GND的电压 0V 这种输入方式优点就是简单 缺点是如果vin受到干扰 由于GND电位始终是0V 所以最终ADC的采样值也会随着
  • pulseaudio使用过程中遇到的问题

    W pulseaudio main c This program is not intended to be run as root unless system is specified E pulseaudio core util c H
  • 两路wav文件读取解析和混音输出并使用WaveOut相关API播放

    目录 wav文件格式简介 wav文件头定义 读取wav文件 读取背景音文件 音频混音 使用Windows WaveOut 相关API播放混音后的音频数据 将混音后的数据保存到新的wav文件中
  • 免费音效素材网站,一次性介绍清楚

    不管是在游戏 电影 电视剧 短视频还是音频中 合适的音效能够更好的表达内容和渲染氛围 今天给大家分享几个免费音效素材 感兴趣的话可以接着往下看 一 制片帮素材 找音效 制片帮素材不仅有海量的优质视频素材 还有丰富的音效资源 分类清晰 更重要

随机推荐

  • C++数据结构X篇_10_C++栈的应用-中缀转后缀

    中缀表达式就是我们平时运算表达式 其特点是运算符总是处于两个运算对象之间 但是该表达式计算机处理起来较为麻烦 会将其转写成后缀表达式 后缀表达式也叫逆波兰表达式 后缀表达式的特点是每个运算符都置于两个运算对象之后 此篇的部分内容参考博文地址
  • java求出最长平台的长度,华为机试题目-多最长子串筛选

    问题描述和解决方案 java import java util Scanner 最长平台问题 衍生版 问题描述 给定一个字符串 有字符连续出现 请寻找这些连续字符串中最长的字符串 如果最长的串有多个 请输出ascii最小的 解决方案 先按照
  • 一阶系统开环传递函数表达式_15. 闭环系统的频域性能指标

    时域中我们有几个性能指标 如上升时间 峰值时间 调节时间 超调量等等 进行时域分析和设计我们同样需要知道频域指标 之前讲的Bode plot Nyquist plot 包括根轨迹 都是通过开环传递函数来分析闭环传递函数的稳定性和频率特性 也
  • 计算机网络连接设备的有什么,常用网络连接设备有哪些?

    满意答案 zhjing2107 2014 05 05 采纳率 53 等级 8 已帮助 9962人 网络设备的种类繁多 且与日俱增 基本的网络设备有 计算机 无论其为个人电脑或服务器 集线器 交换机 网桥 路由器 网关 网络接口卡 NIC 无
  • DataWorks 全新发布:增强分析/数据建模个人版等新能力

    阿里云ODPS系列产品以MaxCompute DataWorks Hologres为核心 致力于解决用户多元化数据的计算需求问题 实现存储 调度 元数据管理上的一体化架构融合 支撑交通 金融 科研 等多场景数据的高效处理 是目前国内最早自研
  • 苹果11系统app无法连接服务器地址,iPhone11无法连接app store怎么办?iPhone11连接不上app store解决方法...

    很多网友都遇到过突然自己的app store无法连接 今天给大家介绍一下怎么解决这个问题 主要原因无非3个方面 网络问题 日期问题 网路设置问题 一起了解一下 iPhone11连接不上app store解决方法 将你的手机网络在数据和wif
  • x系列服务器,X系列服务器.xls

    X系列服务器 ibmx系列服务器 ibmx3850x5服务器 xmeye绑定服务器失败 ibmx系列服务器 ibmx3650服务器 x86服务器 我的世界1 8 x服务器 我的世界0 11 x服务器 xshell连接服务器 Power 6
  • 淘宝API开发系列:item_search_shop-获得店铺的所有商品

    为了进行淘宝的API开发 首先我们需要做下面几件事情 1 开发者注册一个账号 2 然后为每个淘宝应用注册一个应用程序键 App Key 3 下载淘宝API的SDK并掌握基本的API基础知识和调用 4 利用SDK接口和对象 传入AppKey或
  • J-Link 安装和配置

    一 安装驱动 直接安装驱动包 JLink Windows V616a exe 安装完成后插入J Link硬件 可以在硬件设备中 USB那看到J Link 二 KEIL配置 1 target 那右键进入option 2 debug选项中use
  • python对数据库操作——executemany

    1 executemany 方法 pymysql的executemany 方法 在一次数据库的IO操作中 可以插入多条记录 在大量数据传输中 它相比于execute 方法 不仅方便 而且提高了效率 2 语法 executemany sql
  • 使用python3编译并部署solidity合约

    我c了 Mac配置半天一直报错 windows随便配置就ok Os Windows PythonVersion 3 9 8 python3 10会报错 建议不要使用python3 10 1 安装py solc pip3 install py
  • 企业微信客户端调试

    1 下载企业微信电脑端 2 下载调试工具 调试工具 名称 devtools resources pak 不能改变 3 将调试工具放入企业微信对应目录 4 打开企业微信 快捷键 ctrl alt shift D 开启调试模式后进入网页
  • 将excel数据格式转成tableau

    import pandas as pd data pd read excel 世界各国人口统计数据 2000 2020 世界银行 xlsx data head print data columns tolist 将上面显示出来的列名列表 选
  • 复合查询

    复合查询 1 单表查询 查询工资高于500或岗位为MANAGER的雇员 同时还要满足他们的姓名首字母为大写的J select empno ename sal job from emp where sal gt 500 or job MANA
  • 倒排索引学习笔记

    概述 顺序扫描法 正向搜索法 举个例子 比如我们有大量的文件 文件编号从A B C 需求 要找出文件内容中包含有java的所有文件 需求实现 从A文件开始查找 再找B文件 然后再找C文件 以此类推 弊端 如果文件数量很多 查找速度慢 倒排索
  • JavaScript中的基本数据类型与引用数据类型

    JavaScript中的基本数据类型与引用数据类型 转载自 https www cnblogs com c2016c articles 9328725 html 1 栈 stack 和堆 heap stack为自动分配的内存空间 它由系统自
  • Aliyun本地化部署WebPageTest--前端性能测量工具

    1 有阿里云 创建一个ECS实例 2 设置阿里云docker源加速器 拉取对应的镜像 docker pull webpagetest server docker pull webpagetest agent 1 运行server实例 doc
  • C语言全局变量和局部变量总结

    只有不断的学习 不断的进步 才能不被替代 只有你的不可替代性才决定你的价值 2016年11月18日 第一部分问题 今天一个小伙伴问我一个问题 如图程序1 咋一看没有问题啊 后来想想确实有问题 这个c a a 似乎是语句 必须在函数体内才能执
  • ESP32使用AT MQTT 固件发布主题信息返回ERROR解决

    目录 发布格式 原因及其解决方法 发布格式 AT MQTTPUB lt topic gt lt data gt 0 0 当需要发布对应主题的json数据包时 错误格式 AT MQTTPUB 0 device date msg1 22 msg
  • WAV文件格式详解

    概述 Waveform Audio File Format WAVE 又或者是因为WAV后缀而被大众所知的 它采用RIFF Resource Interchange File Format 文件格式结构 通常用来保存PCM格式的原始音频数据