欢迎来到天天文库
浏览记录
ID:8467297
大小:21.71 KB
页数:15页
时间:2018-03-28
《基于visual c++6.0的声音文件操作》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、基于VisualC++6.0的声音文件操作-一、前言当前VisualC++相关的编程资料中,无论是大部头的参考书,还是一些计算机杂志,对声音文件的处理都是泛泛的涉及一下,许多编程爱好者都感到对该部分的内容了解不是很透彻,本文希望能够给刚刚涉及到声音处理领域的朋友们起到一个引路的作用,帮助他们尽快进入声音处理的更深奥空间。当前计算机系统处理声音文件有两种办法:一是使用现成的软件,如微软的录音机、SoundForge、CoolEdit等软件可以实现对声音信号进行录音、编辑、播放的处理,但它们的功能是有限的,为了更灵活,更大限度地处理声音数据,就不得不使用另外一种方法,既利用微软提供的多媒
2、体服务,在Windows环境下自己编写程序来进行声音处理来实现一些特定的功能。下面就开始介绍声音文件的格式和在Windows环境下使用VisualC++开发工具进行声音文件编程处理的方法,本文所有的程序代码都在Windows2000、VisualC++6.0环境下编译通过,运行正常。二、RIFF文件结构和WAVE文件格式Windows支持两种RIFF(ResourceInterchangeFileFormat,"资源交互文件格式")格式的音频文件:MIDI的RMID文件和波形音频文件格式WAVE文件,其中在计算机领域最常用的数字化声音文件格式是后者,它是微软专门为Windows系统定
3、义的波形文件格式(WaveformAudio),由于其扩展名为"*.wav",因而该类文件也被称为WAVE文件。为了突出重点,有的放矢,本文涉及到的声音文件所指的就是WAVE文件。常见的WAVE语音文件主要有两种,分别对应于单声道(11.025KHz采样率、8Bit的采样值)和双声道(44.1KHz采样率、16Bit的采样值)。这里的采样率是指声音信号在进行"模→数"转换过程中单位时间内采样的次数。采样值是指每一次采样周期内声音模拟信号的积分值。对于单声道声音文件,采样数据为八位的短整数(shortint00H-FFH);而对于双声道立体声声音文件,每次采样数据为一个16位的整数(i
4、nt),高八位和低八位分别代表左右两个声道。WAVE文件数据块包含以脉冲编码调制(PCM)格式表示的样本。在进行声音编程处理以前,首先让我们来了解一下RIFF文件和WAVE文件格式。RIFF文件结构可以看作是树状结构,其基本构成是称为"块"(Chunk)的单元,每个块有"标志符"、"数据大小"及"数据"所组成,块的结构如图1所示:块的标志符(4BYTES)数据大小(4BYTES)数据图一、块的结构示意图从上图可以看出,其中"标志符"为4个字符所组成的代码,如"RIFF","LIST"等,指定块的标志ID;数据大小用来指定块的数据域大小,它的尺寸也为4个字符;数据用来描述具体的声音信号
5、,它可以由若干个子块构成,一般情况下块与块是平行的,不能相互嵌套,但是有两种类型的块可以嵌套子块,他们是"RIFF"或"LIST"标志的块,其中RIFF块的级别最高,它可以包括LIST块。另外,RIFF块和LIST块与其他块不同,RIFF块的数据总是以一个指定文件中数据存储格式的四个字符码(称为格式类型)开始,如WAVE文件有一个"WAVE"的格式类型。LIST块的数据总是以一个指定列表内容的4个字符码(称为列表类型)开始,例如扩展名为".AVI"的视频文件就有一个"strl"的列表类型。RIFF和LIST的块结构如下:RIFF/LIST标志符数据1大小数据1格式/列表类型数据图二、
6、RIFF/LIST块结构WAVE文件是非常简单的一种RIFF文件,它的格式类型为"WAVE"。RIFF块包含两个子块,这两个子块的ID分别是"fmt"和"data",其中"fmt"子块由结构PCMWAVEFORMAT所组成,其子块的大小就是sizeofof(PCMWAVEFORMAT),数据组成就是PCMWAVEFORMAT结构中的数据。WAVE文件的结构如下图三所示:标志符(RIFF)数据大小格式类型("WAVE")"fmt"Sizeof(PCMWAVEFORMAT)PCMWAVEFORMAT"data"声音数据大小声音数据 图三、WAVE文件结构图 PCMWAVEFORMAT结
7、构定义如下:Typedefstruct{WAVEFORMATwf;//波形格式;WORDwBitsPerSample;//WAVE文件的采样大小;}PCMWAVEFORMAT;WAVEFORMAT结构定义如下:typedefstruct{WORDwFormatag;//编码格式,包括WAVE_FORMAT_PCM,WAVEFORMAT_ADPCM等WORDnChannls;//声道数,单声道为1,双声道为2;DWORDnSamplesPerSec;//采样
此文档下载收益归作者所有