当前位置:文档之家› wav文件格式分析

wav文件格式分析

一.RIFF概念在Windows环境下,大部分的多媒体文件都依循着一种结构来存放信息,这种结构称为"资源互换文件格式"(Resources Interchange File Format),简称RIFF。

例如声音的WAV文件、视频的AV1文件等等均是由此结构衍生出来的。

RIFF可以看做是一种树状结构,其基本构成单位为chunk,犹如树状结构中的节点,每个chunk 由"辨别码"> '数据大小"及"数据"所组成。

图一、块的结构示意图辨别码由4个ASCII码所构成,数据大小则标示出紧跟其后数据的长度(单位为Byte),而数据大小本身也用掉4个Byte,所以事实上一个chunk的长度为数据大小加8。

一般而言,chunk本身并不允许内部再包含chunk,但有两种例外,分别为以"RIFF"及"L1ST"为辨别码的chunk。

而针对此两种chunk,RIFF又从原先的"数据"中切出4个Byte。

此4个Byte称为"格式辨别码",然而RIFF又规定文件中仅能有一个以"RIFF"为辨别码的chunk。

图二、RIFF/LIST块结构只要依循此一结构的文件,我们均称之为RIFF档。

此种结构提供了一种系统化的分类。

如果和MS —DOS 文件系统作比较,"RIFF"chunk就好比是一台硬盘的根目录,其格式辨别码便是此硬盘的逻辑代码(C :或D:),而"L1ST"chunk即为其下的子目录,其他的chunk则为一般的文件。

至于在RIFF文件的处理方面,微软提供了相关的函数。

视窗下的各种多媒体文件格式就如同在磁盘机下规定仅能放怎样的目录,而在该目录下仅能放何种数据。

二.WAV文件格式WAVE文件是非常简单的一种RIFF文件,它的格式类型为"WAVE"。

RIFF块包含两个子块,这两个子块的ID分别是"fmt"和"data",其中"fmt"子块由结构PCMWAVEFORMAT 所组成,其子块的大小就是sizeofof (PCMWAVEFORMAT),数据组成就是PCMWAVEFORMAT 结构中的数据。

