详解wave头格式(尽可能详细并附代码)

合集下载

wave文件格式以及代码

wave文件格式以及代码

wave⽂件格式以及代码⼀、综述WAVE⽂件作为多媒体中使⽤的声波⽂件格式之⼀,它是以RIFF格式为标准的。

RIFF是英⽂Resource Interchange File Format的缩写,每个WAVE⽂件的头四个字节便是“RIFF”。

WAVE⽂件是由若⼲个Chunk组成的。

按照在⽂件中的出现位置包括:RIFF WAVEChunk, Format Chunk, Fact Chunk(可选), Data Chunk。

具体见下图:------------------------------------------------| RIFF WAVE Chunk | ID = 'RIFF' | RiffType = 'WAVE'------------------------------------------------| Format Chunk| ID = 'fmt '------------------------------------------------| Fact Chunk(optional)| ID = 'fact'------------------------------------------------| Data Chunk| ID = 'data'------------------------------------------------图1 Wav格式包含Chunk⽰例其中除了Fact Chunk外,其他三个Chunk是必须的。

每个Chunk有各⾃的ID,位于Chunk最开始位置,作为标⽰,⽽且均为4个字节。

并且紧跟在ID后⾯的是Chunk⼤⼩(去除ID和Size所占的字节数后剩下的其他字节数⽬),4个字节表⽰,低字节表⽰数值低位,⾼字节表⽰数值⾼位。

下⾯具体介绍各个Chunk内容。

Wave文件格式解析

Wave文件格式解析

Wave文件是用于多媒体文件存储的Microsoft RIFF(Resource Interchange File Format 资源交换档案标准)规范的子集之一。

一个RIFF文件以一个文件头(File Header)开始,接着是一系列数据块(data chunk)。

一个Wave文件常常是一个带有一个单“WAVE”块的RIFF文件。

该“WAVE”chunk由两个子快组成,一个“fmt”chunk用于详细说明数据格式,一个“data”chunk包含实际的样本数据。

这种形式我们称为规范形式。

下面我们看一个具体的例子,声音文件如下:
52 49 46 46 24 08 00 00 57 41 56 45 66 6d 74 20 10 00 00 00 01 00 02 00
22 56 00 00 88 58 01 00 04 00 10 00 64 61 74 61 00 08 00 00 00 00 00 00
24 17 1e f3 3c 13 3c 14 16 f9 18 f9 34 e7 23 a6 3c f2 24 f2 11 ce 1a 0d
上图所示例子,该WAVE文件采用PCM编码。

该音频具有双声道,每个样点进行16位量化编码,双声道的一个样点占4字节,存储顺序是每个样点的左右声道交替存储。

对于Data块,根据声道数和采样率的不同情况,布局如下(每列代表8bits):1、8 Bit 单声道:
2、8 Bit 双声道
3、16 Bit 单声道:
4、16 Bit 双声道。

WAV文件格式分析与详解

WAV文件格式分析与详解

WAV文件格式分析与详解作者:王若钧何杉来源:《数字技术与应用》2014年第03期摘要:WAV文件格式信息是对WAV文件编程的重要依据。

揭开WAV文件格式的奥秘是开发功能强大的具有自主知识产权的语音处理软件的关键。

本文结合波形文件的基本知识,较系统地说明了WAV文件的存储原理、文件结构、WAV文件头格式、基于PCM编码的数据组织,内容全面、清楚、准确,还包含了一些新汇集的参数。

可作为开发人员的参考资料。

关键词:文件格式 WAV 编码声音中图分类号:TP311 文献标识码:A 文章编号:1007-9416(2014)03-0093-021 引言WAV文件是在PC机平台上很常见的、最经典的多媒体音频文件,最早于1991年8月出现在Windows 3.1操作系统上,文件扩展名为WAV,是WaveFom的简写,也称为波形文件,可直接存储声音波形,还原的波形曲线十分逼真。

