7-音频处理与语音合成课件

上传人:妈**** 文档编号:242999663 上传时间:2024-09-13 格式:PPT 页数:91 大小:1.80MB
返回 下载 相关 举报
7-音频处理与语音合成课件_第1页
第1页 / 共91页
7-音频处理与语音合成课件_第2页
第2页 / 共91页
7-音频处理与语音合成课件_第3页
第3页 / 共91页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,多媒体开发与编程,7 音频处理与语音合成,音频信号,音频信号的获取与处理,常用音频文件,声卡基础,声音播放,MCI,基础,设计简单的音频播放器,*,语音合成,我们生活的世界充满了各种声音,引言,听一听 猜一猜,-(事物)发出的-(怎样的)声音”,引言,引言,通过对各类声音生成机理的深入研究,学者们发现:,一、声音是由振动产生的,声音是由于物体振动产生的。把正在发声的物体叫做声源。固体、液体、气体都能发声,都可以作为声源。,引言,据说:,法国物理学家,帕斯卡,小时候在厨房玩,听到厨师用刀叉敲打盘子发出声音。他很好奇,发现盘子被敲打后声音不断,但当用手按住盘子后,声音立即停止了。帕斯卡通过反复试验、仔细研究,揭开了发声的奥秘:,发声的根本原因是物体的振动,敲打只是使物体振动起来,。,引言,人靠耳朵听声音,那么耳朵是通过什么途径感知声音的呢?,声音的产生(振动),声音的传播(介质),鼓膜振动,听小骨及其它组织,听觉神经,大脑(引起听觉,听到声音),空气传导过程,二、声音传导,引言,在空气传导的整个过程中,任何部分发生障碍(例如鼓膜、听小骨或听觉神经损坏),人都会失去听觉,成为聋哑人!,但是:,如果仅是传导障碍,若能够想办法通过其他途径将振动传递给听觉神经,则仍然能够感知声音。,例如:,骨传导。,引言,骨传导:,声音通过头骨、颌骨传到听觉神经。,贝多芬耳聋后,就是通过骨传导进行创做的。,声音的产生(振动),声音的传播(介质),鼓膜振动,听小骨及其它组织,听觉神经,大脑(引起听觉,听到声音),头骨、骨,引言,为什么:,当人们将自己的声音录入录音机后,再播放出来,通常会感觉到播放出的声音不像自己的声音了。其实,即使不考虑录音质量带来的因素,也会出现这样的现象。为什么呢?,原因:,人们听自己的说话的声音时,主要是以骨传导为主空气传导为辅;而听录音时是以空气传导为主骨传导为辅的,所以听起来有所不同!,现象:,有些歌唱演员在录音时,常带着耳机!,引言,为什么人和动物都有两只耳朵? 是“上帝”多余的杰作?显然不是。,对于同一个声音,两耳感受到的强度不同、感受到的时间不同、感受到的振动的步调不同等,这些差异使人形成了辨别方向的感觉。,如果:我们转动头颅,两耳听到同样的响度、步调,表明声源就在我们的正前方或正后方。,立体听觉,两只眼睛,立体视觉,两个鼻孔,交替呼吸,三、双耳效应,引言,四、人的话音由声道产生,分为浊音和清音两种类型,(1)浊音,浊音由声带振动产生的,准周期,脉冲引起,每次振动使一股空气从肺部流进声道并激励声道,各股空气之间的间隔称为音调间隙或音调周期T。,或者说,激励的速度就是音调。,引言,(2)清音,清音由空气通过声道时,受声道某些部分压缩引起,较浊音而言更具有随机性。,话音信号的频谱间隔对应音调周期T,包络信号是浊音在时域中实际波形的函数(音量大小),上限频率f,m,34 kHz,一般取3.4 kHz,存在三个峰点F,1,、F,2,、F,3,,即谐振峰,话音信号的时域波形及其频谱如下图所示。,引言,话音信号(浊音)的时域波形,话音信号(清音)的时域波形,话音信号(浊音)的频谱,引言,通过对话音信号的分析可知:,同一个人的话音信号的周期T大致是不变的。,7.1 音频信号,主要有电话音频信号、调频、调幅无线电广播音频信号和高保真数字的立体声音频信号。由于用途不同,这些音频信号频带宽度也各不相同。,例如,在音响设备中,通常以音频信号的带宽来衡量声音的质量。,一、常见音频信号,7.1 音频信号,声音的频率分布,次声波,人耳可听域(音频),超声波,20,000Hz,调幅广播(AM),50Hz 7,000Hz,调频广播(FM),20Hz 15,000Hz,高级音响,3Hz 40,000Hz,话音信号,300Hz 3,000Hz,声,源,种,类,频,带,宽,度,7.1 音频信号,二、声音基本特性,1,波动性,任何物体的振动通过空气的传播都会形成连续或间断的波动,这种波动引起人的耳膜的振动,变为人的听觉。,因此,声音是一种连续或间断的波动。,声音传输时需要一定的介质,如空气、水、钢铁等。,7.1 音频信号,如果有陨,石撞上月球,地球上的人能否听到撞击声?,听不到,,因为声音在真空中无法传播。,7.1 音频信号,2,声音的三要素,音调、音强和音色称为声音的三要素。,音调。与声波的频率相关,频率高则音调高,频率低则音调低。音调高时声音尖锐,俗称高音;音调低时声音沉闷,俗称低音。人的耳朵对于声音的感知频率范围为,20 Hz,20 kHz,之间。低于,20 Hz,的声波为次声波,高于,20 kHz,的声波称为超声波。,音强。取决于声波的幅度,振幅高时音强强,振幅低时音强弱。,音色。由叠加在声音基波上的谐波所决定,一个声波上的谐波越丰富,音色越好。,7.1 音频信号,3,声音的连续谱,声音信号一般为非周期信号,包含有一定频带的所有频率分量,其频谱是连续谱。声波的连续谱成分使声音听起来饱满、生动。,4,声音的方向性,声音的传播是以弹性波形式进行的,传播具有方向性,人通过到达左右两耳声波的时间差及声音强度差异来辨别声音的方向。声音的方向性是产生立体声效果和空间效果的基础。,7.1 音频信号,三、音频的种类,在自然界中,声音包含声响、语音和音乐等三种形式。在多媒体系统中,声音不论是何种形式都是一种装载信息的媒体,统称为音频。由产生音频的方式不同音频被分为波形音频,MIDI音频和CD音频三类。,7.1 音频信号,1,波形音频,以声波表示的声响、语音、音乐等各种形式的声音经过声音获取设备(例如麦克风)和声音播放设备(例如录音机、CD唱机等)输入,并通过声卡控制采样,由A/D转换将模拟信号转变成数字信号,然后以*.WAV文件格式存储在硬盘上,这种声音媒体称为波形音频。波形音频重放时,必须经过D/A转换将数字信号转换成模拟信号,由声卡上的混音器混合后生成声波,再由音箱输出声音。,波形音频的*.WAV文件中记录的是数字信号,可以使用计算机对*.WAV文件进行各种处理,并像其他数据文件一样被存取、复制和传输。,7.1 音频信号,2,MIDI音频,将电子乐器演奏时的指令信息(例如音高、音长和力度等)通过声卡上的MIDI控制器输入计算机,或者利用一种称为音序器的计算机音乐处理软件编辑产生音乐指令集合,以*.MID文件格式存储在硬盘上,这种声音媒体称为MIDI音频。MIDI音频重放时,必须经过合成器将MIDI指令译成相应的声音信号,再由声卡上的混音器混合后生成声波,最后由音箱播出音乐。,MIDI音频的*.MID文件中可以包含多达16种不同乐器的声音定义。MIDI文件记录的不是乐曲本身,而是一些描述乐曲演奏过程中的指令,因此,MIDI音频是乐谱的数字化描述。MIDI文件的存储量比较小,因此,它可以满足较长时间音乐播放的要求,但是MIDI文件的录制工作较为复杂,需要使用MIDI创作并改编作品的专业知识以及专门化工具,例如键盘合成器等。,7.1 音频信号,3,CD音频,CD音频是指以44.1 kHz频率、16位精度采样而获得的一种立体声数字化声音。,7.2 音频的获取与处理,一、音频信号的获取,音频信号的获取框图如下图所示。,7.2 音频的获取与处理,二、音频信号的处理,不管多媒体信息是音频信号还是视频信号,其数据量都是十分巨大的。,如图所示的那样,经A/D转换的数字化音频信号直接进入计算机进行存储(记录)或进行传送,是不可取的。,7.2 音频的获取与处理,三、音频信号的回放,经压缩的音频信号以一定的格式记录在有关的媒体上,例如,磁带、磁盘及光盘等,或者以一定的格式传送到接收端。,在音频信号接收端或由媒体回放音频信号时,首先由专用的硬件或软件对压缩数据进行解压缩,恢复音频数字信号,然后,经由下图所示的电路框图对音频信号进行放音。,7.2 音频的获取与处理,四、有关音频信号的标准及规范,下表中列出了国际电报电话咨询委员会(CCITT),欧洲移动通信专家组(GSM),美国移动通信标准(CTIA)及美国国家安全局各自制定的有关电话通信的编码标准。,下表中还给出了各种标准的大致使用领域以及它们的质量,其中,质量是以最高为5.0分来表示的。,7.2 音频的获取与处理,组织,ISO,CCITT,标准,G.711,G.712,G.728,制定时间,1992,1972,1984,1992,传送速率,(,Kb/s,),128,64,32,16,编码算法,PCM,ADPCM,LDCELP,质量,5.0,4.3,4.1,4.0,使用场合,CD,长途电话网络,7.2 音频的获取与处理,除了上面所提到的数字电话编码标准外,调幅广播的音频信号范围为50 Hz7 kHz,又称“7 kHz音频信号”,其最高频率为7 kHz,当使用16 kHz对其采样并进行14位二进制编码时,其数据的传送速率为224 KB/s。,为了对最高频率进行压缩,CCITT于1988年为其制定了G.722标准,标准规定这种信号的数据传送率为64 KB/s。,7.3 常用音频文件,Windows支持两种资源交互文件格式(Resource Interchange File Format,RIFF)的音频文件:MIDI文件和波形音频WAVE文件,目前最常用的是WAVE文件。,7.3 常用音频文件,RIFF可以看做是一种树状结构,其基本构成单位为“块”(Chunk),它犹如树状结构中的节点。每个Chunk由“辨别码”(ID)、“数据大小”(Size)和“数据”(Data)所组成,如下图所示。,一、RIFF格式,7.3 常用音频文件,其中,,辨别码用,4,个字符表示,如,RIFF,、,LIST,等,表示,Chunk“,数据”的类型,指定块的标志,ID,。如果一个程序不能识别“辨别码”,则将忽略由,Chunk“,大小”所指定的,Chunk“,数据”和附加的数据;,数据大小用,32,位无符号数值表示,表示,Chunk“,数据”的长度和,Chunk“,数据”后附加的数据长度,这一值还包括,Chunk“,辨别码”和,Chunk“,大小”所占用的空间;,数据是指二进制数据,用来描述具体的声音信号,数据可以是固定长度也可以是可变长度。相对于,RIFF,文件起始位置,数据是“字对齐”的,这样可以提高数据访问速度。如果数据的字节长度为奇数,在数据后面要附加一个字节,以保持“字对齐”。,7.3 常用音频文件,一般而言,块与块不能相互嵌套。但有两种情况可以例外,即分别以RIFF及LIST为辨别码的Chunk可以包含子Chunk。其中RIFF块的级别最高,它可以包括LIST块。RIFF块和LIST块与其他块不同,RIFF块的数据总是以一个指定文件中数据存储格式的4个字符码(称为格式类型)开始,如WAVE文件有一个WAVE的格式类型。LIST块的数据总是以一个指定列表内容的4个字符码(称为列表类型)开始,例如扩展名为.avi的视频文件就有一个strl的列表类型。,7.3 常用音频文件,二、WAV语音文件格式,在多媒体应用中被广泛使用的是WAV语音文件。,WAVE文件是RIFF文件的形式简单,其格式类型为WAVE,如下图所示。,7.3 常用音频文件,RIFF块包含两个子块,这两个子块的ID分别是“fmt”和“data”。,1fmt子块,fmt子块由结构PCMWAVEFORMAT组成,大小为:,sizeofof(PCMWAVEFORMAT),数据组成就是PCMWAVEFORMAT结构中的数据。,7.3 常用音频文件,typedef struct,WAVEFORMAT wf;,/波形格式,WORD wBitsPerSample;,/WAVE文件的采样大小,每个采样样本所需的位元数, PCMWAVEFORMAT;,其中WAVEFORMAT结构的定义如下:,typedef struct,WORD wFormatTag;,WORD nChannels;,DWORD nSamplesPerSec;,DWORD nAvgBytesPerSec;,WORD nBlockAlign;, WAVEFORMAT;,7.3 常用音频文件,各个成员的涵义见下表。,成员,涵义,WFormatTag,记录声音格式代号,如WAVE_FORMAT_PCM、WAVE_FORMAT_ADPCM等,NChannels,记录声音的声道数,nSamp1esPerSec,记录每秒采样数(采样率),NAvgBytesPerSec,记录每秒的平均数据量,nBlockA1ign,记录块的对齐单位,7.3 常用音频文件,2data子块,data子块包含真正的声音数据。Windows定义了在dataChunk中数据的存放情形。,对于单声道,例如8位单声道,每个样本数据由8位表示。而在多声道WAVE文件中,样本是交替出现的。如对于8位立体声,每个声道的数据由一个8位数据表示,且第一个8位数据表示0声道(左)数据,紧随其后的8位数据表示1声道(右)数据;而对于16位立体声,每个声道的数据由一个16位数据表示,且第一个16位数据表示0声道(左)数据,紧随其后的16位数据表示1声道(右)数据。,7.3 常用音频文件,偏移地址,字节数,类型,内 容,00H03H,4B,字符,RIFF,04H07H,4B,长整数,从下一个地址(08H)开始到文件结束的总字节数,08H0BH,4B,字符,WAVE,0CH0FH,4B,字符,fmt,WAV文件也是由文件头和数据块两部分组成。其中文件头所规定的内容如下表所示。,7.3 常用音频文件,10H11H,2B,整数,文件标志,12H13H,2B,整数,目前为1,14H15H,2B,整数,声道数,16H19H,4B,长整数,采样率,1AH1DH,4B,长整数,每秒平均字节数,7.3 常用音频文件,由上表可见,WAV语音文件头也是对文件设置了一些标志并确定了对语音信号的采集速率。单声道语音信号用11.025 kHz的采样率采样,采样值为8 bit二进制编码,双声道语音信号用44.1 kHz采样率采样,即左右声道各为22.05 kHz采样,每声道采样值用8 bit二进制编码表示,这样一来,每个语音采样值要用16 bit表示,且高8位放左声道的数据,低8位放右声道的数据。具体数据块的存放情况如下表所示。,7.3 常用音频文件,偏移地址,字节数(B),类型,内容,1EH21H,4B,字符,data,22H25H,4B,长整数,采样数据总字节数,26H,8位整数,采样数据,上表表明,数据块紧跟在文件头的后面,其偏移地址从1EH开始,前面是数据块的标志和数据块的总长度。从偏移地址26H开始存放语音数据。,7.3 常用音频文件,三、MID文件格式,MID文件是一种记录数字化音乐的MIDI文件,由一个文件头块和多个音轨块组成。文件头块记录了MIDI文件的描述信息,而音轨块记录了MIDI通道的数据流信息。文件头块和音轨的格式分别如下面的二个表所示。,7.3 常用音频文件,偏移量,内 容,03,MID文件头标识,47,文件头块长度,815,记录格式。格式0:文件由包含所有16个通道数据的一个音轨组成。格式1:文件由一个或多个同步的音轨组成。格式2:文件由一个或多个独立的音轨组成,1617,音轨号,1819,时间分割,规定了形成1/4音符节拍的时间长度,7.3 常用音频文件,MID 音轨,偏移量,内容,偏移量,内容,03,MID音轨标识,8,音轨数据,47,音轨块长度,7.3 常用音频文件,偏移地址,内 容,0013H,文件类型,1415H,从VOC文件开始到数据块的偏移量,1617H,VOC文件版本号,1819H,VOC文件标志,1AH,VOC文件的数据块标志,1B1DH,数据块长度,1EH,数据采样率,四、VOC语音文件格式,VOC语音文件也是由文件头和数据块两大部分组成。其中VOC语音文件的文件头如下表所示。,7.3 常用音频文件,由表可以看到,VOC文件的文件头主要是对VOC文件的类型、版号及标志做出说明,同时,指出了数据块的起始地址、数据块长度及采样率。,VOC文件中数据块由性质不尽相同的子块组合而成。各子块的功能及其长度也各不相同,例如有语音数据子块、静音标志子块、ASCII码字符子块、循环重复子块、终止子块及用于立体声音响的扩展子块等。,VOC文件中数据子块的长度及主要功能列于下表中。,7.3 常用音频文件,数据子块号,长 度,功 能,0,1B(字节),终止块,1,7B+?,语音数据,2,5B+?,语音数据,3,7B,静音,4,6B,标志,5,6B+?,ASCII字符,6,6B,循环重复,7,4B,循环结束,8,7B+?,扩展块,7.3 常用音频文件,不同子块的开始几个字节除前面4个如上所述外,剩下的就不太相同,上表中用?表示。,例如,1号数据子块的开始字节中,有规定本数据块的数据压缩比的字节。知道了压缩比,就可以解压缩恢复原始的语音数据。,7.3 常用音频文件,注意:,VOC,文件中可包括多个数据块,而,WAV,文件只支持一个数据块,且只能用一种采样速率播放出来。因此,在,WAV,和,VOC,文件相互转换时,只能是功能强的,VOC,文件来适应,WAV,文件的规定。,同时,,WAV,文件不支持压缩文件,因此,当,VOC,文件向,WAV,文件转换时,,VOC,文件中的压缩数据块将被忽略。,7.4 声卡,计算机处理声音的硬件设备是声卡,尽管声卡的类型很多,但声卡的基本结构和功能都是类似的。声卡的主要组成部分如下图所示。,7.4 声卡,1. 音源,声卡可以接受话筒的信号输入(MIC IN),外部的音频信号输入(LINE IN),或是内部连接的CD音频信号。,一、声卡的结构,7.4 声卡,2.混音器,混音器芯片可以混合各种音源,包括数字化声音、MIDI(合成)音乐、CD音频输入、LINE IN、MIC IN以及PC扬声器,并通过软件控制多种音源的音量,实现混合录音。,3.前置放大器,在有些声卡上有独立的音频前置放大器芯片,它是一块模拟信号处理芯片,其主要任务是将各种音源的微弱信号放大到一定的电平,或进行选择、补偿、控制等处理,使其足以推动后级电路。,7.4 声卡,4. DSP芯片,DSP是声卡的核心部件,是处理速度高、集成度大的可编程芯片,能把数据及时处理并以所需要的方式传送给用户。,5.音乐合成芯片,音乐合成芯片是处理MIDI音乐的关键,合成音乐有两种方式:频率调制(FM)和波形表(Wave Table)合成方式。,7.波形表ROM,并不是所有的波形表都能达到相同的效果,取得成功的关键在于提供足够多的音色样本数据。,7.4 声卡,7. CD-ROM驱动器接口,声卡上含有一个或多个CD-ROM驱动器接口,如Sound Blaster系列的一些声卡在卡上安排了Panasonic、Sony和Mitsumi三种接口,有一些声卡必须与特定的CD-ROM驱动器相连,采用SCSI-2标准CD-ROM驱动器的接口卡,使得用户可以使用丰富的CD节目。,8. 功率放大器,音频信号在输出之前必须经过功率放大。声卡一般把信号放大到4 W输出,输出的立体声音频信号可以接到耳机、有源音响或是功率较大的立体声功放。,7.4 声卡,9. 总线连接,声卡插在电脑的总线扩展槽上,为了实现高速传输数据的要求,声卡和电脑内存之间采用DMA传输方式,当传输完毕时声卡向CPU发送一个中断请求信号(IRQ)。,7.4 声卡,二、声卡工作原理,声卡有4种常见的处理声音信号的方式,在不同处理方式下,音频信号(数字的及模拟的)所通过的路径是不同的。,声卡的工作原理如下图所示。,7.4 声卡,7.4 声卡,三、声卡的主要性能指标,信噪比,SNR(Signal,to Noise Ratio),是对声卡抑制噪音能力的评价。,总谐波失真,THD+N(Total,Harmonic Distortion +Noise),是对声卡保真度的总体评价。,频率响应,FR(Frequency,Response),是对声卡,D/A,与,A/D,转换器频率响应能力的评价。,7.4 声卡,四、声卡的功能,声卡必须配有功能强大的软件,这些软件在操作系统支持下运行,实现声卡的基本功能。,1.,录制、编辑和回放数字声音文件。来自麦克风、录音机、收音机及激光唱盘等的声音信号,经采样、编码、处理后以数字声音文件的形式存储。,2.,对数据进行压缩和对压缩的数据进行解压的功能在记录数字声音信号时,应先进行数据压缩。在进行数字声音文件的回放时,应先进行解压。,3.,语音合成技术的使用,现在大多数声卡都具备语音合成的功能,能够将文字直接转换成声音。,7.4 声卡,4.,语音识别功能,目前,声卡所具备的语音识别功能还只是初步的,而且不是每种声卡都具备这样的功能。,5.,音量控制,在声卡中,混声器集成电路芯片与软件结合,可以对各种声源以及数字的、模拟的声音信号的音量进行控制。,7.,具有MIDI接口(乐器数字接口),利用MIDI接口,计算机可以控制多台具有MIDI接口的乐器。乐器可由MIDI接口产生MIDI文件。这种文件比WAV文件更节省内存,而且也可以对MIDI文件进行编辑和回放。,7.4 声卡,7.,多媒体制作及演示,8.,软件开发工具,凡是功能强的声卡,均配有十分完备的软件,其中包括用于二次开发(制作)的工具软件。,7.5 声音播放,所谓操作声音文件,即将音频文件打开,获取声音数据,再根据需要进行相应的处理。,一、使用简单的播放函数,Windows提供了3个特殊的播放声音的高级音频函数:MessageBeep、PlaySound和sndPlaySound。这三个函数可以满足播放波形声音的一般需要,但它们播放的WAVE文件大小不能超过100 KB,如果要播放较大的WAVE文件,则应该使用MCI服务。,1 MessageBeep函数,该函数主要用来播放系统报警声音。该函数的声明为:,BOOL MessageBeep(UINT uType);,7.5 声音播放,2 PlaySound函数,MessageBeep函数只能用来播放少数定义的声音,如果程序需要播放数字音频文件(*.wav文件)或音频资源,就需要使用PlaySound或sndPlaySound函数。,PlaySound函数的原型为:,BOOL PlaySound(LPCSTR pszSound, HMODULE hmod,DWORD fdwSound);,3 sndPlaySound函数,函数sndPlaySound的功能与函数PlaySound的类似,但少了一个参数。函数的声明为:,BOOL sndPlaySound(LPCSTR lpszSound, UINT fuSound);,7.5 声音播放,二、将声音文件加入到程序资源中,在Visual C+的程序设计中,可以利用各种标准的资源,如位图、菜单、对话框等。同时Visual C+也允许用户自定义资源,因此可以将声音文件作为用户自定义资源加入到程序资源文件中,经过编译连接生成EXE文件,实现无.wav文件的声音播放。,参见实验指导书,7.6 MCI基础,用Windows提供的sndPlaySound等API函数只能实现小型WAV文件的播放,但当WAVE文件大于100 KB时,系统就无法将声音数据一次性读入内存,sndPlaySound函数就不能进行顺畅的播放了。为了解决这个问题,可以选择媒体控制接口(Media Control Interface ,MCI)来播放声音文件。,MCI向Windows程序提供了在高层次上控制媒体设备接口的能力,程序不必关心具体设备,就可以对激光唱机(CD)、视盘机、波形音频设备、视频播放设备和MIDI设备等媒体设备进行控制。对于程序员来说,可以把MCI理解为设备面板上的一排按钮,通过单击不同的按钮(发送不同的MCI命令)可以让设备完成各种功能,而不必关心设备的内部实现。,7.6 MCI基础,Microsoft API提供了3个常见的MCI函数来完成WAVE文件的相关操作。,函数,涵义与功能,mciSendString,传送指令字符串给MCI,mciGetErrorString,将MCI错误代码转换为字符串,mciSendCommand,发送命令消息给指定MCI设备,7.6 MCI基础,其中,mciSendString函数的声明为:,MCIERROR mciSendString,(,LPCTSTR lpszCommand,/MCI命令字符串,LPTSTR lpszReturnString,/存放反馈信息的缓冲区,UINT cchReturn,/缓冲区的长度,HANDLE hwndCallback,/回调窗口的句柄,一般为NULL,);,所有的MCI命令字符串都是通过mciSendString函数传递给MCI的。,7.6 MCI基础,mciSendString函数返回的错误码可以用mciGetErrorString函数进行分析,其声明如下:,BOOL mciGetErrorString,(,DWORD fdwError,/返回的错误码,LPTSTR lpszErrorText,/接收描述错误的字符串的缓冲区,UINT cchErrorText,/缓冲区的长度,);,7.6 MCI基础,下面的代码演示了如何使用mciSendString函数:,char buf50;,MCIERROR mciError;,mciError=mciSendString(open cdaudio,buf,strlen(buf),NULL);,if(mciError),mciGetErrorString(mciError,buf,strlen(buf);,AfxMessageBox(buf);,return;,7.6 MCI基础,mciSendCommand函数的原型如下:,MCIERROR mciSendCommand,(,MCIDEVICEID IDDevice,/接收命令消息的MCI设备ID,UINT uMsg,/发送的MCI命令消息,DWORD fdwCommand,/命令的标志位,DWORD dwParam,/消息参数的结构体地址,);,7.6 MCI基础,参数uMsg为MCI命令消息。MCI中常用的命令消息见表4-5。,命令,涵义,MCI_OPEN,打开设备,MCI_CLOSE,关闭设备,MCI_PLAY,播放,MCI_PAUSE,暂停,MCI_RESUME,继续,MCI_STOP,停止,MCI_RECORD,录音,7.6 MCI基础,参数IDDevice表示接收命令消息的MCI设备标识符,但对于MCI_OPEN 消息一般不使用此参数。,若mciSendCommand函数调用成功,则返回零;否则,返回双字中的低字存放的错误信息。,可见,应用程序通过向MCI发送命令来控制媒体设备,MCI命令接口分命令字符串(使用mciSendString函数)和命令消息(使用mciSendCommand函数)两种,两者具有相同的功能。命令字符串具有使用简单的特点,但是它的执行效率不如命令消息。,7.6 MCI基础,1打开音频设备,在使用MCI播放声音文件时,首先要打开音频设备。格式如下:,MCIERROR mciSendCommand(MCIDEVICEID wDeviceID, MCI_OPEN,DWORD dwFlags, (DWORD) (LPMCI_OPEN_PARMS) lpOpen);,其中lpOpen参数为一个MCI_OPEN_PARMS结构的地址。,7.6 MCI基础,MCI_OPEN_PARMS结构定义如下:,typedef struct,DWORD dwCallback;,/指定窗口句柄,MCIDEVICEID wDeviceID;,/打开的音频设备的ID,LPCSTR lpstrDeviceType;,/设备类型,LPCSTR lpstrElementName;,/打开的声音文件名,LPCSTR lpstrAlias;, MCI_OPEN_PARMS;,7.6 MCI基础,其中,lpstrDeviceType成员可取值如下表所示。,设备类型,描述,animation,动画设备,cdaudio,CD播放器,dat,数字音频磁带机,digitalvideo,某一窗口中的数字视频(不基于GDI),other,未定义的MCI设备,overlay,重叠设备(窗口中的模拟视频),scanner,图像扫描仪,sequencer,MIDI序列器,videodisc,视盘机,waveaudio,播放数字波形文件的音频设备,7.6 MCI基础,例如,定义一个MCI_OPEN_PARMS结构变量 OpenParms:,MCI_OPEN_PARMS OpenParms;,再设置该变量的必要的相应分量,例如:,OpenParms.wDeviceID = 0;,OpenParms.lpstrDeviceType = waveaudio;,OpenParms.lpstrElementName = (LPCSTR) Filename;,下面是语句使用实例:,mciSendCommand (NULL,MCI_OPEN,MCI_WAIT|MCI_OPEN_TYPE|,MCI_OPEN_TYPE_ID|MCI_OPEN_ELEMENT,(DWORD)(LPVOID) &OpenParms),7.6 MCI基础,函数中的MCI_OPEN_TYPE参数说明设备类型名包含在OpenParms结构体中,而MCI_OPEN_ELEMENT参数说明要打开的文件名包含在OpenParams结构体中。,参数MCI_WAIT说明当命令执行结束后函数才返回值。,该函数调用发送MCI_OPEN命令后,返回的参数OpenParms中的成员变量wDeviceID指明打开了哪个设备,一般可以将其赋给一个全局变量以备它用。,例如:,MCIDEVICEID m_MCIDeviceID;,m_MCIDeviceID=OpenParms.wDeviceID;,7.6 MCI基础,2关闭音频设备,声音文件处理完毕后,需要关闭音频设备,格式如下:,MCIERROR mciSendCommand(MCIDEVICEID wDeviceID,MCI_CLOSE,DWORD dwFlags,(DWORD) (LPMCI_GENERIC_PARMS) lpClose);,参数dwFlags取MCI_NOTIFY 或MCI_WAIT;,参数lpClose是MCI_GENERIC_PARMS结构的地址。,7.6 MCI基础,MCI_GENERIC_PARMS结构定义如下:,typedef struct,DWORD dwCallback;, MCI_GENERIC_PARMS;,dwCallback成员用于描述MCI_NOTIFY使用的一个窗体句柄。,也可以简单调用mciSendCommand函数关闭音频设备:,mciSendCommand (m_MCIDeviceID, MCI_CLOSE, NULL, NULL);,7.6 MCI基础,3播放,最基本的操作就是将文件中的声音数据播放出来。,使用mciSendCommand函数的格式如下:,MCIERROR mciSendCommand(MCIDEVICEID wDeviceID,MCI_PLAY, DWORD dwFlags,(DWORD) (LPMCI_PLAY_PARMS ) lpPlay);,参数lpPlay是MCI_PLAY_PARMS结构的地址。,7.6 MCI基础,MCI_PLAY_PARMS结构定义如下:,typedef struct,DWORD dwCallback;,DWORD dwFrom;,/表示播放的起点,DWORD dwTo;,/表示播放的终点, MCI_PLAY_PARMS;,7.6 MCI基础,例如,下面的例句:,PlayParms.dwCallback=(long)GetSafeHwnd();,PlayParms.dwFrom=0;/设置播放位置从头开始,dwError=mciSendCommand(m_MCIDeviceID,MCI_PLAY,MCI_FROM|MCI_NOTIFY,(DWORD)(LPVOID),参数MCI_FROM说明开始播放的位置包含在PlayParms结构体中;,参数MCI_NOTIFY的意义是播放完后发送MM_MCINOTIFY消息。,7.6 MCI基础,4暂停与继续,暂停函数格式:,MCIERROR mciSendCommand(MCIDEVICEID wDeviceID,MCI_PAUSE, DWORD dwFlags,(DWORD) (LPMCI_GENERIC_PARMS) lpPause);,继续函数格式:,MCIERROR mciSendCommand(MCIDEVICEID wDeviceID,MCI_RESUME, DWORD dwFlags,(DWORD) (LPMCI_GENERIC_PARMS) lpResume);,例如:,mciSendCommand(m_MCIDeviceID,MCI_PAUSE,0,NULL);,mciSendCommand(m_MCIDeviceID,MCI_RESUME,0,NULL);,7.6 MCI基础,5停止,停止所有播放操作,释放所有缓冲区资源,轨道回到起点,格式如下:,MCIERROR mciSendCommand(MCIDEVICEID wDeviceID,MCI_STOP, DWORD dwFlags,(DWORD) (LPMCI_GENERIC_PARMS) lpStop);,例如,下述语句可以实现停止功能:,mciSendCommand(m_MCIDeviceID,MCI_STOP,MCI_WAIT,NULL);,7.6 MCI基础,7.录音,录音功能是MCI较为突出的一个功能,使用函数的格式如下:,MCIERROR mciSendCommand(MCIDEVICEID wDeviceID,MCI_RECORD, DWORD dwFlags,(DWORD) (LPMCI_RECORD_PARMS) lpRecord);,MCI_RECORD_PARMS结构定义如下:,typedef struct,DWORD dwCallback;,DWORD dwFrom;,DWORD dwTo;, MCI_RECORD_PARMS;,7.6 MCI基础,7MCI消息,MCI有两个消息MM_MCINOTIFY、MM_MCISIGNAL。,常用MM_MCINOTIFY通知应用程序,通报MCI已经完成某一个操作。MM_MCINOTIFY有两个参数:,wParam = (WPARAM) wFlags,lParam = (LONG) lDevID,wFlags可取如下4种值:,MCI_NOTIFY_ABORTED,MCI_NOTIFY_FAILURE,MCI_NOTIFY_SUCCESSFUL,MCI_NOTIFY_SUPERSEDED,7.6 MCI基础,例如下面的代码描述了如何编写MM_MCINOTIFY响应函数:,LRESULT CMyMCIDlg:MciNotify(WPARAM wParam,LPARAM lParam),if (wParam=MCI_NOTIFY_SUCCESSFUL),/成功播放后重置标识,return 0;,return -1;,/否则返回错误,7.7 设计简易音频播放器,设计一个简易音频播放器,可以实现声音文件的加载、播放、暂停/继续等功能。,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > PPT模板库


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!