关键词不能为空

当前您在: 主页 > 英语 >

WAV文件解码

作者:高考题库网
来源:https://www.bjmy2z.cn/gaokao
2021-02-01 19:03
tags:

-

2021年2月1日发(作者:离线)





























wav


文件格式分析详解
































































































一、综述







WAV E


文件作为多媒体中使用的声波文件格式之一,它是以


RIFF


格式为标准


的。



RIFF


是英文


Resource Interchange File Format


的缩写,每个


WAVE


文件的头四个



字节便是“


RIFF


”。







WAVE


文件是由若干个


Chunk


组成的。按照在文件中的出现位置包括:


RIFF


WAVE


Chunk, Format Chunk, Fact Chunk(


可选


), Data Chunk


。具体见下图:




------------------------------------------ ------


|














RIFF WAVE Chunk



















|


|














ID



= 'RIFF'






















|


|














RiffType = 'WAVE'

















| < /p>


---------------------------------------- --------


|














Format Chunk






















|


|














ID = 'fmt '























|


-------------- ----------------------------------


|














Fact Chunk(optional)














|


|














ID = 'fact'























|


-------------------------- ----------------------


|














Data Chunk
























|


|














ID = 'data'























|


-------------- ----------------------------------















1



< /p>


Wav


格式包含


Chunk


示例








其中除了


Fact Chunk


外,< /p>


其他三个


Chunk


是必须的。


每个


Chunk


有各自的


ID






Chunk


最开始位置,


作为标示,


而且均为


4


个字节。

< br>并且紧跟在


ID


后面的是


Chu nk





( 去除


ID



Size

< br>所占的字节数后剩下的其他字节数目)



4


个字节表示,


低字节



表示 数值低位,高字节表示数值高位。下面具体介绍各个


Chunk


内容。



PS








所有数值表示均为低字节表示低位,高字节表示高位。




二、具体介绍



RIFF WAVE Chunk






==================================






|








|


所占字节数


|



具体内容





|






==================================






| ID





|



4 Bytes |




'RIFF'





|






----------------------------------






| Size



|



4 Bytes |














|






----------------------------------






| Type



|



4 Bytes |




'WAVE'





|






----------------------------------















2



RIFF WAVE Chunk








'FIFF'


作为标示,


然后紧跟着为


size


字段,



size


是整个


wav


文件大小减去< /p>


ID



Size


所占用的字节数,即


FileLen - 8 = Size


。然后是


Type


字段,为


'WAVE '


,表



示是


wav


文件。







结构定义如下:




struct RIFF_HEADER



{




char szRiffID[4];



// 'R','I','F','F'




DWORD dwRiffSize;




char szRiffFormat[4]; // 'W','A','V','E'



};



Format Chunk






========================================= ======================


=====






|
















|




字节数




|















具体内容


















|






========================================= ======================


=====






| ID













|



4 Bytes



|




'fmt '






























|






--- -------------------------------------------------- ---------------






| Size











|



4 Bytes



|


数值为

< p>
16



18


< p>
18


则最后又附加信息







|






----------------------------------------- ---------------------------



----






| FormatTag






|



2 Bytes



|


编码方式,一般为


0x0001
















|






|






--- -------------------------------------------------- ---------------






|






| Channels







|



2 Bytes



|


声道数目,


1--


单声道;


2--


双声道









|






|






--- -------------------------------------------------- ---------------






|






| SamplesPerSec |



4 Bytes



|


采样频率































|






|






----------------------------------------- ---------------------------






|






|


AvgBytesPerSec|



4


Bytes



|


每秒所需字节数

























|






|===> WAVE_FORMAT






--------------------------- -----------------------------------------






|






| BlockAlign





|



2 Bytes



|


数据块对齐单位


(


每个采样需要的字节数

< p>
) |






|






--------------- -------------------------------------------------- ---






|






| BitsPerSample |



2 Bytes



|


每个采样需要的


bit

< p>




















|






|






--------------------------- -----------------------------------------






|






|
















|



2 Bytes



|


附加信息


(可选,


通过


Size


来判断有无)



|






|






--- -------------------------------------------------- ---------------



----































3



Format Chunk








'fmt '


作为标示。一般情况下


Size



16


,此时最后附加信息没有;如果为


18


则最后多了


2


个字节的附加信息。主要由一些软件制成的


w av


格式中含有该


2


个字


节的



附加信息。







结构定义如下:




struct WAVE_FORMAT



{




WORD wFormatTag;




WORD wChannels;




DWORD dwSamplesPerSec;




DWORD dwAvgBytesPerSec;




WORD wBlockAlign;




WORD wBitsPerSample;



};



struct FMT_BLOCK



{




char



szFmtID[4]; // 'f','m','t',' '




DWORD



dwFmtSize;




WAVE_FORMAT wavFormat;



};




Fact Chunk






==================================






|








|


所占字节数


|



具体内容





|






==================================






| ID





|



4 Bytes |




'fact'





|






----------------------------------






| Size



|



4 Bytes |




数值为


4




|






----------------------------------






| data



|



4 Bytes |














|






----------------------------------















4



Fact Chunk







Fact Chunk


是可选字段,


一 般当


wav


文件由某些软件转化而成,


则包含该


Chunk








结构定义如下:




struct FACT_BLOCK



{




char



szFactID[4]; // 'f','a','c','t'




DWORD



dwFactSize;



};



Data Chunk






==================================






|








|


所占字节数


|



具体内容





|






==================================






| ID





|



4 Bytes |




'data'





|






----------------------------------






| Size



|



4 Bytes |














|






----------------------------------






| data



|











|














|






----------------------------------
















5 Data Chunk







Data Chunk


是真正保存< /p>


wav


数据的地方,


< br>'data'


作为该


Chunk


的标示。


然后是



数据的大小。


紧接着就是


wav


数据。

根据


Format Chunk


中的声道数以及采样


bit


数,



wav


数据的


bit


位置可以分成以下几种形 式:







--------------------------- ------------------------------------------






|




单声道




|





取样


1





|





取样


2





|





取样


3





|





取样


4





|






|












|-------------------------- ------------------------------






|



8bit


量化



|





声道


0





|





声道


0





|





声道


0





|





声道


0





|






--------------- -------------------------------------------------- ----






|




双声道




|











取样


1













|












取样


2












|






|












|-------------------------- ------------------------------






|



8bit


量化



|



声道


0(



)



|



声道


1(



)



|



声道


0(



)



|



声道


1(



)



|






--------------- -------------------------------------------------- ----






|












|











取样


1













|












取样


2












|






|




单声道




|-------------------------- ------------------------------






| 16bit


量化



|





声道


0





|



声道


0







|





声道


0





|



声道


0







|






|












| (


低位字节


)



| (


高位字节


)



| (


低位字节


)



| (


高位字节


)



|






--------------- -------------------------------------------------- ----






|












|


























取样


1


























|






|




双声道




| -------------------------------------------------- ------






| 16bit


量化



|



声道


0(



)



|



声道


0(



)



|



声道


1(



)



|



声道


1(



)



|






|












| (


低位字节


)



| (


高位字节


)



| (


低位字节


)



| (


高位字节


)



|






--------------- -------------------------------------------------- ----




























6 w av


数据


bit


位置安排方式



-


-


-


-


-


-


-


-



本文更新与2021-02-01 19:03,由作者提供,不代表本网站立场,转载请注明出处:https://www.bjmy2z.cn/gaokao/594663.html

WAV文件解码的相关文章