WAV文件格式简称WAV格式是一种存储声音波形的数字音频格式,是由微软公司和IBM联合设计的,经过了多次修订,可用于Windows,Macintosh,Linix等多种操作系统,详述如下。

2 波形文件的基础知识2.1 波形文件的存储过程声源发出的声波通过话筒被转换成连续变化的电信号,经过放大、抗混叠滤波后,按固定的频率进行采样,每个样本是在一个采样周期内检测到的电信号幅度值;接下来将其由模拟电信号量化为由二进制数表示的积分值;最后编码并存储为音频流数据。

有的应用为了节省存储空间,存储前,还要对采样数据先进行压缩。

2.2 WAV文件的编码编码包括了两方面内容,一是按一定格式存储数据,二是采用一定的算法压缩数据。

WAV格式对音频流的编码没有硬性规定,支持非压缩的PCM(Puls Code Modulation)脉冲编码调制格式,还支持压缩型的微软自适应差分脉冲编码调制Microsoft ADPCM(Adaptive Differential Puls Code Modulation)、国际电报联盟(International Telegraph Union)制定的语音压缩标准ITU G.711 a-law、ITU G.711-law、IMA ADPCM、ITU G.723 ADPCM (Yamaha)、GSM 6.10、ITU G.721 ADPCM编码和其它压缩算法。

详解wave头格式(尽可能详细并附代码)

详解wave头格式(尽可能详细并附代码)

整理网上和读书时的资料,结合自己的实际经验,给出wav头格式的解释和源代码,既是对自己的总结,同时又服务大家。

另外在给出几个实际例子,如果看了这篇文档还不能正确写出wave文件,那就要吊起来打了^_^。

——flywen 2010-10-13参考网址一:/sshcx/archive/2007/05/01/1593923.aspx参考网址二:/share/detail/15909594WAVE 文件作为多媒体中使用的声波文件格式之一,它是以RIFF格式为标准的。

RIFF是英文Resource Interchange File Format的缩写,每个WAVE文件的头四个字节便是"RIFF"。

WAVE 文件由文件头和数据体两大部分组成。

其中文件头又分为RIFF/WAV文件 标识段和声音数据格式说明段两部分。

常见的声音文件主要有两种,分别对应于单声道(11.025KHz 采样率、8Bit的采样值)和双声道(44.1KHz采样率、16Bit的采样值)。

采样率是指:声音信号在"模→数"转换过程中单位时间内采样的次数。

采样值是指每一次采样周期内声音模拟信号的积分值。

[!21ki@][@21ki!]对于单声道声音文件,采样数据为八位的短整数(short int 00H-FFH);而对于双声道立体声声音文件,每次采样数据为一个16位的整数(int),高八位和低八位分别代表左右两个声道。

WAVE文件数据块包含以脉冲编码调制(PCM)格式表示的样本。

WAVE文件是由样本组织而成的。

在单声道WAVE文件中,声道0代表左声道,声道1代表右声道。

在多声道WAVE文件中,样本是交替出现的。

参考网址一和二中都给出了wav的头定义,但有一个小区别,一中将这个44个字节作为一个大的头,给定在一个结构体中,而二中则是按照四个不同的chunk处理的,所以就给了四个结构体,后面我的代码也是根据二来写的,个人觉得这样比较清晰,不过这纯属个人感觉。

Wave文件格式解析

Wave文件格式解析

Wave文件是用于多媒体文件存储的Microsoft RIFF(Resource Interchange File Format 资源交换档案标准)规范的子集之一。

一个RIFF文件以一个文件头(File Header)开始,接着是一系列数据块(data chunk)。

一个Wave文件常常是一个带有一个单“WAVE”块的RIFF文件。

该“WAVE”chunk由两个子快组成,一个“fmt”chunk用于详细说明数据格式,一个“data”chunk包含实际的样本数据。

这种形式我们称为规范形式。

