普通高等教育“十一五”国家级规划教材“十二五”普通高等教育本科国家级规划教材赵英良等.软件开发技术基础(第2版).机械工业出版社第6章多媒体编程技术西安交通大学计算机教学实验中心软件开发技术基础西安交通大学计算机教学实验中心本章内容多媒体编程基础音频的播放与处理图像处理动态图像2西安交通大学计算机教学实验中心6.1多媒体编程基础媒体控制接口MCIActivex技术简介DirectX技术简介3西安交通大学计算机教学实验中心6.1.1媒体控制接口MCIMCI(MediaControlInterface,媒体控制接口)是Windows提供的与设备无关的多媒体高层次命令接口,可以控制CD声音、视频动画、Wave格式数字声音、MIDI音序器、录像机和激光视盘机等多种设备。4西安交通大学计算机教学实验中心5西安交通大学计算机教学实验中心MCI设备类型设备类型描述Cdaudio激光唱机、CD-ROMDat数字化磁带音频播放机Digitalvideo窗口中的数字视频(非GUI)Mmmovie多媒体影片演播器Overlay叠加设备(窗口中的模拟视频)Scanner图像扫描仪器Vcr磁带录像机或播放机Videodisc影碟机Waveaudio播放数字化波形文件的音频设备Other未定义的MCI设备6西安交通大学计算机教学实验中心Windows提供的MCI设备驱动程序设备类型设备驱动程序名描述cdaudioMCICDA.DRV一个播放光盘音频的MCI设备驱动程序mmmovieMCIMMP.DRV一个播放多媒体影片文件的MCI设备驱动程序sequencerMCISEQ.DRV一个播放MIDI音频文件的MCI设备驱动程序videodiscMCIPIONR.DRV一个播放先锋LD-V4200影碟机文件的MCI设备驱动程序waveaudioMCIWAVE.DRV一个播放和记录波形音频文件的MCI设备驱动程序otherMCIAVI.DRV一个播放AVI动态视频文件的MCI设备驱动程序7西安交通大学计算机教学实验中心6.1.2Activex技术简介ActiveX是微软提出的一种可以使不同语言开发的软件构件在网络环境中相互操作的标准。ActiveX包括控件(Controls)、文档(Documents)、脚本(Scripts)三种最常用的技术,同时它也包括客户机技术、服务器技术以及工具和应用程序8西安交通大学计算机教学实验中心6.1.3DirectX技术简介DirectX是Microsoft公司最早为Windows95平台所提供的一套支持多媒体运行的程序库与应用程序接口的总称,其特点是直接对HAL(硬件抽象层)操作,实现视频、声音的输出,网络通信及对游戏杆的控制。与传统的Windows上的GDI或MCI相比,它加快了速度,提高了便利性。9西安交通大学计算机教学实验中心6.2音频的播放与处理MCI提供控制音频的方法MCI由Windows提供的mmsystem.h文件定义。Windows采用两种MCI接口与MCI设备通信:一是使用命令消息接口函数,直接控制MCI设备;二是使用命令字符串接口函数,基于文本接口或命令脚本来控制MCI设备。不同之处在于它们的基本命令结构以及将消息发送到设备的原理不同。10西安交通大学计算机教学实验中心6.2.1命令消息接口命令消息接口使用消息控制MCI设备Windows多媒体扩充软件为使用命令消息接口发送MCI命令提供3个函数:MciSendCommand:发送一个命令消息到一个MCI设备;MciGetDeviceID:当设备打开时,返回这个设备的ID号;MciGetErrorString:返回错误代码的字符串。11西安交通大学计算机教学实验中心1.发送命令消息MciSendCommand的语法如下:MCIERRORmciSendCommand(MCIDEVICEIDIDDevice,UINTuMsg,DWORDfdwCommand,DWORDdwParam);12西安交通大学计算机教学实验中心2.MCI命令消息的分类MCI命令消息可以划分为以下几类:直接由MCI解释的命令、由所有的MCI设备所支持的命令、基本命令和扩展命令。所有的MCI设备支持的命令消息:13消息描述MCI_CLOSE关闭一个MCI设备MCI_GETDEVACPS获得一个MCI设备的性能MCI_INFO从一个MCI设备中得到有关的消息MCI_OPEN初始化一个MCI设备MCI_STATUS从一个MCI设备返回有关的状态消息西安交通大学计算机教学实验中心基本命令消息描述MCI_LOAD从一个磁盘文件加载数据MCI_PAUSE暂停播放或记录MCI_PLAY开始传送输出数据MCI_RECORD开始传送输入数据MCI_RESUME重新开始播放或记录MCI_SAVE将数据存储到磁盘文件中MCI_SEEK向前或向后检索MCI_SET设置设备信息MCI_STATUS从一个MCI设备返回有关的状态信息MCI_STOP停止播放或记录14西安交通大学计算机教学实验中心3.MCI设备的打开使用MCI设备前,必须使用MCI_OPEN命令消息来初始化设备。MCI_OPEN命令对应的参数结构为:typedefstruct{DWORD_PTRdwCallback;//低字节为MCI_NOTIFY标志存放了指定的窗口句柄MCIDEVICEIDwDeviceID;//返回给调用程序的ID号LPCSTRlpstrDeviceType;//要打开的设备名LPCSTRlpstrElementName;//附加的设备元素名LPCSTRlpstrAlias;//可选的设备别名}MCI_OPEN_PARMS;15西安交通大学计算机教学实验中心(1)用MCI设备驱动程序名指定待打开的MCI设备用设备驱动程序名打开一个波形音频设备:WORDDeviceID;//声明设备号变量MCI_OPEN_PARMSMciOpenParms;//声明打开参数的结构体变量MciOpenParms.IpstrDeviceType=”mciwave.drv”;//指定设备if(MciSendCommand(0,MCI_OPEN,MCI_OPEN_TYPE,(DWORD)(LPVOID)&MciOpenParms)){…}//打开设备失败else//打开设备成功{DeviceID=MciOpenParms.wDeviceID}16西安交通大学计算机教学实验中心(2)用设备类型常数指定待打开的MCI设备WindowsMCI接口为每种类型的MCI设备定义了一个设备类型常数,应用程序可以使用此常数指定待打开的设备。可以在MCI_OPEN_PARMS的LpstrDeviceType域中指定此常数,并用设备MCI_OPEN_TYPE和MCI_OPEN_TYPE_ID指定待打开的设备,此时LpstrDeviceType为一个DWORD域,其低字节部分用来指定设备常数,高字节是的顺序索引号.17西安交通大学计算机教学实验中心设备类型及常数设备类型常数animationMCI_DEVTYPE_ANIMATIONcdaudioMCI_DEVTYPE_CD_AUDIOdatMCI_DEVTYPE_DATdigitalvideoMCI_DEVTYPE_DIGITAL_VIDEOotherMCI_DEVTYPE_OTHERoverlayMCI_DEVTYPE_OVERLAYscannerMCI_DEVTYPE_SCANNERvcrMCI_DEVTYPE_VIDEOTAPEsequencerMCI_DEVTYPE_SEQUENCERvideodiscMCI_DEVTYPE_VIDEODISCwaveaudioMCI_DETTYPE_MAVEFORM_AUDIO18西安交通大学计算机教学实验中心4.常用命令消息(1)MCI_PLAY命令消息MCI_PLAY命令消息通知设备开始传送输出数据。MCI_PLAY命令的对应参数结构为:typedefstruct{DWORD_PTRdwCallback;//低字节存放MCI_NOTIFY使用的窗口句柄DWORDdwFrom;//开始播放的位置DWORDdwTo;//播放结束的位置}MCI_PLAY_PARMS;MCI_PLAY常用的标志有:MCI_FROM,MCI_TO,MCI_DGV_PLAY_REPEAT等19西安交通大学计算机教学实验中心(2)MCI_SET命令消息MCI_SET设置设备信息。MCI_SET命令的对应参数结构为typedefstruct{DWORD_PTRdwCallback;////低字节存放MCI_NOTIFY使用的窗口句柄DWORDdwTimeFormat;//设备的时间格式DWORDdwAudio;//音频输出通道}MCI_SET_PARMS;MCI_SET常用的标志有:MCI_SET_AUDIO,表示音频通道号包含在参数结构中;MCI_SET_TIME_FORMAT,时间格式参数包含在参数结构中;20西安交通大学计算机教学实验中心5.关闭一个设备MCI_CLOSE命令消息取消对一个设备或者设备元素的访问,它类似于一个文件的关闭操作。当所有使用一个设备的任务均关闭了这个设备时,MCI释放这个设备。MCI_CLOSE的参数结构typedefstruct{DWORD_PTRdwCallback;////低字节存放MCI_NOTIFY使用的窗口句柄}MCI_GENERIC_PARMS;21西安交通大学计算机教学实验中心播放声音文件【例6-1】使用命令消息接口函数播放特定WAV声音文件“e:\01.wav”。解题思路:①包含头文件windows.h和mmsystem.h;②加载多媒体编程库文件#pragmacomment(lib,winmm);③声明打开设备消息参数结构体变量;④填充参数;⑤使用mciSendCommand和MCI_OPEN命令消息打开设备;⑥声明播放设备消息参数结构体变量;⑦使用mciSendCommand和MCI_PLAY命令消息播放设备;⑧进入循环等待播放。22西安交通大学计算机教学实验中心思考题(1)如何使程序可以播放任意从键盘输出的文件?(2)查找资料,考虑如何控制播放过程的暂停、继续和从头播放?23西安交通大学计算机教学实验中心6.2.2命令字符串接口命令字符串接口使用文本命令控制MCI设备。文本串中包含执行一个命令所需的所有信息。基于字符串的命令,把控制命令连接在一起,然后通过mciSendString函数提交给MCI。Windows多媒体扩充软件为使用命令字符串接口传送命令字符串提供了3个函数:mciSendString、mciGetErrorString、mciExecute。24西安交通大学计算机教学实验中心1.mciExecutemciExcute函数是mciSendString的简化形式语法定义如下:BOOLmciExecute(LpstrCommand)LpstrCommand是一个指向以NULL结束的控制命令的字符串,字符格式与mciSendString相同。若函数调用功能,返回TRUE,否则返回FALSE。25西安交通大学计算机教学实验中心2.mciGetErrorString函数mciGetErrorString函数返回一个MCI错误代码的文本描述字符串,其语法如下:WORDmciGetErrorString(DWORDError,LpstrBuffer,WORDLength)3.mciSendString函数命令字符串接口函数mciSendString的原形如下:MCIERRORmciSendString(LPCTSTRlpszCommand,LPTSTRlpszReturnString,UINTcchReturn,HANDLEhwndCallback)26西安交通大学计算机教