作者:阿宝 

更新:2016-09-21 

来源:彩色世界(https://blog.hz601.org/2016/09/21/waveform-audio-file-format/index.html) 

WAVE (Waveform Audio File Format),是由微软和IBM公司共同开发的音频编码格式;广泛应用于Windows平台;

又因为文件后缀名为.wav而被称为WAV。

官方文档

WAV文件格式 draft-ema-vpim-wav-00

WAVE和AVI支持的编码格式 RFC 2361

文件格式

由多个块组成,必须包含四种(分别为RIFF头块、格式块、数据头块、数据块),其中格式块必须在数据块前面,其他块可自定义并且允许被忽略。

所有数据均以小端方式存储。

OFFSET  LENGTH  VALUE   DESCRIPTION
0 4 bytes 'RIFF' The file format ID.
4 4 bytes Length of the file minus (-) 8 bytes.
8 4 bytes 'WAVE' The data format ID.
12 4 bytes 'fmt ' The chunk ID.
16 4 bytes 32 Length of the chunk excluding the 8
bytes for the ID and length.
20 4 bytes The codec ID.
24 4 bytes The number of channels.
28 8 bytes Samples per second.
36 8 bytes Average bytes per second.
44 4 bytes Block alignment.
48 4 bytes Bits per sample.
52 4 bytes 'data' The chunk ID.
56 4 bytes Length of the data (chunk size minus (-) 8 bytes.
60 4 bytes 'fact' The chunk ID.
4 bytes 8 Chunk size minus (-) 8 bytes.
8 bytes Sample length.

WAV文件示例

下面是一个由FFmpeg转码生成的WAV文件示例,PCM数据,大小5292078B,位宽16bit,小端存储,采样率44100,2声道,码率1411kb/s。

分析发现,真实的WAV文件格式与IETF中的描述并不一致,暂时还没找到原因。

在资源交换文件RIFF标准中,所有的数据被组织成"块"格式,每个块必须包含一个4字节的ID,一个4字节的长度字段,和若干字节的数据。

52 49 46 46 26 c0 50 00 57 41 56 45 66 6d 74 20
10 00 00 00 01 00 02 00 44 ac 00 00 10 b1 02 00
04 00 10 00 4c 49 53 54 1a 00 00 00 49 4e 46 4f
49 53 46 54 0e 00 00 00 4c 61 76 66 35 36 2e 34
30 2e 31 30 31 00 64 61 74 61 e0 bf 50 00 06 00
...

0-4B 0x52 0x49 0x46 0x46 文件格式标识'RIFF'

5-8B 0x26 0xc0 0x50 0x00 文件长度减8,小端存储,此处为5292070

9-12B 0x57 0x41 0x56 0x45 数据格式标识'WAVE'

13-16B 0x66 0x6d 0x74 0x20 格式块标识'fmt '

17-20B 0x10 0x00 0x00 0x00 格式长度,此处为16

21-22B 0x01 0x00 数据编码格式 Microsoft PCM Format 0x0001 RFC2361

23-24B 0x02 0x00 音频声道数,此处为2,双声道

25-28B 0x44 0xac 0x00 0x00 音频采样率,此处为44100

29-32B 0x10 0xb1 0x02 0x00 平均码率

33-34B 0x04 0x00 数据的调整数?

35-36B 0x10 0x00 样本位宽,此处为16bit

37-40B 0x4c 0x49 0x53 0x54 块标识'LIST'

41-44B 0x1a 0x00 0x00 0x00 块长度,此处为26

45-70B 0x49 0x4e 0x46 0x4f 0x49 0x53 0x46 0x54 0x0e 0x00 0x00 0x00 0x4c 0x61 0x76 0x66 0x35 0x36 0x2e 0x34 0x30 0x2e 0x31 0x30 0x31 0x00

71-74B 0x64 0x61 0x74 0x61 数据头块标识'data'

75-78B 0xe0 0xbf 0x50 0x00 数据长度,不包括数据头,此处为5292000

...

音频数据

WAV编码不对源数据做任何压缩处理;

如果源数据是无损的,编码后的WAV文件也是无损的;

如果源数据是有损的,编码后的WAV文件也是有损的;

关于采样

通常情况下人耳只能感受到频率从100到20,000赫兹的信号;因此44,100赫兹的采样相对于人耳即是“无损”的。

音乐制作人通常会录制采为96,000赫兹的数据,之后采样处理成不同的格式。

常见的音频处理软件

剪辑 Goldwave

精细制作 MATLAB

WAV文件格式的更多相关文章

  1. wav文件格式分析详解

    wav文件格式分析详解 文章转载自:http://blog.csdn.net/BlueSoal/article/details/932395 一.综述    WAVE文件作为多媒体中使用的声波文件格式 ...

  2. WAV文件格式分析

    一. RIFF概念 在Windows环境下,大部分的多媒体文件都依循着一种结构来存放信息,这样的结构称为"资源互换文件格式"(Resources lnterchange File ...

  3. wav文件格式分析与详解

    WAV文件是在PC机平台上很常见的.最经典的多媒体音频文件,最早于1991年8月出现在Windows 3.1操作系统上,文件扩展名为WAV,是WaveFom的简写,也称为波形文件,可直接存储声音波形, ...

  4. WAV文件格式解析及处理

    RIFF file format RIFF全称为资源互换文件格式(Resources Interchange File Format),是Windows下大部分多媒体文件遵循的一种文件结构.RIFF文 ...

  5. wav文件格式及ffmpeg处理命令

    wav文件头详解 符合RIFF(Resource Interchange File Format)规范的wav文件的文件头记录了音频流的编码参数等基本信息.wav文件由多个块组成,至少包含RIFF标志 ...

  6. 【转载】wav文件格式分析与详解

    WAV文件是在PC机平台上很常见的.最经典的多媒体音频文件,最早于1991年8月出现在Windows 3.1操作系统上,文件扩展名为WAV,是WaveFom的简写,也称为波形文件,可直接存储声音波形, ...

  7. wav文件格式分析(一)

    (一)概述 WAV为微软公司(Microsoft)开发的一种声音文件格式,它符合RIFF(Resource Interchange File Format)文件规范: (二)音频知识 1.常见的声音文 ...

  8. wav文件格式分析(二)

    (三)格式分析 WAVE文件是由若干个Chunk组成的.按照在文件中的出现位置包括:RIFF WAVE Chunk, Format Chunk, Fact Chunk(可选), Data Chunk. ...

  9. wav文件格式分析(三)

    (四)附表 1.头格式表: 2.PCM数据的存放方式 3.PCM波形样本的数据格式 WAVE文件的每个样本值包含在一个整数i中,i的长度为容纳指定样本长度所需的最小字节数. 首先存储低有效字节,表示样 ...

随机推荐

  1. python编程快速上手之第7章实践项目参考答案

    #!/usr/bin/env python3.5 #coding:utf-8 import re # 7.18.1 # 强口令检测 # 写一个函数,使用正则表达式,确保传入的口令字符串是强口令 # 长 ...

  2. Django学习(五)---模板扩展,开发博客页面

    (一)博客主页面开发 1.模板中可使用for循环,语法格式为: {% for xs in xxs %} HTML语句 {% endfor %} 2.更改app下的views.py, 获取后台model ...

  3. javascript事件轮询

    JavaScript 运行机制详解:再谈Event Loop 一.为什么JavaScript是单线程? JavaScript语言的一大特点就是单线程,也就是说,同一个时间只能做一件事.那么,为什么Ja ...

  4. Android之IPC(aidl)

    IPC(Inter-Process Conmunication) 进程间通讯 在同一进程中,各个组件进行通信是十分方便的,普通的函数调用就可以解决:但是,对于处于不同进程中的组件来说,要进行通信,就需 ...

  5. 记一次 联想杨天A4600K 安装操作系统遇到的尴尬

    故事的开始: 某日,有一台联想扬天A4600K台式机,该机器原来使用的系统为windowsXP,先需要安装win7系统. 准备好gho镜像,准备ghost安装系统.不料,提示镜像文件损坏,无法安装.起 ...

  6. 深入理解Java内部类

         内部类就是定义在一个类中的另外一个类,是一种从属关系.在没有实际了解内部类之前,我始终困惑,为什么要在一个类中定义另外一个类,这不是增加代码结构复杂度么?现在才大致能知道这种设计的优势是大于 ...

  7. 字符串查找KMP算法

    如果你用过ctrl+F这个快捷键,那么你有很大的概率使用过这个算法,这就是在待查找字符串(可能有成千上万个字符)中找出模式串(比较小,可能有几个字符),可能找到大于或者等于1次的位置.例如,在abab ...

  8. 修改tomcat编码方式

    打开server.xml <Connector URIEncoding="UTF-8" connectionTimeout="20000" port=&q ...

  9. Java集合类小结-思维导图

    java集合类分为collection 和 map两类Collection List ArrayList LibnkedList Vector Set HashSet TreeSet LinkedHa ...

  10. (转)每天一个linux命令(8):cp 命令,复制文件和文件夹

    场景:自动部署脚本中为了部署方便,将配置文件放在服务器端,每次部署都使用服务端的配置文件覆盖上传上去的配置文件. cp命令用来复制文件或者目录,是Linux系统中最常用的命令之一. 一般情况下,she ...