文档章节

WAV文件格式

i
 iBaoger
发布于 2016/09/22 10:39
字数 943
阅读 69
收藏 0
WAV

作者:阿宝  更新: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

© 著作权归作者所有

共有 人打赏支持
i
粉丝 1
博文 7
码字总数 21174
作品 0
杭州
私信 提问
Android获取WAV音频时长

1.简介 wav(Waveform Audio File Format)是微软公司开发的一种声音文件格式,它符合RIFF(Resource Interchange File Format)文件规范。WAV是最接近无损的音乐格式,所以文件大小相对也比较大...

tugele
2018/03/06
0
0
音频数据文件格式(PCM,WAV,MIDI)简记

PCM(Pulse Code Modulation):脉冲编码调制 把声源数据按一定的频率进行脉冲调制进行存储的数据格式,简单来说就是对模拟声音信号的数字 转换。 WAV WAV是一种无损音频数据格式。WAV符合RIF...

lengxujun
2018/06/26
0
0
音频格式转换工具--Sound Converter

Sound Converter 是一个简单的声音转换程序,工作在 GNOME 环境下。可以读取任何 GStreamer 可以读取的文件格式并转为 WAV, FLAC, MP3, and Ogg Vorbis 等格式....

匿名
2009/04/17
2.8K
0
Sound Converter 1.5.0 alpha1,声音格式转换

Sound Converter 是一个简单的声音转换程序,工作在 GNOME 环境下。可以读取任何 GStreamer 可以读取的文件格式并转为 WAV, FLAC, MP3, and Ogg Vorbis 等格式. Changes: 1. 全新的异步处理核...

红薯
2010/03/03
125
0
控制台的音频前端工具--burnCDDA

burnCDDA 是一个控制台的音频前端工具 to cdrdao, cdrecord, MPlayer, mpg321, oggdec, mppdec, flac, normalize, and mp3_check. 可用于从 m3u 播放列表文件创建音乐 CD,或者直接从一个目录...

匿名
2011/05/17
373
0

没有更多内容

加载失败,请刷新页面

加载更多

输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。

import java.util.Stack; public class Solution { public boolean IsPopOrder(int [] pushA,int [] popA) { if(pushA.length==0||popA.length==0) return false; Stack......

南桥北木
14分钟前
0
0
互联网浪潮下,Java程序员如何追赶技术革新的脚步?

一:时代背景 身处互联网行业的我们一直处在变革的最前端,受到行业发展浪潮的洗礼,不停歇地追赶着技术革新的脚步。特别是近几年来, 互联网架构不断演化,经历了从集中式架构到分布式架构,...

老道士
21分钟前
0
0
flink系列(9)-flink启动流程分析

连续写了几天的flink StreamGraph的代码,今天闲来说一下flink的启动

yiduwangkai
34分钟前
0
0
取变量的地址赋值给另一个变量,C通过,C++编译出错

取变量的地址赋值给另一个变量,C通过。正常运行,C++编译出错。 代码如下: #include <stdio.h>int main(int argc, char *argv[]){int x = 3;int *p = &x;int y = p;/*c ...

SamXIAO
今天
1
0
利用隐写术实施攻击

尽管隐写术是一种低频攻击途径,但网络犯罪分子已经开始利用它结合社交媒体的普遍性和快速传播性来传递恶意有效负载。 低调但有效的隐写技术虽然是旧把戏,但将代码隐藏在看似正常的图像中,...

Linux就该这么学
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部