下面我们看一个具体的例子,声音文件如下:
52 49 46 46 24 08 00 00 57 41 56 45 66 6d 74 20 10 00 00 00 01 00 02 00
22 56 00 00 88 58 01 00 04 00 10 00 64 61 74 61 00 08 00 00 00 00 00 00
24 17 1e f3 3c 13 3c 14 16 f9 18 f9 34 e7 23 a6 3c f2 24 f2 11 ce 1a 0d
上图所示例子,该WAVE文件采用PCM编码。

该音频具有双声道,每个样点进行16位量化编码,双声道的一个样点占4字节,存储顺序是每个样点的左右声道交替存储。

对于Data块,根据声道数和采样率的不同情况,布局如下(每列代表8bits):1、8 Bit 单声道:
2、8 Bit 双声道
3、16 Bit 单声道:
4、16 Bit 双声道。

WAV文件的头信息

WAV文件的头信息

{
char cRiffFlag[4];
UIN32 nFileLen;
char cWaveFlag[4];
char cFmtFlag[4];
char cTransition[4];
UIN16 nFormatTag ;
UIN16 nChannels;
04H 4 long int 文件长度
08H 4 char "WAVE"#34;标志
10H 4 过渡字节(不定)
14H 2 int 格式类别(10H为PCM形式的声音数据)
16H 2 int 通道数,单声道为1,双声道为2
18H 2 int 采样率(每秒样本数),表示每个通道的播放速度, (Hz) sample frequency
UIN16 nSamplesPerSec;
UIN32 nAvgBytesperSec;
UIN16 nBlockAlign;
UIN16 nBitNumPerSample;
char cDataFlag[4];
UIN16 nAudioLength;
} WAVEFORMAT;
16位PCM int 32767 -32767
///////////////////////////////////////////////////////////////////////下面是常用来表示的数据结构
unsigned short tag; /* MS PCM = 1 */
1CH 4 long int 波形音频数据传送速率,其值为通道数×每秒样本数×每样本的数据位数(bit)/8。播放软件利用此值可以估计缓冲区的大小。
20H 2 int 数据块的调整数(按字节算的),其值为通道数×每样本的数据位值/8。播放软件需要一次处理多个该值大小的字节数据,以便将其值用于缓冲区的调整。

解读Wave文件头结构

解读Wave文件头结构

解读Wave,文件头解释,可以用16位编辑器UltraEdit打开,然后可以观察文件的结构。

我发现对应C语言里面的字WORD(32位),16进制文件对应2个字节(Byte),而DWORD(64位),对应4个字节。

然后顺便普及一下16进制文件的存储规律,对于WORD,先存储低位字节,然后存储高位字节,而DWORD,则先存储低两位的低位,然后是低两位的高位,然后是高两位的低位,然后是高两位的高位。