标志符(RIFF)数据大小图三、WAVE文件结构PCMWAVEFORMAT 结构定义如下:Typedef struct曰田…{WAVEFORMAT wf; / 波形格式;WORD wBitsPerSample; //WAVE 文件的采样大小;} PCMWAVEFORMAT;//WAVEFORMAT 结构定义如下:typedef struct曰田…{WORD wFormatag; //编码格式,包括WAVE_FORMAT_PCM ,WAVEFORMAT_ADPCM 等WORD nChannls; //声道数,单声道为1,双声道为2;DWORD nSamplesPerSec; 〃采样频率;DWORD nAvgBytesperSec; // 每秒的数据量;WORD nBlockAlign; // 块对齐;L} WAVEFORMAT ;"data"子块包含WAVE文件的数字化波形声音数据,其存放格式依赖于"fmt"子块中wFormatTag成员指定的格式种类,在多声道WAVE文件中,样本是交替出现的。

如16bit的单声道WAVE文件和双声道WAVE 文件的数据采样格式分别如图四所示:16位单声道:图四、WAVE文件数据采样格式WAV文件格式实例分析:O1 2 3456789 A B C D E FOOOOOOO OH 52494646OA O6O1OO5741 5645666D742OOOOOOO1 OH 12OOOOOO O1OOO2OO44AC OOCO1O B1O2OOOOOOOO2OHO4OO1O OO OO OO66616374 O4OO OO OO7641OOOOOO3OH OO OO64617461D8O5O1OO OO OO OO OO FF FF0OOOOO400 OO FE FF FE FF OO OO OO OO FE FF FE FF OO OOwav 文件格式分析虽然自己是搞视频图像的,不过偶尔看看音频方面的资料也是可以调节一下的下面就来分析一下wav 波形文件的格式。

我们先随便找一个wav 文件,查看其属性,就能得到下面的结果。

文件类塑•波形声音Crtv)口Tindows >edi t Playi更改©…扌T开方式:便B:C: WswrcVteVkskl op大小; 1.2& MB (1,^044 宇节 >|占用空闫; 1.2$ MB (1,327,104 亨节》创踽耳2012*10月16曰・21:42:43惟改时闻:20122fl0月1&吕.21:42:43访问B扌间2012^10月W日.21:42:43属性:二只读值)二硼QD[鬲级@)二n 厂确定「[翊]应用射上面主要注意文件大小,声音长度与比特率。

文件占用空间就不用关心了,如果有人想知道为什么文件占用空间比文件大小要大,我在这里也解释一下。

这和文件在硬盘中的组织方式有关系,这里的硬盘分区是以最小4096Byte 为单位的,我文件的大小是1325044Byte ,那么1325044/4096=323.49 ,为了能把文件对齐的放到硬盘中,所以占用的空间就要是324*4096=1327104Byte 了,所以占用的空间就是这么多了。

你也可以建立一个只写一个字母的txt文件试试,文件大小虽然为IByte,不过占用空间也为4096Byte 。

上面说的当然和wav文件没什么关系,下面就正式说用ultraedit 打开就是下面这个样子:wav文件的问题。

空[CAUser^McXDetktopXoiJtput.wav]・Uhrj EditT 京杵{日 MID «3=(S ) 1SA4W 孩目(D 总BY )応式e ?J (k )炭3 脏奉皿 丢迟血 呈口临 嶠的劉八卜 H I 3 /; f U 1 L »京「£]H ESL — — MfibaiM如益辛屯 it 損 fl 也B : ldH h 29. COOOS悸改:2012/10/16 21^2A3用表格说明一下文件的格式 起始地址占用空间本地址数字的含义OOH 4byte RIFF ,资源交换文件标志。

04H 4byte从下一个地址开始到文件尾的总字 节数。

高位字节在后面,这里就是001437ECH ,换成十进制是 1325036byte,算上这之前的C J \U se^s^c \De$ lc*o p\output.• 打幵 却旦S3列豪・订诵谴 电.冲岡 ff 日HL m * 3 B:€: 01*崛瞬 i*兮Efflfc 客 ▲峯務輕踐日g*Vj|.&o £ gqA.foooooooon52 49 46 专召 8:s? 1437 41 5庁 佃 £6 6D 齐 50raim00000010;! 10 00 00 00 01 0D 01 co 11 ZB 0 0 00 22 5€ 00 00皿口 □0020J1 02 00 10 QQ61 71 61 匚d □ 7OQ 00 00 00 00■t i A 4'(0000003011 00 oa oo 00 oo g 00 co oo oa oo 00 oa QQ oo OQ OOQOOQt^h •■ 2 oa (JO 00 oo go oo Cd ao 00 oo go oo QO go oaOOOOOOS&f: 00 QQ 0Q g oo 00 go 00 oo 00 oo 00 QQ QQ oo ooQQQQQQG&h go aa 00 00 QQ g QQ 00 QQ 00 oo QQ 00 oo QQ QQQ^QQQQ^rHQQ □o 50 00 □a (JO 00 0 0 □ □ oo 0 D OO QO oo oo 00OOOOOOSOh00 00 g00 00 00 00 cc 00 oc 00 00 03 oo 00 00f03000090h eo no GO od DO db 00 co 00 0 0 Ofl 09 GO 00 00« ■ « ■.nOOOOOa&00 00 3D 00 no 00 oo no 00 oo- oo oo 00 oo 00 oo COOOOObO h 00 00 00 00 00 00 00 oc □o 00 oo 00 oo 00 GO ooOOOOOOcO h co oo oo GO oo 0D QO co 00 00 00 oo oo oo 00 ooODOOOOdG h 00 00 00 00 00 00 00 DC ao 00 oo oo oo oo 00 ooOOOOOOeOh00 00 00 00 00 00 00 co 00 00 00 00 00 00 00 00r* ■ « # #OOOOODfOh 00 00 □o 00 □0 00 00 00 □□ 00 oo 00 00 oo 00 oo OOOOCLOO JlQ0 00 00 00 00 00 00 oc 00 Q0 0€ OO co00 00 00卜1eri1v Q Q …- V » KI*L* 遵 F ; l* 当 W ;1-bMp 民bmp任心5D ]詩姦话!5的賈活©nthib 王右迅硼¥< m注意属性中的比特率是176kbps ,而1CH中为22050Byte/s22050*8/1024 并不等于176,而是等于172,这里我想可能是通信中的而是等于1000的原因(通信原理书中好像有),如果按22050*8/1000 176 了。

其实比特率也可以这样算,总字节除以时长得到每秒字节率,再乘以得到比特率了,即(1325000/60)*8/1000=176kbps 。

最后是量化数据的表示。

看数据结尾的表示吧,我这音频最初那一段都是0,不好解释Ultraedit 中的表示:■ ・・® [C:\.U5*r$\tc\De-i kto p^output v.a/] - UltraEdit舸fl) wifi魄口(W)翅知且〕a x打帝1蛹吉理器i列義* 1.. b mp □ .bmp迂心3E]奇本哈喉王:童活-Cy nth前王OSC.wr那航选;*.* ii 3I 堺b 卡Q 年f;+ B;蚩UV Qi* m D;E E:;呼昌凸n I:由Tt FTP Hi 号A00143T40iM 3B 17 IE 13 1£ 7E 13 3& 13 7S 11 ES 14 11 17 f ;00143150h: DB 16 Bl 19 EOIt Ad 1C «4 20 UD IF F5 ID Ek IB ;' 001437«0h: X2 21 D€ 斗弓25 FC 2€ 74 D9 2F 3? 30 IS2F ? H Q014JT7Qh: OD IF F3 33 Z? 3@ 45 3€ 31 35 Bl 3€ 49 36 E:9 3E ;, OOl^JTBOh: £23T F3 2T C3 35 55 3^ OC 37 5T 2C DF 27 05 30 ;" QQ1齢沖OR: QD 33 DI 2$ ES 22 f6 23 2事29 3S 2Q AA 17 12;, 0«L137o9t); 2Z LZ 7B 16 趺96 87 07 fE 0^ Jij AB Q5 EV ;' 001 的肚0": EE FD 壮 FF f£ET €£ F匚堆B F^Y B00 Q3 ; I OOl^^cOM;Q0 QI B2 QI Ai M6A QS " 0A $1 0D DQ OF B9 17 / , OQl1-37d0h= 1A 15 1C D2 1C 32 IQ 73 LS 1G FC 1A 03IE ;, OOli^^cGh; 2" Z1 632j6 IB 25 OF 2& 池 2k FD 25 fZ 25 7Q 2G ;0Q143TIQM: 8D ?^T?F*27j J :< ur »十: I7TPower User:^niaa一B二广*氐L「*"5 F「立自■』》1淆授Fl Ivg; 1437eOH r1325024. • DOS修説;2012/10/16 21,换算一下就会发现1K并不等于1024这样算,就正好等于8除以1000就CrAtc\Deitft0p\outputtr*2应碗0 r一匕诫住上吕绻EJ二S\卑T兰气山□ n m斗XMatlab 中的表示:田 a c66250Ckl double上面的是个数,正好也是的一半。

相关主题