windows声音应用程序开发指南--第2章--WAV文件格式课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《windows声音应用程序开发指南--第2章--WAV文件格式课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- windows 声音 应用程序 开发 指南 _ _WAV 文件格式 课件
- 资源描述:
-
1、第2章 WAV文件格式第第2 2章章 WAVWAV文件格式文件格式2.1 WAV文件格式文件格式1,2,3,42.2 保存为保存为WAV文件格式文件格式1,2,3,4,52.3 压缩压缩WAVE音频音频52.4 本本 章章 小小 结结第2章 WAV文件格式2.1 WAV文件格式文件格式1,2,3,4 2.1.1 RIFF文件和WAV文件格式 1RIFF文件 RIFF可以看做是一种树状结构,其基本构成单位为“块”(Chunk),它犹如树状结构中的节点。每个Chunk由“辨别码”(ID)、“数据大小”(Size)和“数据”(Data)所组成,如表2-1所示。第2章 WAV文件格式表2-1 RIFF
2、文件格式辨别码(ID)用4字符(ASCII码)表示用于表示Chunk“数据”的类型。如果一个应用程序不能识别该“辨别码”,则将忽略由Chunk“大小”所指定的Chunk“数据”和附加的数据数据大小(Size)用32位无符号数值表示用于表示Chunk“数据”的长度和Chunk“数据”后附加的数据长度(单位为Byte),这一值还包括Chunk“辨别码”和Chunk“大小”所占用的空间(共8Byte)数据(Data)二进制数据,数据可以是固定长度也可以是可变长度。相对于RIFF文件起始位置,数据是“字对齐”(Word-aligned)的,这样可以提高数据访问速度。如果数据的字节长度为奇数,那么在数据
3、后面要附加一个字节,以保持“字对齐”第2章 WAV文件格式 一般而言,Chunk本身并不允许内部再包含Chunk,但有两种情况例外,即分别以“RIFF”及“LIST”为辨别码的Chunk可以包含子Chunk。以“RIFF”为辨别码的Chunk包含子Chunk的格式如图2-1所示。图中前4个字符第2章 WAV文件格式图2-1 RIFF文件结构RIFF Chunk辨别码RIFF Chunk数据长度RIFF Chunk数据RIFF略(formTypechunk)RIFF中的子Chunk第2章 WAV文件格式 2WAV文件 WAV为WAVEFORM(波形)的缩写。WAV文件的结构如图2-2所示,RIF
4、F Chunk中子Chunk的“格式辨别码”为“WAVE”。整个文件由两个Chunk所组成:辨别码“fmt”(注意,最后一个是空白字符)及“data”。第2章 WAV文件格式图2-2 WAV文件结构RIFFxxxxWAVEfmtPCMWAVEFORMAT结构大小PCMWAVEFORMAT结构dataxxxxWAVE声音数据第2章 WAV文件格式 在“fmt”的Chunk下包含了一个PCMWAVEFORMAT数据结构,该结构与前一章中的WAVEFORMATEX结构类似,其定义如下:typedef struct waveformat-tag WORDwFormatTag;WORD nChannel
5、s;DWORDnSamplesPerSec;DWORD nAvgBytesperSec;WORDnBlockAlign;WAVEFORMAT;第2章 WAV文件格式typedef struct pcmwaveformat-tag WAVEFORMAT wf;WORD wBitsPerSample;PCMWAVEFORMAT;第2章 WAV文件格式 其意义分别如下:wFormatTag:记录着此声音的格式代号,例如WAVE_FORMAT_PCM,WAVE_FORMAT_ADPCM等等。nChannels:记录声音的声道数。nSamp1esPerSec:记录每秒采样数(采样率)。nAvgBytes
6、PerSec:记录每秒的平均数据量。nBlockA1ign:记录块的对齐单位。wBitsPerSample:记录每个采样样本所需的位元数。第2章 WAV文件格式 “data”Chunk包含真正的声音数据。Windows目前仅提供WAVE_FORMAT_PCM一种数据格式,其所代表的意义是脉冲编码调制(PCM,Pu1se Code Modulation)。用编辑工具UltraEdit查看WAV文件的文件头,如图2-3所示。表2-2以数据在文件中的存放位置说明了WAV文件格式,其中偏移地址是相对于文件头的地址。第2章 WAV文件格式图2-3 WAV文件的文件头第2章 WAV文件格式表2-2 WAV
7、文件格式说明表偏移地址字节数数据类型内 容 说 明00H4Char“RIFF”标志04H4Long文件长度08H4Char“WAVE”标志0CH4Char“fmt”标志10H4LongWAVEFORMAT结构的长度14H2Int格式类别(例如,10H为PCM形式的声音数据)16H2Int声道数,单声道为1,双声道为218H4Long采样率(每秒样本数),表示每个声道的播放速度1CH4long int波形音频数据传送速率,其值为(声道数每秒数据位数每样本的数据位数)/8。播放软件利用此值可以估计缓冲区的大小第2章 WAV文件格式偏移地址字节数数据类型内 容 说 明20H2Int数据块的调整数(按
8、字节算的),其值为(声道数每样本的数据位数)/8。播放软件需要一次处理多个该值大小的字节数据,以便将其值用于缓冲区的调整22H2Int每样本的数据位数,表示每个声道中各个样本的数据位数。如果有多个声道,对每个声道而言,样本大小都一样24H4Char数据标记符“data”28H4long int声音数据的长度28H以后 long int声音数据第2章 WAV文件格式 Windows定义了在“data”Chunk中数据的存放情形,表2-3列出了四种不同声道数及取样所需的位元数以及位元位置的安排。其中:对于8位单声道,每个样本数据由8位(bit)表示;对于8位立体声,每个声道的数据由一个8位(bit
9、)数据表示,且第一个8位(bit)数据表示0声道(左)数据,紧随其后的8位(bit)数据表示1声道(右)数据;对于16位单声道,每个样本数据由16位(bit)表示;第2章 WAV文件格式 对于16位立体声,每个声道的数据由一个16位(bit)数据表示,且第一个16位(bit)数据表示0声道(左)数据,紧随其后的16位(bit)数据表示1声道(右)数据。第2章 WAV文件格式表2-3 PCM数据的存放方式 样本1(1 Byte)样本2(1 Byte)样本3(1Byte)样本4(1Byte)8位单声道0声道0声道0声道0声道8位立体声0声道(左)1声道(右)0声道(左)1声道(右)样本1(2 By
10、te)样本2(2Byte)16位单声道0声道低字节0声道高字节0声道低字节0声道高字节16位立体声0声道(左)低字节0声道(左)高字节1声道(右)低字节1声道(右)高字节第2章 WAV文件格式 WAV文件的每个样本值包含在一个整数i中,i的长度为容纳指定样本长度所需的最小字节数。首先存储低有效字节,表示样本幅度的位放在i的高有效位上,剩下的位置为0,这样8位和16位的PCM波形样本的数据格式如表2-4所示。第2章 WAV文件格式表2-4 PCM数据的存放方式样本大小数据格式最大值最小值静 音8位PCMunsigned int225012816位PCMint32 767-32 7670第2章 W
11、AV文件格式 2.1.2 WAV文件信息的具体应用 WAV文件包括了对原始声音的高速率采样数据,并且以WAVE_PCM_FORMAT格式的形式保存。在读出WAV文件头信息之后,接着的数据就是原始声音的高速率采样信息。我们可以在Visual C+程序中对这些信息作多方面的处理,其中包括:第2章 WAV文件格式 波形显示 我们可以以时间振幅的方式显示出原始声音的波形,这是最简单同时也是最直接的信息处理方式。在时间范围内,我们可以观察该信号波形是否连续,中间是否有跳变等。频谱显示 我们可以以频率振幅的方式显示出原始声音的频谱,在对原始信号经过FFT变换之后,可以得到该信号的频谱,进而得到该信号的能量
12、集中带、分布特征、谱对称系数等等。第2章 WAV文件格式 用于语音信号识别 讲话者的个体识别是语音信号处理的一个重要内容,但它的一个前提条件是必须提供语音信号的数字波形。通常的方法是将原始的语音信号进行放大、抗混叠滤波、A/D采样、数值编码,最终得到语音信号的数字波形。第2章 WAV文件格式2.2 保存为保存为WAV文件格式文件格式1,2,3,4,5 2.2.1 创建一个空文件 用系统函数CreateFile创建一个空文件,其程序如下:#include FILE*m_fp=NULL;/文件句柄 DWORDdwFileSize=0;/文件长度第2章 WAV文件格式DWORD dwTotalAud
13、ioLength=0;/声音数据长度 HANDLEOpenFileToWrite(LPCTSTR lpFileName)SECURITY_ATTRIBUTESsa;sa.nLength=sizeof(SECURITY_ATTRIBUTES);sa.lpSecurityDescriptor=NULL;sa.bInheritHandle=FALSE;return CreateFile(lpFileName,GENERIC_WRITE,0,&sa,C R E A T E _ A L W A Y S,FILE_ATTRIBUTE_NORMAL,NULL);第2章 WAV文件格式 2.2.2 写WAV文
14、件头 首先,要得到声音采样数据的相关信息,通常这些信息存储在一个WAVEFORMATEX结构中,用系统函数WriteFile将文件头信息写入新创建的文件。其程序如下:BOOL WriteWaveFileHeader(char*DesFilename,WAVEFORMATEX wfx)long cbFmtChunk,cbDataChunk;第2章 WAV文件格式 /m_fp在前面已定义过m_fp=fopen(DesFilename,w+b);if(!m_fp)return FALSE;/打开文件出错cbFmtChunk=sizeof(WAVEFORMATEX)+wfx.cbSize;/WAVEF
15、ORMATEX结构长度dwFileSize=46;/46为文件头的长度dwTotalAudioLength=0;cbDataChunk=dwTotalAudioLength;第2章 WAV文件格式 fwrite(RIFF,1,sizeof(DWORD),m_fp);/RIFF标识符(占用4 Byte)fwrite(&dwFileSize,1,sizeof(DWORD),m_fp);/文件长度(占用4 Byte)fwrite(WAVE,1,sizeof(DWORD),m_fp);/WAVE标识符(占用4 Byte)fwrite(fmt,1,sizeof(DWORD),m_fp);/fmt标识符(
16、占用4 Byte)fwrite(&cbFmtChunk,1,sizeof(DWORD),m_fp);/WAVEFORMAT结构的长度(4Byte)第2章 WAV文件格式 f w r i t e (&w f x,1,c b F m t C h u n k,m _ f p );/WAVEFORMAT结构的内容(18Byte)fwrite(data,1,sizeof(DWORD),m_fp);/data标识符(占用4 Byte)fwrite(&cbDataChunk,1,sizeof(DWORD),m_fp);/声音数据长度(占用4 Byte)return TRUE;第2章 WAV文件格式 2.2.
17、3 写声音数据 将给定缓冲区中声音数据写入WAV文件,其程序如下:BOOL WriteWaveFileData(LPBYTE lpBufferData,DWORD dwDataSize)if(dwDataSize=0)第2章 WAV文件格式 return FALSE;elsefwrite(lpBufferData,1,dwDataSize,m_fp);dwFileSize+=dwDataSize;/文件长度随着增加dwTotalAudioLength=dwTotalAudioLength+dwDataSize;/声音数据长度随着增加return TRUE;第2章 WAV文件格式fseek(m_
18、fp,42,SEEK_SET);/设置文件指针fwrite(&dwTotalAudioLength,1,sizeof(DWORD),m_fp);/写入声音数据长度fclose(m_fp);/关闭文件m_fp=NULL;return true;第2章 WAV文件格式2.3 压缩压缩WAVE音频音频5 2.3.1 CODECs介绍 Microsoft的Windows 95/98/NT/2000操作系统都具有能通过安装的CODECs处理编码的WAVE格式的音频和视频数据流的能力。一个CODEC是一小段用于编码(Code)及解码(DECode)数据流的代码(因此得名CODEC)。许多CODECs既能编
19、码又能解码。而一些CODECs仅能用于解码,这样私有数据可以在系统上播放,但数据格式不能在系统上创建。第2章 WAV文件格式 2.3.2 系统中有什么CODECs Microsoft的Windows 95/98/NT/2000本身附带有几种标准的CODECs,也可由系统中所安装的应用程序安装其它的 CODECs。例如,DSP Group公司的TrueSpeech CODEC随Windows 95发送,因此,用户写的任何基于Windows 95的应用程序都可使用此CODEC(只要用户没有在控制面板中删除它或禁止它)。第2章 WAV文件格式 所有安装的CODECs都由音频编码解码器(ACM)管理(
20、见图2-4)。我们可以用一段小程序从ACM中查到安装了哪些CODECs,它们都支持什么格式。也可双击控制面板中的多媒体选项,选择高级标签,就能看到系统中所安装的CODECs。下面用一段程序介绍如何应用ACM。首先从调用ACM编程接口所需的包含的头文件开始:第2章 WAV文件格式#include#include#include /多媒体注册#include /音频编码解码器#include 第2章 WAV文件格式图2-4 音频编码解码器 第2章 WAV文件格式 mmsystem.h头文件包含了Windows支持的大部分的多媒体功能,但不包含ACM接口及任何厂商定义。mmreg.h包含了对不同厂商
21、设计的各种WAVE数据类型的格式标签的定义。它也包含了用于处理不同的WAVE数据类型的结构(基于WAVEFORAMTEX)的定义。msacm.h包含了ACM所需的API、标志等等。我们要做的第一件事就是执行一些常见的ACM查询来判断版本号,获取它当前管理了多少个驱动程序的信息。下面是查询ACM的部分代码:第2章 WAV文件格式DWORD dwACMVer=acmGetVersion();printf(ACM version%u.%.02u build%u,HIWORD(dwACMVer)8,HIWORD(dwACMVer)&0 x00FF,LOWORD(dwACMVer);if(LOWORD(
展开阅读全文