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) ...
随机推荐
- Skulpt
Skulpt Python. Client side. Skulpt is an entirely in-browser implementation of Python. No preprocess ...
- Unix命令行学习
Listing files and directories ls 显示你当前目录的文件 ls -a 显示你千亩目录的文件(包括隐藏文件)ls <name1>/<name2> 显 ...
- iOS 10 (X8)上CoreData的使用(包含创建工程时未添加CoreData)
1.在创建工程时未添加CoreData,后期想要使用CoreData则要在工程Appdelegate.h文件中添加CoreData库和CoreData中的通道类(用来管理类实例和CoreData之间的 ...
- 什么是FastCGI?
什么是FastCGI? PHP的FastCGI使你的所有php应用软件通过mod_fastci运行,而不是mod_phpsusexec.FastCGI应用速度很快 是因为他们持久稳定.不必对每一个请求 ...
- 一个人的旅行(floyd+dijskra+SPFA+Bellman)
一个人的旅行 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Subm ...
- Object-c学习之路九(字典(NSDictionary&NSMutableDictionary))
字典的练习和使用(遍历,搜索...)(Student和Book类文件可以查看上篇博客这次不上传了.) // // main.m // NSDictionary // // Created by Wil ...
- MySQL中innodb表主键设计原则
主键设计的原则:1. 一定要显式定义主键2. 采用与业务无关的单独列3. 采用自增列4. 数据类型采用int,并尽可能小,能用tinyint就不用int,能用int就不用bigint5. 将主键放在表 ...
- 【二分查找+优化O(n)】【续UVA1121】Subsequence
之前的二分答案做法 http://blog.csdn.net/zy691357966/article/details/40212215 二分查找做法: 我们首先试试只枚举终点.对于终点j,我们的目标是 ...
- stagefright框架(一)Video Playback的流程
在Android上,預設的多媒體框架(multimedia framework)是OpenCORE. OpenCORE的優點是兼顧了跨平台的移植性,而且已經過多方驗證,所以相對來說較為穩定:但是其缺點 ...
- Long,String类型的两个值进行比较,注意点!!!
一: . Long 类型指的是 java.util.Lang 对象,而不是基本类型 long (注意大小写)Java中如果使用 == 双等于比较对象,等于比较的是两个对象的内存地址,也就是比较两个对象 ...