WAV文件格式分析
一. RIFF概念
在Windows环境下,大部分的多媒体文件都依循着一种结构来存放信息,这样的结构称为"资源互换文件格式"(Resources lnterchange File Format),简称RIFF。比如声音的WAV文件、视频的AV1文件等等均是由此结构衍生出来的。RIFF能够看做是一种树状结构,其基本构成单位为chunk,宛如树状结构中的节点,每一个chunk由"辨别码"、"数据大小"及"数据"所组成。
|
块的标志符(4BYTES) |
|
数据大小 (4BYTES) |
|
数据 |
图一、 块的结构示意图
辨别码由4个ASCII码所构成,数据大小则标示出紧跟其后数据的长度(单位为Byte),而数据大小本身也用掉4个Byte,所以其实一个chunk的长度为数据大小加8。一般而言,chunk本身并不同意内部再包括chunk,但有两种例外,分别为以"RIFF"及"L1ST"为辨别码的chunk。而针对此两种chunk,RIFF又从原先的"数据"中切出4个Byte。 此4个Byte称为"格式辨别码",然而RIFF又规定文件里仅能有一个以"RIFF"为辨别码的chunk。
|
RIFF/LIST标志符 |
|
|
数据1大小 |
|
|
数据1 |
格式/列表类型 |
|
数据 |
|
图二、RIFF/LIST块结构
仅仅要依循此一结构的文件,我们均称之为RIFF档。此种结构提供了一种系统化的分类。假设和MS一DOS文件系统作比較,"RIFF"chunk就好比是一台硬盘的根文件夹,其格式辨别码便是此硬盘的逻辑代码(C:或D:),而"L1ST"chunk即为其下的子文件夹,其它的chunk则为一般的文件。至于在RIFF文件的处理方面,微软提供了相关的函数。视窗下的各种多媒体文件格式就如同在磁盘机下规定仅能放如何的文件夹,而在该文件夹下仅能放何种数据。
二. WAV文件格式
WAVE文件是很easy的一种RIFF文件,它的格式类型为"WAVE"。RIFF块包括两个子块,这两个子块的ID各自是"fmt"和"data",当中"fmt"子块由结构PCMWAVEFORMAT所组成,其子块的大小就是sizeofof(PCMWAVEFORMAT),数据组成就是PCMWAVEFORMAT结构中的数据。
|
标志符(RIFF) |
|
数据大小 |
|
格式类型("WAVE") |
|
"fmt" |
|
Sizeof(PCMWAVEFORMAT) |
|
PCMWAVEFORMAT |
|
"data" |
|
声音数据大小 |
|
声音数据 |
图三、WAVE文件结构
PCMWAVEFORMAT结构定义例如以下:
Typedefstruct

...{
WAVEFORMAT wf; /波形格式;
WORD wBitsPerSample; //WAVE文件的採样大小;
}PCMWAVEFORMAT;

//WAVEFORMAT结构定义例如以下:
typedefstruct

