您好,欢迎来到九壹网。
搜索
您的当前位置:首页WAV文件格式

WAV文件格式

来源:九壹网
WAVE文件格式

一、综述

WAVE文件作为多媒体中使用的声波文件格式之一,它是以RIFF格式为标准的。RIFF是英文ResourceInterchangeFileFormat的缩写,每个WAVE文件的头四个字节便是“RIFF”。Chunk。具体见下图:------------------------------------------------|||||||||RIFFWAVEChunkID='RIFF'RiffType='WAVE'FormatChunkID='fmt'FactChunk(optional)ID='fact'DataChunkID='data'图1|||||||||WAVE文件是由若干个Chunk组成的。按照在文件中的出现位置包括:RIFFWAVEChunk,FormatChunk,FactChunk(可选),Data------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------Wav格式包含Chunk示例其中除了FactChunk外,其他三个Chunk是必须的。每个Chunk有各自的ID,位于Chunk最开始位置,作为标示,而且均为4个字节。并且紧跟在ID后面的是Chunk大小(去除ID和Size所占的字节数后剩下的其他字节数目),4个字节表示,低字节表示数值低位,高字节表示数值高位。下面具体介绍各个Chunk内容。二、具体介绍

1.RIFFWAVEChunk==================================||ID|所占字节数|具体内容||4Bytes|'RIFF'||'WAVE'|||==================================----------------------------------|Size|4Bytes|Type|4Bytes--------------------------------------------------------------------图2RIFFWAVEChunk以'FIFF'作为标示,然后紧跟着为size字段,该size是整个wav文件大小减去ID和Size所占用的字节数,即FileLen-8=Size。然后是Type字段,为'WAVE',表示是wav文件。结构定义如下:structRIFF_HEADER{charszRiffID[4];//'R','I','F','F'DWORDdwRiffSize;charszRiffFormat[4];//'W','A','V','E'};2.FormatChunk====================================================================||ID|Size|FormatTag|Channels|SamplesPerSec|AvgBytesPerSec|BlockAlign|BitsPerSample||字节数|'fmt'具体内容|||||||===>WAVE_FORMAT|||====================================================================|4Bytes|--------------------------------------------------------------------|4Bytes|数值为16或18,18则最后又附加信息|2Bytes|编码方式,一般为0x0001|2Bytes|声道数目,1--单声道;2--双声道|4Bytes|采样频率|4Bytes|每秒所需字节数----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|2Bytes|数据块对齐单位(每个采样需要的字节数)|2Bytes|每个采样需要的bit数|2Bytes|附加信息(可选,通过Size来判断有无)图3FormatChunk以'fmt'作为标示。一般情况下Size为16,此时最后附加信息没有;如果为18则最后多了2个字节的附加信息。主要由一些软件制成的wav格式中含有该2个字节的附加信息。结构定义如下:structWAVE_FORMAT{WORDwFormatTag;WORDwChannels;DWORDdwSamplesPerSec;DWORDdwAvgBytesPerSec;WORDwBlockAlign;----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------WORDwBitsPerSample;};structFMT_BLOCK{charszFmtID[4];//'f','m','t',''DWORDdwFmtSize;WAVE_FORMATwavFormat;};3.FactChunk==================================||ID|所占字节数|具体内容||4Bytes|||'fact'|==================================----------------------------------|Size|4Bytes|data|4Bytes数值为4||--------------------------------------------------------------------图4FactChunkFactChunk是可选字段,一般当wav文件由某些软件转化而成,则包含该Chunk。结构定义如下:structFACT_BLOCK{charszFactID[4];//'f','a','c','t'DWORDdwFactSize;};4.DataChunk==================================||ID|所占字节数|具体内容|4Bytes|||'data'||||==================================----------------------------------|Size|4Bytes|data|--------------------------------------------------------------------图5DataChunkDataChunk是真正保存wav数据的地方,以'data'作为该Chunk的标示。然后是数据的大小。紧接着就是wav数据。根据FormatChunk中的声道数以及采样bit数,wav数据的bit位置可以分成以下几种形式:---------------------------------------------------------------------||单声道|取样1声道0||取样2声道0|||取样3声道0取样2||取样4声道0||||--------------------------------------------------------|8bit量化|||双声道|---------------------------------------------------------------------取样1|--------------------------------------------------------|8bit量化|声道0(左)|声道1(右)|声道0(左)|声道1(右)|---------------------------------------------------------------------|||||||取样1声道0||声道0取样2|声道0||声道0|单声道|--------------------------------------------------------|(低位字节)|(高位字节)|(低位字节)|(高位字节)||取样1||16bit量化|---------------------------------------------------------------------双声道|--------------------------------------------------------|(低位字节)|(高位字节)|(低位字节)|(高位字节)|图6wav数据bit位置安排方式DataChunk头结构定义如下:structDATA_BLOCK{charszDataID[4];//'d','a','t','a'DWORDdwDataSize;};|16bit量化|声道0(左)|声道0(左)|声道1(右)|声道1(右)|---------------------------------------------------------------------三、WAVE文件格式说明表偏移地址00H04H08H0CH10H14H16H18H件头20H2int1CH字节数444442244intintintlongint数据类型charlongintcharchar内容\"RIFF\"标志文件长度\"WAVE\"标志\"fmt\"标志过渡字节(不定)格式类别(10H为PCM形式的声音数据)通道数,单声道为1,双声道为2采样率(每秒样本数),表示每个通道的播放速度,波形音频数据传送速率,其值为通道数×每秒数据位数×每样本的数据位数/8。播放软件利用此值可以估计缓冲区的大小。数据块的调整数(按字节算的),其值为通道数×每样本的数据位值/8。播放软件需要一次处理多个该值大小的字节数据,以便将其值用于缓冲区的调整。22H24H28H244charlongint每样本的数据位数,表示每个声道中各个样本的数据位数。如果有多个声道,对每个声道而言,样本大小都一样。数据标记符"data"语音数据的长度PCM数据的存放方式:样本18位单声道8位立体声16位单声道16位立体声0声道样本20声道0声道(左)1声道(右)0声道(左)1声道(右)0声道低字节0声道(左)低字节节0声道高字节0声道(左)高字节0声道低字节1声道(右)低字节0声道高字节1声道(右)高字WAVE文件的每个样本值包含在一个整数i中,i的长度为容纳指定样本长度所需的最小字节数。首先存储低有效字节,表示样本幅度的位放在i的高有效位上,剩下的位置为0,这样8位和16位的PCM波形样本的数据格式如下所示。样本大小8位PCM16位PCM数据格式unsignedintint最大值22532767最小值0-32767文件头长度加起来是44个字节(用UltraEdit打开一个WAVE文件,数一下就知道了)。如果用以个结构体来定义WAVE文件头应该为:structWAVEFILEHEADER{charchRIFF[4];DWORDdwRIFFLen;charchWAVE[4];charchFMT[4];DWORDdwFMTLen;PCMWAVEFORMATpwf;charchDATA[4];DWORDdwDATALen;};

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- 91gzw.com 版权所有 湘ICP备2023023988号-2

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务