概述
wav文件详解
分类: 视频音频图像处理算法 2013-10-10 13:50 66人阅读 评论(0) 收藏 举报
音频 wav 格式介绍 ffmpeg
目录(?)[+]
工具
我们这里使用的工具有ffmpeg, cooledit, ultraedit。
音频文件
我们以这音频文件为介绍例子
文件链接http://pan.baidu.com/s/1j6fbt
wav的基础知识介绍
wav是微软开发的一种音频文件格式.
它符合它符合RIFF(Resource Interchange File Format)文件规范,用于保存Windows平台的音频信息资源,
被Windows平台及其应用程序所广泛支持。
标准化的wav文件都是44.1k的采样率,采用16位的数字表示。
但是我们的成了里面采样率是16k的,采用16为的数字表示。
wav文件分为两个部分,第一个部分是wav头文件,第二个部分是PCM编码的音频数据部分。
PCM编码介绍
其中,数字信号是对连续变化的模拟信号进行抽样、量化和编码产生的,称为PCM(Pulse-code modulation),即脉冲编码调制。
声音的本质就是波,我们可以用cooledit打开音频文件,看到下图所示的内容
你可以在cooledit里面放大这个图片,看到实际上它就是一个波形图。一个声音对应的就是一个波形图。
PCM实际上就是讲这个波形图通过按一定的时间间隔,收集起来。这里不详细描述,可以参考
http://zh.wikipedia.org/wiki/%E8%84%88%E8%A1%9D%E7%B7%A8%E7%A2%BC%E8%AA%BF%E8%AE%8A
http://baike.baidu.com/view/86849.htm
ffmpeg中通过deocde的方式,实际上都是把音频文件转换为pcm格式,让pc或者手机上面的声卡设备来播放。(目前看都是这种形式)
wav头文件详解
下面是摘抄在维基百科的关于riff文件的定义
RIFF档案由一个简单的表头(header)跟随着多个 "chunks"所组。其格式完全跟IFF一样,除整数的储存方式不一样以外。
表头(Header)
4 字节(bytes):固定为"RIFF".
4 字节:little-endian 32-bit 正整数,整个档案的大小,扣掉辨识字符和长度,共8个字节。
4 字节:这个档案的型态字符,例如:"AVI " 或 "WAVE".
接下来是区块(Chunks),每个区块包含:
4 字节:此区块的ASCII识别字,例如:"fmt " 或 "data".
4 字节:little-endian 32-bit 正整数,表示本区块的长度(这个正整数本身和区块识别字的长度不算在内).
不固定长度字段:此区块的资料,大小等同前一栏之正整数。
假如区块的长度不为偶数,则填入一个 byte。
可以参考下表
偏移地址 | 大小 字节 | 数据块 类型 | 内容 |
00H~03H | 4 | 4字符 | 资源交换文件标志(RIFF) |
04H~07H | 4 | 长整数 | 从下个地址开始到文件尾的总字节数 |
08H~0BH | 4 | 4字符 | WAV文件标志(WAVE) |
0CH~0FH | 4 | 4字符 | 波形格式标志(fmt ),最后一位空格。 |
10H~13H | 4 | 整数 | 过滤字节(一般为00000010H) |
14H~15H | 2 | 整数 | 格式种类(值为1时,表示数据为线性PCM编码) |
16H~17H | 2 | 整数 | 通道数,单声道为1,双声道为2 |
18H~1BH | 4 | 长整数 | 采样频率 |
1CH~1FH | 4 | 长整数 | 波形数据传输速率(每秒平均字节数) |
20H~21H | 2 | 整数 | DATA数据块长度,字节。 |
22H~23H | 2 | 整数 | PCM位宽 |
24H~27H | 4 | 4字符 | “fact”,该部分一下是可选部分,即可能有,可能没有,一般到WAV文件由某些软件转换而成时,包含这部分。 |
28H~2BH | 4 | 长整数 | size,数值为4 |
表2 WAV声音文件的
偏移地址 | 字节数 | 类型 | 内容 |
24H~27H | 4 | 4字符 | 数据标志符(data) |
28H~2BH | 4 | 长整型 | DATA总数据长度字节 |
2CH... | ... | DATA数据块 |
他的三个最重要的参数是采样率,比特数,声道数。
我们使用UE打开这个音频文件
注意,我们的pc都是小端模式,所以注意读取数据的真实内容。
我们解读一下这个wav文件
00H ~ 03H 52 49 46 46 对应的是RIFF
04H ~ 07H 48 10 03 00 对应的是后面文件的大小,小端模式所以是00031048 ,换算为十进制的200776
08H ~ 0BH 57 41 56 45 对应的是标示符WAVE
0CH ~ 0FH 66 6d 74 20 对应是波形格式标示符fmt
10H ~ 13H 12 00 00 00 对应的是过滤字节,不知道是什么作用,由于本文件不是标准的采样率,所以可能和上面的不一致
14H ~ 15H 01 00 对应的十进制是1 线性的PCM编码,我们这里只探讨PCM编码
16H ~ 17H 01 00 对应的十进制是1 表示单声道,MONO
18H ~ 1BH 80 3E 00 00 对应的十进制是16000.表示采样率是16000的
1CH ~ 1FH 00 7D 00 00 对应的十进制是32000,波形数据传输率,每秒多少个字节,可以用(200776 -72)/32000 = 6.272s
20H ~ 21H 02 00 对应的十进制是2,数据的调整数
22H ~ 23H 10 00 对应的十进制是16,样本数据的位数,表示用16位表示一个样本
我们的和表二之间有一些差距,是ffmpeg转码的数据,所以中间夹着了一些ffmpeg的信息
48H ~ 4BH 64 61 74 71 对应的ACSCII码是data
4CH ~ 4FH 00 10 03 00 对应的十进制是200704,表示采样数据的总数
从50H开始就是真正的数据部分
在使用ffmpeg解包的时候总共是有49个包,每个包的大小为4096, 49*4096 =200704,
怎么计算出来包的大小,需要进一步的分析。
最后
以上就是过时鞋子为你收集整理的wav文件头解析工具音频文件wav的基础知识介绍的全部内容,希望文章能够帮你解决wav文件头解析工具音频文件wav的基础知识介绍所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复