WAV文件格式分析详解Word文件下载.docx
- 文档编号:6817700
- 上传时间:2023-05-07
- 格式:DOCX
- 页数:56
- 大小:48.95KB
WAV文件格式分析详解Word文件下载.docx
《WAV文件格式分析详解Word文件下载.docx》由会员分享,可在线阅读,更多相关《WAV文件格式分析详解Word文件下载.docx(56页珍藏版)》请在冰点文库上搜索。
其中除了FactChunk外,其他三个Chunk是必须的。
每个Chunk有各自的ID,位于Chunk最开始位置,作为标示,而且均为4个字节。
并且紧跟在ID后面的是Chunk大小(去除ID和Size所占的字节数后剩下的其他字节数目),4个字节表示,低字节表示数值低位,高字节表示数值高位。
下面具体介绍各个Chunk内容。
PS:
所有数值表示均为低字节表示低位,高字节表示高位。
二、具体介绍
RIFFWAVEChunk
==================================
|
|所占字节数|
具体内容
|ID
4Bytes|
'
----------------------------------
|Size
|Type
图2
RIFFWAVEChunk
以'
FIFF'
作为标示,然后紧跟着为size字段,该size是整个wav文件大小减去ID和Size所占用的字节数,即FileLen-8=Size。
然后是Type字段,为'
,表示是wav文件。
结构定义如下:
structRIFF_HEADER
{
charszRiffID[4];
//'
R'
'
I'
F'
DWORDdwRiffSize;
charszRiffFormat[4];
W'
A'
V'
E'
};
FormatChunk
===============================================================
字节数
=================================================================
4Bytes
-----------------------------------------------------------------
|数值为16或18,18则最后又附加信息
-----------------------------------------------------------
----
|FormatTag
2Bytes
|编码方式,一般为0x0001
--------------------------------------------------------------------
|Channels
|声道数目,1--单声道;
2--双声道
|SamplesPerSec|
|采样频率
|AvgBytesPerSec|
|每秒所需字节数
|===>
WAVE_FORMAT
|BlockAlign
|数据块对齐单位(每个采样需要的字节数)|
|BitsPerSample|
|每个采样需要的bit数
|附加信息(可选,通过Size来判断有无)|
图3
FormatChunk
作为标示。
一般情况下Size为16,此时最后附加信息没有;
如果为18
则最后多了2个字节的附加信息。
主要由一些软件制成的wav格式中含有该2个字节的
附加信息。
structWAVE_FORMAT
WORDwFormatTag;
WORDwChannels;
DWORDdwSamplesPerSec;
DWORDdwAvgBytesPerSec;
WORDwBlockAlign;
WORDwBitsPerSample;
structFMT_BLOCK
char
szFmtID[4];
f'
m'
t'
DWORD
dwFmtSize;
WAVE_FORMATwavFormat;
FactChunk
数值为4
|data
图4
FactChunk
FactChunk是可选字段,一般当wav文件由某些软件转化而成,则包含该Chunk。
structFACT_BLOCK
szFactID[4];
a'
c'
dwFactSize;
DataChunk
图5DataChunk
DataChunk是真正保存wav数据的地方,以'
作为该Chunk的标示。
然后是
数据的大小。
紧接着就是wav数据。
根据FormatChunk中的声道数以及采样bit数,
wav数据的bit位置可以分成以下几种形式:
---------------------------------------------------------------------
单声道
取样1
取样2
取样3
取样4
|--------------------------------------------------------
8bit量化|
声道0
双声道
声道0(左)
声道1(右)
|16bit量化|
|(低位字节)
|(高位字节)
图6wav数据bit位置安排方式
DataChunk头结构定义如下:
structDATA_BLOCK
charszDataID[4];
d'
DWORDdwDataSize;
三、小结
因此,根据上述结构定义以及格式介绍,很容易编写相应的wav格式解析代码。
这里具体的代码就不给出了。
WAV文件格式研究笔记
WAV文件格式是(WAVFromformat)的简写。
WAV是指文件格式,而数据编码格式是多样的,目前微软提供的数据格式只有一种PCM-脉派编码调变(PulseCodeModulation也就是最常见的无压缩WAV)。
其他的数据格式有G.723.1、ACELP、CCITTA-Law、CCITTu-Law、TrueSpeed(TM)、GSM6.10等,这些格式大多数是为电话或调制解调器等低速语音为主的设备而使用,它们一般采用比较窄的采样范围来产生比较大的压缩比,并没有统一标准。
不在本文讨论范围。
·
RIFF文件和WAV文件格式
在Windows环境下,大部分的多媒体文件都依循着一种结构来存放信息,这种结构称为"
资源互换文件格式"
(ResourceslnterchangeFileFormat),简称RIFF。
例如声音的WAV文件、视频的AV1文件等等均是由此结构衍生出来的。
RIFF可以看做是一种树状结构,其基本构成单位为chunk,犹如树状结构中的节点,每个chunk由"
辨别码"
、"
数据大小"
及"
数据"
所组成。
辨别码(ID)由4个ASCII码所构成,数据大小则标示出紧跟其后数据的长度(单位为Byte),而数据大小本身也用掉4个Byte,所以事实上一个chunk的长度为数据大小加8。
一般而言,chunk本身并不允许内部再包含chunk,但有两种例外,分别为以"
RIFF"
LIST"
为辨别码的chunk。
而针对此两种chunk,RIFF又从原先的"
中切出4个Byte。
此4个Byte称为"
格式辨别码"
,然而RIFF又规定文件中仅能有一个以"
文件结构
WAV文件是chunk的集合,其中有两个chunk是不可缺少的,分别是“fmt”(format)和“data”chunk,fmt装载的是wav文件的各项参数,如采样率。
datachunk装载的是音频数据。
其他的chunk则是可选的。
所有音频应用程序必须能读取这两个主要的chunk,所有音频复制程序必须能复制所有chunk。
chunk在文件中的顺序是不受限制的,除了一条规则:
fmtchunk必须在datachunk前面。
绝大部分人写程序的时候都以为fmtchunk必须放在文件的开头,紧跟riff标识。
实际上这并不是必须的,因为微软白皮书没要求如此。
但这样搞也没错。
下图显示一个简单的WAV文件结构
__________________________
|riffwavechunk|
|groupid='
riff'
|rifftype='
wave'
|__________________|
||formatchunk||
||ckid='
||
||__________________||
||sounddatachunk||
|__________________________|
数据类型
所有数据存储在8bit字节中,按照intel80x86(ie,littleendian)方式排列,多字节排列顺序如下。
76543210
+-----------------------+
char:
|lsbmsb|
7654321015141312111098
+-----------------------+-----------------------+
short:
|lsbbyte0|byte1msb|
765432101514131211109823222120191817163130292827262524
+-----------------------+-----------------------+-----------------------+-----------------------+
long:
|lsbbyte0|byte1|byte2|byte3msb|
采样频率,采样精度,声道数量
采样频率(samplerate):
1秒钟采样的次数。
采样次数越多,越能细分声音的频率。
音质越好。
采样精度(bitresolution):
(采样精度、采样位数、采样值或取样值,随便你怎么叫)用来描述每次采样结果的空间大小。
也就是用多大的取值范围去描述一个采样点的值(振幅)。
精度越高,对声音的分辨力越强。
声道数量(channels):
那就是声道数量...
采样点和采样帧(samplepointandsampleframe)
采样点是描述某个时刻的声音样本。
采样精度就是这个时间上声音的振幅可以用多大的取值空间描述。
16bit的采样精度取值范围是-32768(0x8000)到32767(0x7fff)。
中点,也就是静音点是0。
但对于8bit的采样精度来说,范围却是从0-255,静音点在128。
(为何有这样的差异?
问比盖去。
他的人弄的)
因为cpu读数据都是用8bit的byte做单位。
所以如果你用的是9-16bit的精度,每个采样点用2byte。
17-24bit用3byte,25-32bit就用4byte双word。
按左对齐,空出的bit补0(pad部分)。
具体排列方式按下图。
________________________________________________
|||||||||||||||||
|1010000101110000|
|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|
<
--------------------------------------------->
------------->
12bit采样点按照左对齐方式先排满左边右面4bit补0(pad)
注意,根据intellittleendian存储顺序,按byte为单位从左到右从小到大,因此存到介质上面应该是下面这个顺序:
||||||||||||||||||
|01110000||10100001|
|___|___|___|___|___|___|___|___||___|___|___|___|___|___|___|___|
----------------------------->
bits0to34padbitsbits4to11
如果当前的WAV文件是多声道的怎么办?
假如是2声道的,先放左边声道的采样点,然后放右面声道的。
接着是下一个时刻的左声道采样点。
这样用两个采样点分别表示左右声道,在播放的时候同一时间播放出来。
那么一个时刻上的采样点的集合就成为采样帧。
单声道文件每个采样帧包括1个采样点,两声道的采样帧就有2个采样点。
如此类推。
samplesamplesample
frame0frame1framen
______________________________
|ch1|ch2|ch1|
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- WAV 文件格式 分析 详解