媒体程序设计——媒体控制接口MCI编程ppt课件
- 格式:ppt
- 大小:344.50 KB
- 文档页数:18
(1)首先,要在USES里加上Mmsystem函数声明如下:functionmciSendStringA(lpstrCommand,lpstrReturnString:PAnsiChar;uReturnLength:UINT;hWndCallback;HWND);MCIERROR;stdcall; functionmciSendStringW(lpstrCommand,lpstrReturnString:PWideChar;uReturnLength:UINT;hWndCallback:HWND);MCIERROR;stdcall;functionmciSendString(lpstrCommand,lpstrReturnString:Pchar;uReturnLength:UINT;hWndCallback:HWND);MCIERROR;stdcall;具体请参考帮助MCI命令消息接口函数:mciSendCommand发送命令消息函数mciGetDeviceID返回打开设备的IDmciGetErrorString返回mciSendCommand错误代码对应的字符串向MCI设备发送命令消息时使用mciSendCommand(mciID:MCIDEVICEID;uMessage:UINT;dwParam1,dwParam2:DWORD);MCIERR OR;stdcall;mciID:接受命令消息的MCI设备的IDuMessage:命令消息dwParam1:命令消息标志dwParam2:指向接收命令消息参数块地址MCIERROR:返回值,如果为0,表示调用成功,否则失败.获得错误代码后通过function mciGetErrorString(mcierr:MCIERROR;pszT ext;Pchar;uLength:UINT):BOOL;stdcall;来获得相应的错误字符串.该函数参数说明如下:mcierr:由mciSendCommand返回的错误代码pszText:存放与mcierr相对应的字符串的地址uLength:指定pszText指向的缓冲区大小,MCI返回的字符串长度最大为128个字符BOOL:返回值,为true则成功,否则,就没有此错误代码下面这个函数,是获取MCI设备ID的functionmciGetDeviceID(pszDevice:Pchar):MCIDEVICEID;stdcall;pszDevice:指定已经打开的MCI设备名称MCIDEVICEID:返回值,为返回的ID.关于设备名称,请打开system.ini文件在[mci]段例如:cdaudio=mcicda.drvsequencer=mciseq.drvwaveaudio=mciwave.drvavivideo=mciavi.drvvideodisc=mcipionr.drvvcr=mcivisca.drvMPEGVideo=mciqtz.drvcdaudio和sequencer等就是设备名MCI详解[连载二]什么是MCI,MCI是多媒体控制接口(Media Control Interface)的缩写.它包括基于命令字符串,消息方式与设备驱动程序进行通讯的可扩充接口和MCI设备驱动程序.支持MCI指令的设备有ANIMATION(动画播放设备)CDAUDIO(CD音频设备)WAVEAUDIO(波形音频设备)OVERPLAY(视频叠加设备,如Video Blaster)DIGITALVIDEO(窗体数字视频,如回放*.avi文件)VIDEODISC(激光视频设备)VCR(可程控录像机)SEQUENCER(MIDI序列发生器)打开WINDOWS子目录下的SYSTEM.INI文件,在[MCI]段就能看到以上设备的安装信息,格式为:DeviceType = Driver设备名= 驱动程序名打开WIN.INI文件,打开[mci extensions],找到如下段[mci extensions]mid=Sequencerrmi=Sequencerwav=waveaudioavi=AVIVideocda=CDAudioaif=MPEGVideoaiff=MPEGVideoaifc=MPEGVideoau=MPEGVideom1v=MPEGVideomov=MPEGVideomp2=MPEGVideompa=MPEGVideompe=MPEGVideompeg=MPEGVideompg=MPEGVideoqt=MPEGVideosnd=MPEGVideodat=MPEGVideo其格式为: 文件扩展名= 设备名在程序设计中,指定一个mci设备,就是指定设备名,当然,还可以指定相对应的设备类型常数:MCI设备与设备类型常数设备类型设备类型常数cdaudio MCI_DEVTYPE_ANIMATIONanimation MCI_DEVTYPE_CD_AUDIOdat MCI_DEVTYPE_DATdigitalvideo MCI_DEVTYPE_DIGITAL_VIDEOother MCI_DEVTYPE_OTHERoverlay MCI_DEVTYPE_OVERLAYscanner MCI_DEVTYPE_SCANNERsequencer MCI_DEVTYPE_SEQUENCERvcr MCI_DEVTYPE_VCRvideodisc MCI_DEVTYPE_VIDEODISCwaveaudio MCI_DEVTYPE_WAVEFORM_AUDIOMCI设备还有简单型(Simple)和复合型(Compound)之分,MCI将不需要文件的设备称作简单型设备(Simple Device),如CDAudio等,将需要文件的设备称作复合型设备(Compound Device),如Sequencer,Waveaudio等.MCI详解[连载三]在连载一里,我解释了几个MCI的函数(请参考连载一)WINDOWS中的多媒体扩展部分的消息由两类:一是发送到窗体,有窗体函数处理的消息均以MM开头.二是用于回调函数和基于消息的API消息,由应用程序发送,实现与MCI设备的通讯.DELPHI中有32种命令消息,按用途分为:1,系统命令消息:由MCI直接解释,不依耐设备性能.2,必须命令消息:所有MCI设备都支持,用于打开,关闭设备并获得有关信息.3,基本命令消息:所有的MCI设备都支持,但并非完全支持,遇到不支持的某一个消息时,返回MCIERR_UNSUPPORTED_FUNCTION.4,扩展命令消息,用于特定设备.扩展命令消息分三种:(1)使用MCI元素文件扩展命令消息(FAQ A:何谓元素?Q:复合型设备在打开时既要指定设备名,又要指定文件名,而文件名就被称为元素.A:何谓复合型设备?Q:参考连载二)(2)设备操作与定位扩展命令消息(3)窗口式视频设备扩展命令消息此外,MCI还使用MCI_MCINOTIFY告诉应用程序一条MCI消息已经发送,它是窗口通知消息,要得到此消息,应用程序要指定一个窗体处理该消息.消息分类:系统命令消息MCI_BREAK 设置指定设备的中止键MCI_SOUND 播放WINDOWS声音MCI_SYSINFO 获取信息必须命令消息MCI_CLOSE 关闭设备MCI_GETDEVCAPS 获取设备性能信息MCI_INFO 获得设备信息MCI_OPEN 打开设备并获得IDMCI_STATUS 获得状态信息基本命令消息MCI_LOAD 载入文件MCI_PAUSE 暂停设备MCI_PLAY 播放MCI_RECORD 录制MCI_RESUME 恢复暂停MCI_SAVE 保存文件MCI_SEEK 在元素内定位MCI_SET 设置设备参数MCI_STOP 停止扩展命令消息[使用元素文件扩展命令消息]MCI_COPY 拷贝数据MCI_CUT 剪切MCI_DELETE 删除MCI_PASTE 粘贴[设备操作与定位扩展命令消息]MCI_CUE 为播放或录制操作插入一个设备MCI_ESCAPE 把一串命令发送到命令处理器MCI_SPIN 开始或中止旋转可转动设备MCI_STEP 步进帧[窗口式视频设备扩展命令消息]MCI_FREEZE 冻结画面MCI_PUT 定义源或目的裁剪矩形区MCI_REALIZE 实现图形设备的调色板MCI_UNFREEZE 与FREEZE相反MCI_UPDATE 刷新MCI_WHERE 确定剪裁区域MCI_WINDOW 为一个图形设备及它的显示方式指定一个窗口和窗口风格MCI连载四发送MCI命令消息有的需要花很长时间才能完成,如播放AVI文件,是否在播放完成前就将控制权返回到APPLICATION,是由命令消息标志确定的.命令消息标志分专用标志和通用标志,专用消息与命令消息配套使用,通用消息适用于所有命令消息:MCI_NOTIFY和MCI_WAITMCI_NOTIFY:通知标志,表示规定动作完成后,给随同发送命令消息的数据结构dwCallBack字段指定的窗口发送MM_MCINOTIFY消息,这个消息由dwCallBack字段指定的回调函数处理]MCI_WAIT:等待标志,表示在规定操作完成后,再将控制权转交APPLICATION,比如播放AVI文件完成后,APPLICATION才能获得控制权,但可以用MCI_BREAK来中断.再说一遍mciSendCommand函数结构:mciSendCommand(mciID:MCIDEVICEID;uMessage:UINT;dwParam1,dwParam2:DWORD);MCIERR OR;stdcall;mciID:接受命令消息的MCI设备的IDuMessage:命令消息dwParam1:命令消息标志dwParam2:指向接收命令消息参数块地址MCIERROR:返回值,如果为0,表示调用成功,否则失败.获得错误代码后通过function mciGetErrorString(mcierr:MCIERROR;pszT ext;Pchar;uLength:UINT):BOOL;stdcall;其中dwParam1是消息指定标志,dwParam2是消息数据结构以MCI_OPEN为例,打开Mmsystem.pas文件,找到如下:typePMCI_Open_ParmsA = ^TMCI_Open_ParmsA;PMCI_Open_ParmsW = ^TMCI_Open_ParmsW;PMCI_Open_Parms = PMCI_Open_ParmsA;{$EXTERNALSYM tagMCI_OPEN_PARMSA}tagMCI_OPEN_PARMSA = record*********dwCallback: DWORD;wDeviceID: MCIDEVICEID;lpstrDeviceType: PAnsiChar;lpstrElementName: PAnsiChar;lpstrAlias: PAnsiChar;end;{$EXTERNALSYM tagMCI_OPEN_PARMSW}tagMCI_OPEN_PARMSW = record*********dwCallback: DWORD;wDeviceID: MCIDEVICEID;lpstrDeviceType: PWideChar;lpstrElementName: PWideChar;lpstrAlias: PWideChar;end;其中可以看出(注意有*的语句),参数是一个记录类型,也就是说dwParam1和dwParam2是两个记录类型的数据,在使用时赋值要注意类型.再以MCI_OPEN命令为例,其语法为:dwReturn:=mciSendCommand(wDeviceID,MCI_OPEN,dwFlags,DWORD(mciOpenParam));-----------------------------------------------------------在var段申明:varwDeviceID:MCIDEVICEID; //存放设备IDdwReturn:MCIERROR; //存放返回值mciOpenParam:PMCI_OPEN_PARMS; //MCI_OPEN命令消息的数据结构-----------------------------------------------------------在适当位置为mciOpenParam申请空间new(mciOpenParam);最后还要释放空间dispose(mciOpenParam);-----------------------------------------------------------为需要在命令消息数据结构中需要的字段赋值,mciOpenParam^.lpstrDeviceType:='cdaudio';-----------------------------------------------------------最后,调用发送函数dwReturn:=mciSendCommand(0,//打开设备前ID为0MCI_OPEN, //命令消息MCI_OPEN_TYPE, //消息标志,表示字段lpstrDeviceType有值DWORD(mciOpenParam)); //数据结构dwReturn若为0,表示调用成功.MCI详解[连载五]MCI命令字符串接口函数与命令消息方式相似,MCI为发送命令字符串提供了两个函数:](1) mciSendString(2) mciExecute函数(2)是(1)的简化形式,函数(1)返回的错误代码和相应的错误信息与命令消息函数相同.函数(2)如果出现错误,则以消息框形式提示.functionmciSendString(lpstrCommand,lpstrReturnString:Pchar;uReturnLength:UINT;hWndCallback:HWND):MCIERROR;stdcall;lpstrCommand:指向以nil结尾的mci命令字符串lpstrReturnString:返回信息的缓冲区,可以设置成nil,则不返回信息hWndCallback:接收MM_MCINOTIFY消息的窗口句柄,如果命令包含Notify标志,则此参数必须要MCIERROR:返回值,为0表示调用成功.错误代码要用函数mciGetErrorString获得错误信息functionmciExecute(pszCommand:LPCSTR):BOOL;stdcall;这是函数(1)的简化形式pszCommand:MCI命令字符串返回值:返回true,表示调用成功;返回false,则用messagebox显示错误信息命令字符串语法格式:commanddevice_name argumentcommand:MCI命令字符串device_name:设备名或设备元素argument:命令的标志和参数标志:由MCI命令支持的关键字组成参数:标志所带参数注:argument可以是字符串,带符号的长整数和矩形等数据类型,参数之间用空格隔开.例1:播放cd,从当前位置播放到10 000ms处停止playcdaudio to 10000例2:以别名形式对cdaudio操作opencdaudio alias cdplay cdstop cdclose cd使用别名的好处:当设备名或元素名较长时,操作起来不方便,就为它指定一个别名, 例如本例就是将设备cdaudio指定一个别名cd,后面就对cd进行操作.MCI详解[连载六]命令字符串分类:用mciSendString和mciExecute函数发送的字符串命令分为四大类:系统命令:由MCI直接解释,不发送给设备.必需命令:所有设备都支持.基本命令:设备对这些命令可选.扩充命令:仅适用于某些设备.字符串命令表类别命令名功能系统命令break 中止,放弃waitsound 播放windows声音(win.ini文件中[Sound]段) sysinfo获取MCI系统信息必需命令capability 获取设备性能信息close 关闭设备info 获取设备型号,厂家等信息open 初始化status 状态信息基本命令load 载入设备元素pause 暂停play 播放record 录制resume 恢复暂停save 存盘seek 在媒体内定位set 设置status 获取设备状态信息stop 停止播放或录制命令字符串举例:(用于mciSendString发送)capabilitymysound device type//返回"mysound"的设备类型closemysound//关闭"mysound"设备configureavi//打开AVI播放设备对话框cuemysound input//为录制准备设备"mysound"deletemysound from 1 to 900//删除波形音频1到900ms之间的数据infomysound product//取回与"mysound"相关的硬件描述open new type waveaudio alias mysound buffer 6//打开"mysound"设备,mysound是别名,缓冲区为6秒pausemysound//暂停"mysound"设备playmysound from 1 to 500 notify(wait)//播放"mysound"从位置1到500,播放后发送通知消息(notify)或播放时等待(wait) realizemyvideo normal//告诉"myvideo"设备实现它的调色板recordmysound//从当前位置开始录制resumemysound//恢复暂停savevboard c:\v1.tga//将视频缓冲区的内容存入v1.tga中seekmysound to start//定位到"mysound"相关文件的开始statusmysound mode//返回"mysound"当前模式step movie by 5//从当前帧开始播放5帧stopmysound//停止播放或录制。
MCI(媒体控制接口)相关知识MCI_BREAK 设置中断键,缺省是”CTRL+BREAK"MCI_CAPTURE 抓取当前帧并存入指定文件,仅用于数字视频MCI_CLOSE 关闭设备MCI_CONFIGURE 弹出配置对话框,仅用于数字视频MCI_COPY 拷贝数据至剪贴板MCI_CUE 延时播放或录音MCI_CUT 删除数据MCI_DELETE 删除数据MCI_ESCAPE 仅用于激光视频MCI_FREEZE 将显示定格MCI_GETDEVCAPS 获取设备信息MCI_INDEX 当前屏幕显示与否,仅用于VCR设备MCI_INFO 获取字符串信息MCI_LIST 获取输入设备数量,支持数字视频和VCR设备MCI_LOAD 装入一个文件MCI_MARK 取消或做一个记号,与MCI_SEEK配套MCI_MARK 取消或做一个记号,与MCI_SEEK配套MCI_MONITOR 为数字视频指定报告设备MCI_OPEN 打开设备MCI_PASTE 粘帖数据MCI_PAUSE 暂停当前动作MCI_PLAY 播放MCI_PUT 设置源、目的和边框矩形MCI_QUALITY 定义设备缺省质量MCI_RECORD 开始录制MCI_RESERVE 分配硬盘空间MCI_RESTORE 拷贝一个bmp文件至帧缓冲MCI_RESUME 使一个暂停设备重新启动MCI_SAVE 保存数据MCI_SEEK 更改媒体位置MCI_SET 设置设备信息MCI_SETAUDIO 设置音量MCI_SETTIMECODE 启用或取消VCR设备的时间码MCI_SETTUNER 设置VCR设备频道MCI_SETVIDEO 设置video参数MCI_SIGNAL 在工作区上设置指定空间MCI_STATUS 获取设备信息MCI_STEP 使播放设备跳帧MCI_STOP 停止播放MCI_SYSINFO 返回MCI设备信息MCI_UNDO 取消操作MCI_UNFREEZE 使使用MCI_UNFREEZE的视频缓冲区恢复运动MCI_UPDATE &nb。
第三篇多媒体开发多媒体开发是多媒体技术的一个重要方面,也是计算机专业人员可充分发挥自己长处的地方。
本篇主要介绍,在Windows环境下进行多媒体开发的,各种应用程序编程接口的使用方法。
本篇首先介绍多媒体开发的一般概念,比较两类媒体集成工具的优劣;然后给出在Windows中播放波形音频的三种方法与函数;重点介绍传统的Windows高/底层多媒体编程接口MCI和MMAPI,对后者主要介绍MIDI和MMIO编程。
本篇的另一个重点内容,是介绍微软公司所推崇的(多媒体和计算机游戏的开发接口)DirectX SDK编程。
先概述DirectX的发展历史和版本演化、功能结构与组件模块,重点介绍DirectX的主要组件Direct3D和DirectSound的基本编程方法,并给出若干实例。
本篇包含如下2章:⏹第12章多媒体开发与MCI和MMAPI编程⏹第13章DirectX编程入门第12章多媒体开发与MCI和MMAPI编程本章先概述多媒体开发的要素、过程和工具,接着给出播放波形音频文件的三个高层函数,然后讨论MCI、MMIO与MIDI等多媒体编程接口,重点介绍MCI编程。
12.1 多媒体开发概述多媒体的开发有人、环境和工具三个要素,其开发过程与人员有关,其开发工具分为素材准备和媒体集成两大类,而其中的媒体集成工具又可分成编程和著作两类。
12.1.1 开发要素⏹人——开发者= 设计人员+ 编程人员⏹环境——软硬件= 多媒体计算机(MPC等)+ 多媒体操作系统(MOS)⏹工具——开发软件= 素材准备工具+ 媒体集成工具(编程/著作)12.1.2 开发过程与人员多媒体开发的过程与相关人员如图12-1所示。
图12-1 多媒体的开发过程与相关人员12.1.3 开发工具多媒体的开发工具可以分为素材准备和媒体集成两大类,而其中的集成工具又可进一步分成编程和著作两类。
本书重点介绍集成工具中的编程类。
1。
素材准备工具●常用软件⏹文字:Word、WordPerfect、WPS、Cool 3D⏹音频:Cool Edit、Audio Editor、Wave Flow、Cakewalk⏹图形:Illustrator、Corel Draw、AutoCAD⏹图像:Photoshop、ACDSee⏹动画:Flash、GIF Animator、3DS、Maya⏹视频:Video Studio、Premiere、After Effects⏹综合:MediaStudio、Fireworks2。