介绍一下W A VE文件的结构:标志符(RIFF)数据大小格式类型("W A VE")"fmt"Sizeof(PCMW A VEFORMAT)PCMW A VEFORMAT"data"声音数据大小声音数据查到C语言中对应的W A V的文件头结构如下:Typedef struct{W A VEFORMAT wf;//波形格式;WORD wBitsPerSample;//W A VE文件的采样大小;}PCMW A VEFORMAT;W A VEFORMAT结构定义如下:typedef struct{WORD wFormatag;//编码格式,包括W A VE_FORMAT_PCM,W A VEFORMAT_ADPCM等WORD nChannls;//声道数,单声道为1,双声道为2;DWORD nSamplesPerSec;//采样频率;DWORD nAvgBytesperSec;//每秒的数据量;WORD nBlockAlign;//块对齐;}W A VEFORMAT;然后我们根据实际的一个文件的文件头进行对比分析,然后大家就应该明白了:首先是一串“52 49 46 46”这个是Ascii字符“RIFF”,这部分是固定格式,表明这是一个W A VE文件头。

然后是“E4 3C 00 00”,这个是我这个W A V文件的数据大小,记住这个大小是包括头文件的一部分的,包括除了前面8个字节的所有字节,也就等于文件总字节数减去8。

WAVE文件格式分析

WAVE文件格式分析

WAVE文件格式分析
WAVE文件格式是一种用于存储音频数据的文件格式,它是由微软和IBM共同开发的,是Windows操作系统中普遍使用的音频文件格式之一、WAVE是英文"Waveform Audio File Format"的缩写,意为波形音频文件格式。

在WAVE文件的数据部分,音频采样数据以二进制形式存储。

每一个采样值表示了音频信号在特定时间点上的振幅。

振幅大小由采样的位数决定,常见的位数包括8位、16位、24位和32位。

位数越大,表示的振幅范围越广,音质也越高,但同时也会占用更多的存储空间。

此外,WAVE文件还支持多通道音频数据的存储,如立体声、环绕声等。

多通道的音频数据将各个通道的音频采样值依次交错存储,以便于播放软件正确解析和处理多通道的音频数据。

总结起来,WAVE文件格式是一种无损音频文件格式,能够保存音频的完整信息。

它采用了无压缩的PCM编码方式,可以保存各种音频属性的数值,并支持多通道的音频数据存储。

此外,WAVE文件还支持附加信息的存储,提供了便于操作和管理音频文件的功能。

因此,WAVE文件格式在音频文件存储与处理中具有广泛的应用价值。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

整理网上和读书时的资料,结合自己的实际经验,给出wav头格式的解释和源代码,既是对自己的总结,同时又服务大家。

另外在给出几个实际例子,如果看了这篇文档还不能正确写出wave文件,那就要吊起来打了^_^。

——flywen 2010-10-13参考网址一:/sshcx/archive/2007/05/01/1593923.aspx参考网址二:/share/detail/15909594WAVE 文件作为多媒体中使用的声波文件格式之一,它是以RIFF格式为标准的。

RIFF是英文Resource Interchange File Format的缩写,每个WAVE文件的头四个字节便是"RIFF"。

WAVE 文件由文件头和数据体两大部分组成。

其中文件头又分为RIFF/WAV文件 标识段和声音数据格式说明段两部分。

常见的声音文件主要有两种,分别对应于单声道(11.025KHz 采样率、8Bit的采样值)和双声道(44.1KHz采样率、16Bit的采样值)。

采样率是指:声音信号在"模→数"转换过程中单位时间内采样的次数。

采样值是指每一次采样周期内声音模拟信号的积分值。

[!21ki@][@21ki!]对于单声道声音文件,采样数据为八位的短整数(short int 00H-FFH);而对于双声道立体声声音文件,每次采样数据为一个16位的整数(int),高八位和低八位分别代表左右两个声道。

WAVE文件数据块包含以脉冲编码调制(PCM)格式表示的样本。

WAVE文件是由样本组织而成的。

在单声道WAVE文件中,声道0代表左声道,声道1代表右声道。

在多声道WAVE文件中,样本是交替出现的。

参考网址一和二中都给出了wav的头定义,但有一个小区别,一中将这个44个字节作为一个大的头,给定在一个结构体中,而二中则是按照四个不同的chunk处理的,所以就给了四个结构体,后面我的代码也是根据二来写的,个人觉得这样比较清晰,不过这纯属个人感觉。

下面就是根据四个结构体写的代码,注意FACT不是必须的,可以不用写入头,不写的话就是44个字节,写的话wave的头是56个字节。

一:源代码(参考二中也有比较详细的读wave头的代码)#if !defined(_WAV_INFO_)#define _WAV_INFO_// 一些和声音数据相关的宏#define SAMPLE_RATE 22050 // sample rate,每秒22050个采样点 #define QUANTIZATION 0x10 // 16bit量化,#define BYTES_EACH_SAMPLE 0x2 // QUANTIZATION / 8, 所以每个采样点、// 是short,占个2个字节#define CHANNEL_NUN 0x1 // 单声道#define FORMAT_TAG 0x1 // 线性PCM// 一个wave file包括四个CHUNK,除了FACT之外,其它是必须的,并且第一个RIFF是整个文件的头,// 所以别名为WAV_HEADER,而不是RIFF/*------------------------Wave File Structure ------------------------------------ */ typedef struct RIFF_CHUNK{char fccID[4]; // must be "RIFF"unsigned long dwSize; // all bytes of the wave file subtracting 8,// which is the size of fccID and dwSize char fccType[4]; // must be "WAVE"}WAVE_HEADER;// 12 bytestypedef struct FORMAT_CHUNK{char fccID[4]; // must be "fmt "unsigned long dwSize; // size of this struct, subtracting 8, which// is the sizeof fccID and dwSize unsigned short wFormatTag; // one of these: 1: linear,6: a law,7:u-law unsigned short wChannels; // channel numberunsigned long dwSamplesPerSec; // sampling rateunsigned long dwAvgBytesPerSec; // bytes number per secondunsigned short wBlockAlign; // 每样本的数据位数(按字节算), 其值为:通道// 数*每样本的数据位值/8,播放软件需要一次处// 理多个该值大小的字节数据, 以便将其值用于// 缓冲区的调整每样本占几个字节:// NumChannels * uiBitsPerSample/8unsigned short uiBitsPerSample; // quantization}FORMAT;// 24 bytes// The fact chunk is required for all new WAVE formats.// and is not required for the standard WAVE_FORMAT_PCM files// 也就是说,这个结构体目前不是必须的,一般当wav文件由某些软件转化而成,则包含该Chunk// 但如果这里写了,则必须是如下的结构,并且在四个结构体中的位置也要放在第三typedef struct {char fccID[4]; // must be "fact"unsigned long id; // must be 0x4unsigned long dwSize; // 暂时没发现有啥用}FACT;// 12 bytes// 数据结构typedef struct {char fccID[4]; // must be "data"unsigned long dwSize; // byte_number of PCM data in byte}DATA;// 8 bytes/*------------------------Wave File Structure ------------------------------------ */void WriteWaveHeader(FILE *fpwav,long length){WAVE_HEADER WaveHeader;FORMAT WaveFMT;DATA WaveData;FACT WaveFact;memset(&WaveHeader, 0, sizeof(WAVE_HEADER));memcpy(WaveHeader.fccID, "RIFF", 4);memcpy(WaveHeader.fccType, "WAVE", 4);// dwSize 是整个wave文件的大小(字节数,但不包括不包括HEADER中的前面两个结构:// HEADER.fccID和HEAD.dwSize)// WaveHeader.dwSize = length + 0x24; // 如果不写入fact,就是36个字节,// 44- 8 = 36个 WaveHeader.dwSize = length + 0x30; // 如果写入fact,就是48 个bytesmemset(&WaveFMT, 0, sizeof(FORMAT));memcpy(WaveFMT.fccID, "fmt ", 4);WaveFMT.dwSize = 0x10;WaveFMT.dwSamplesPerSec = SAMPLE_RATE;WaveFMT.dwAvgBytesPerSec = CHANNEL_NUN * SAMPLE_RATE * BYTES_EACH_SAMPLE;WaveFMT.wChannels = CHANNEL_NUN;WaveFMT.uiBitsPerSample = QUANTIZATION;WaveFMT.wFormatTag = FORMAT_TAG;WaveFMT.wBlockAlign = BYTES_EACH_SAMPLE;memset(&WaveFact, 0, sizeof(FACT));memcpy(WaveFact.fccID, "fact", 4);WaveFact.dwSize = length; // 这个值不知道什么意思WaveFact.id = 0x4;memset(&WaveData, 0, sizeof(DATA));memcpy(WaveData.fccID, "data", 4);WaveData.dwSize = length;fwrite(&WaveHeader, sizeof(WAVE_HEADER), 1, fpwav);fwrite(&WaveFMT, sizeof(FORMAT), 1, fpwav);fwrite(&WaveFact, sizeof(FACT), 1, fpwav); // fact不是必须的fwrite(&WaveData, sizeof(DATA), 1, fpwav);}void WriteWavfile(FILE *fp, short *pSpeechData, int length){//write the header of wavWriteWaveHeader(fp, length * BYTES_EACH_SAMPLE);//write the datafwrite(pSpeechData, sizeof(short), length, fp);}#endif二:数据存储结构:根据声音文件的声道和量化数的不同,在头之后的数据存储有不同的格式,如下面:/share/detail/15909594---------------------------------------------------------------------| 单声道| 取样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(右) || | (低位字节) | (高位字节) | (低位字节) | (高位字节) |---------------------------------------------------------------------图:Wav的data数据的bit位置可能的几种形式三:各种头示例常用语音编码的WAVE文件头格式剖析--各种编码/content/10/0812/10/722458_45443101.shtml表18KHz采样、16比特量化的线性PCM语音信号的WAVE文件头格式表(共44字节)偏移地址字节数数据类型内容文件头定义为00H 4 char "RIFF" char riff_id[4]="RIFF"04H 4 long int 文件总长-8 long int size0=文总长-808H 8 char "WAVEfmt " char wave_fmt[8]10H 4 long int 10 00 00 00H(PCM) long int size1=0x1014H 2 int 01 00H int fmttag=0x0116H 2 int int channel=1 或218H 4 long int 采样率long int samplespersec1CH 4 long int 每秒播放字节数long int bytepersec20H 2 int 采样一次占字节数int blockalign=声道数*量化数/822H 2 int 量化数int bitpersamples=8或1624H 4 char "data" char data_id="data"28H 4 long int 采样数据字节数long int size2=文长-442CH 到文尾char 采样数据表28KHz采样、8比特A律量化的PCM语音信号的WAVE文件头格式表(共58字节)偏移地址字节数数据类型内容文件头定义为00H 4 char "RIFF" char riff_id[4]="RIFF"04H 4 long int 文件总长-8 long int size0=文总长-808H 8 char "WAVEfmt " char wave_fmt[8]10H 4 long int 12000000H(ALAW) long int size1=0x1214H 2 int 06 00H int fmttag=0x0616H 2 int 声道数int channel=1 或218H 4 long int 采样率long int samplespersec1CH 4 long int 每秒播放字节数long int bytepersec20H 2 int 采样一次占字节数int blockalign=0x0122H 4 long int 量化数long int bitpersamples=826H 4 char "fact" char wave_fact="fact"2AH 8 char 0400000000530700H定char temp32H 4 char "data" char wave_data="data"36H 4 long int 采样数据字节数lont int size2=文长-58表38KHz采样、8比特U律量化的PCM语音信号的WAVE文件头格式表(共58字节)偏移地址字节数数据类型内容文件头定义为00H 4 char "RIFF" char riff_id[4]="RIFF"04H 4 long int 文件总长-8 long int size0=文总长-808H 8 char "WAVEfmt " char wave_fmt[8]10H 4 long int 12000000H(ULAW) long int size1=0x1214H 2 int 07 00H int fmttag=0x0716H 2 int 声道数int channel=1 或218H 4 long int 采样率long int samplespersec1CH 4 long int 每秒播放字节数long int bytepersec20H 2 int 采样一次占字节数int blockalign=0x0122H 4 long int 量化数long int bitpersamples=826H 4 char "fact" char wave_fact="fact"2AH 8 char 0400000000530700H定char temp32H 4 char "data" char wave_data="data"36H 4 long int 采样数据字节数lont int size2=文长-58表4ADPCM语音编码后的WAVE文件头格式表(共90字节)偏移地址字节数数据类型内容文件头定义为00H 4 char "RIFF" char riff_id[4]="RIFF"04H 4 long int 文件总长-8 long int size0=文总长-808H 8 char "WAVEfmt " char wave_fmt[8]10H 4 long int 32000000H(ADPCM) long int size1=0x3214H 2 int 02 00H int fmttag=0x0216H 2 int 声道数int channel=1 或218H 4 long int 采样率long int samplespersec1CH 4 long int 每秒播放字节数long int bytepersec20H 2 int 采样一次占字节数int blockalign=声道数*量化数/822H 2 int 量化数int bitpersamples=424H 34 char 固定字节char temp146H 4 char "fact" char wave_fact="fact"4AH 8 char 0400000004930600H定char temp252H 4 char "data" char wave_data="data"56H 4 long int 采样数据字节数lont int size2=文长-905AH 到文尾采样数据表5GSM语音编码后的WAVE文件头格式表(共60字节)偏移地址字节数数据类型内容文件头定义为00H 4 char "RIFF" char riff_id[4]="RIFF"04H 4 long int 文件总长-8 long int size0=文总长-808H 8 char "WAVEfmt " char wave_fmt[8]10H 4 long int 14000000H(GSM) long int size1=0x1414H 2 int 31 00H int fmttag=0x3116H 2 int 声道数int channel=1 或218H 4 long int 采样率long int samplespersec1CH 4 long int 每秒播放字节数long int bytepersec20H 8 char 4100000002004001H定char temp128H 8 char 6661637404000000H定char temp230H 4 char 40 E2 05 00H定char temp334H 4 char "data" char wave_data="data"38H 4 long int 采样数据字节数lont int size2=文长-603CH 到文尾采样数据表6SBC语音编码后的WAVE文件头格式表(共58字节)偏移地址字节数数据类型内容文件头定义为00H 4 char "RIFF" char riff_id[4]="RIFF"04H 4 long int 文件总长-8 long int size0=文总长-808H 8 char "WAVEfmt " char wave_fmt[8]10H 4 long int 12000000H(SBC) long int size1=0x1214H 2 int 71 00H int fmttag=0x7116H 2 int 声道数int channel=1 或218H 4 long int 采样率long int samplespersec1CH 4 long int 每秒播放字节数long int bytepersec20H 2 int 采样一次占字节数int blockalign=0x2522H 4 long int 量化数long int bitpersamples=1626H 4 char "fact" char wave_fact="fact"2AH 8 char 0400000076280400H定char temp32H 4 char "data" char wave_data="data"36H 4 long int 采样数据字节数lont int size2=文长-59表7CELP语音编码后的WAVE文件头格式表(共58字节)偏移地址字节数数据类型内容文件头定义为00H 4 char "RIFF" char riff_id[4]="RIFF"04H 4 long int 文件总长-8 long int size0=文总长-808H 8 char "WAVEfmt " char wave_fmt[8]10H 4 long int 12000000H(CELP) long int size1=0x1214H 2 int 70 00H int fmttag=0x7016H 2 int 声道数int channel=1 或218H 4 long int 采样率long int samplespersec1CH 4 long int 每秒播放字节数long int bytepersec20H 2 int 采样一次占字节数int blockalign=0x0C22H 4 long int 量化数long int bitpersamples=1626H 4 char "fact" char wave_fact="fact"2AH 8 char 0400000060520700H定char temp32H 4 char "data" char wave_data="data"36H 4 long int 采样数据字节数lont int size2=文长-58WAVEFORMATEXtypedef struct{WORD wFormatTag; WORD nChannels; DWORD nSamplesPerSec; DWORD nAvgBytesPerSec; WORD nBlockAlign; WORD wBitsPerSample; WORD cbSize; } WAVEFORMATEX;具体参数解释如下:wFormatTag:波形数据的格式,定义在MMREG.H文件中nChannels:波形数据的通道数:单声道或立体声nSamplesPerSec:采样率,对于PCM格式的波形数据,采样率有8.0 kHz,11.025kHz,22.05 kHz,44.1 kHz等nAvgBytesPerSec:数据率,对于PCM格式的波形数据,数据率等于采样率乘以每样点字节数nBlockAlign:每个样点字节数wBitsPerSample:采样精度,对于PCM格式的波形数据,采样精度为8或16cbSize:附加格式信息的数据块大小概念2、定义设备头结构WAVEHDR定义了指向波形数据缓冲区的设备头。

相关文档
最新文档