...{
WORD wFormatag; //编码格式,包含WAVE_FORMAT_PCM,WAVEFORMAT_ADPCM等
WORD nChannls; //声道数,单声道为1,双声道为2;
DWORD nSamplesPerSec; //採样频率;
DWORD nAvgBytesperSec; //每秒的数据量;
WORD nBlockAlign; //块对齐;
}WAVEFORMAT;
"data"子块包括WAVE文件的数字化波形声音数据,其存放格式依赖于"fmt"子块中wFormatTag成员指定的格式种类,在多声道WAVE文件里,样本是交替出现的。如16bit的单声道WAVE文件和双声道WAVE文件的数据採样格式分别如图四所看到的:
16位单声道:
|
採样一 |
採样二 |
…… |
||
|
低字节 |
高字节 |
低字节 |
高字节 |
…… |
16位双声道:
|
採样一 |
…… |
|||
|
左声道 |
右声道 |
…… |
||
|
低字节 |
高字节 |
低字节 |
高字节 |
…… |
图四、WAVE文件数据採样格式
WAV文件格式实例分析:
|
0 1 2 3 4 5 6 7 8 9 A B C D E F |
|
|
00000000H 00000010H 00000020H 00000030H 00000040H |
52 49 46 46 0A 06 01 00 57 41 56 45 66 6D 74 20 12 00 00 00 01 00 02 00 44 AC 00 00 10 B1 02 00 04 00 10 00 00 00 66 61 63 74 04 00 00 00 76 41 00 00 64 61 74 61 D8 05 01 00 00 00 00 00 FF FF 00 00 FE FF FE FF 00 00 00 00 FE FF FE FF 00 00 |
|
偏移地址 |
字节数 |
数据类型 |
内容 |
|
|
文件头 |
00H |
char |
“RIFF”; |
|
|
04H |
long int |
0x00 01 06 0A(注意数据存储顺序); |
||
|
08H |
char |
“WAVE”; |
||
|
0CH |
char |
“fmt ”; |
||
|
10H |
long int |
0x12; |
||
|
14H |
int |
(WAVE_FORMAT_PCM); |
||
|
16H |
int |
2; |
||
|
18H |
int |
44100; |
||
|
1CH |
long int |
0x10B10000; |
||
|
20H |
int |
。播放软件须要一次处理多个该值大小的字节数据,以便将其值用于缓冲区的调整。 |
||
|
22H |
每样本的数据位数,表示每一个声道中各个样本的数据位数。假设有多个声道,对每一个声道而言,样本大小都一样。 |
|||
|
50H |
char |
“data”; |
||
|
54H |
long int |
0x00 01 05 D8; |
WAV文件格式分析的更多相关文章
- wav文件格式分析详解
wav文件格式分析详解 文章转载自:http://blog.csdn.net/BlueSoal/article/details/932395 一.综述 WAVE文件作为多媒体中使用的声波文件格式 ...
- wav文件格式分析与详解
WAV文件是在PC机平台上很常见的.最经典的多媒体音频文件,最早于1991年8月出现在Windows 3.1操作系统上,文件扩展名为WAV,是WaveFom的简写,也称为波形文件,可直接存储声音波形, ...
- 【转载】wav文件格式分析与详解
WAV文件是在PC机平台上很常见的.最经典的多媒体音频文件,最早于1991年8月出现在Windows 3.1操作系统上,文件扩展名为WAV,是WaveFom的简写,也称为波形文件,可直接存储声音波形, ...
- wav文件格式分析(二)
(三)格式分析 WAVE文件是由若干个Chunk组成的.按照在文件中的出现位置包括:RIFF WAVE Chunk, Format Chunk, Fact Chunk(可选), Data Chunk. ...
- wav文件格式分析(一)
(一)概述 WAV为微软公司(Microsoft)开发的一种声音文件格式,它符合RIFF(Resource Interchange File Format)文件规范: (二)音频知识 1.常见的声音文 ...
- wav文件格式分析(三)
(四)附表 1.头格式表: 2.PCM数据的存放方式 3.PCM波形样本的数据格式 WAVE文件的每个样本值包含在一个整数i中,i的长度为容纳指定样本长度所需的最小字节数. 首先存储低有效字节,表示样 ...
- WAV文件格式解析及处理
RIFF file format RIFF全称为资源互换文件格式(Resources Interchange File Format),是Windows下大部分多媒体文件遵循的一种文件结构.RIFF文 ...
- wav文件格式及ffmpeg处理命令
wav文件头详解 符合RIFF(Resource Interchange File Format)规范的wav文件的文件头记录了音频流的编码参数等基本信息.wav文件由多个块组成,至少包含RIFF标志 ...
- WAV文件格式
作者:阿宝 更新:2016-09-21 来源:彩色世界(https://blog.hz601.org/2016/09/21/waveform-audio-file-format/index.html) ...
随机推荐
- find -exec
find -exec 的标准写法 find ./ -name "*.tmp" -exec rm -rf "{}" \; find -exec 这个命令组合很好用 ...
- 【转】android 电容屏(一):电容屏基本原理篇
关键词:android 电容屏 tp ITO 平台信息:内核:linux2.6/linux3.0系统:android/android4.0 平台:S5PV310(samsung exynos 42 ...
- C#向文件写、读数据
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- wpf实现IE菜单栏自动隐藏效果
IE菜单栏默认为隐藏状态,按下键盘Alt键后显示,菜单失去焦点则自动隐藏.下面说说WPF中如何实现这样的效果. 第一步:Menu默认设置为隐藏(Visibility="Collapsed&q ...
- SSH框架-Caused by: org.hibernate.MappingException: column attribute may not be used together with <column> subelement
昨晚修改了一些表关系,在相关的hbm.xml文件中做了改动,今天早上起来启动tomcat后,发现项目启动不了,控制台报错: 2015-6-14 9:09:42 org.apache.catalina. ...
- php各种编译错误汇总
PHP编译安装时常见错误解决办法,php编译常见错误 This article is post on https://coderwall.com/p/ggmpfa configure: error: ...
- android视频录制、另一部手机实时观看方案
最近调研android视频录制.另一部手机实时观看,大致有以下几种思路. 1. android手机充当服务器,使用NanoHTTPD充当服务器,另一部手机或者pc通过输入http://手机的ip:80 ...
- (转)android多国语言适配
android多国语言文件夹 android多国语言文件夹文件汇总如下:(有些语言的书写顺序可能跟中文是相反的) 中文(中国):values-zh-rCN 中文(台湾):values-zh-rTW 中 ...
- iOS 在特定页面 界面旋转
1.在AppDelegate.h 里添加标记 2.在AppDelegate.m 里添加这个方法 3.使用 [(AppDelegate*)[UIApplication sharedApplication ...
- hbase 二级索引创建
在单机上运行hbase 二级索引: import java.io.IOException; import java.util.HashMap; import java.util.Map; import ...