ImageVerifierCode 换一换
格式:DOCX , 页数:61 ,大小:452.86KB ,
资源ID:23340899      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/23340899.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(VC++多媒体技术MCI使用.docx)为本站会员(b****9)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

VC++多媒体技术MCI使用.docx

1、VC+多媒体技术MCI使用 第7章 多媒体技术 多媒体技术是综合图形、文字、声音和视频图象等多种媒体手段,用于传递和表达计算机信息的技术。Windows提供了丰富的多媒体服务功能,用户可以根据自己的需求,编写层次不同的多媒体应用程序。71 使用MCI播放WAVE文件的程序实例我们先举一个简单的例子,了解一下多媒体应用程序的编制过程和实现效果。例71 声音播放1、新建项目(1)创建一个基于对话框的应用程序,名为:播放声音(2)删除原有的“取消”按钮,把“确定”按钮的标题改为“退出”。(3)添加一个按钮,其ID标识符为:IDC_PLAY,标题为:播放。调整对话框大小和布局,如图7.1所示。2、为程

2、序添加多媒体支持 使用Visual C+编写多媒体程序时必须向项目中添加多媒体支持。步骤如下:(1)Project-Setting-打开Project Setting对话框- 切换到Link选项卡,在Object/Library modules文本框中输入winmm.lib,如图7.2所示,OK退出。 图7.1 播放声音程序的对话框布局图7.2 为程序添加多媒体支持 (2)在“播放声音Dlg.h”文件的前面写:#include “MMSystem.h”3、添加成员变量 在CMyDlg类(播放声音Dlg.h)中添加成员变量:MCIDEVICEID m_MCIDeviceID; 4、将一个声音文件

3、如:mail.wav拷贝到此项目文件夹中。5、在CMyDlg类的OnInitDialog()成员函数中添加以下代码(可以把其它语句全部注释掉):BOOL CMyDlg:OnInitDialog() CDialog:OnInitDialog(); MCI_OPEN_PARMS mciOpenParms; / 打开MCI设备 mciOpenParms.lpstrDeviceType=waveaudio; /MCI设备名mciOpenParms.lpstrElementName=mail.wav; /声音文件,此处写你考到文件夹下的声音文件名 mciSendCommand(0,MCI_OPEN,MC

4、I_OPEN_TYPE|MCI_OPEN_ELEMENT, (DWORD)(LPVOID)&mciOpenParms); m_MCIDeviceID=mciOpenParms.wDeviceID; return TRUE; / return TRUE unless you set the focus to a control说 明:(1)mail.wav是一个WAV声音文件,第4步时已经复制到此项目文件中。程序首先打开了MCI设备,并把设备标识赋给了类的成员变量m_MCIDeviceID。注意声音文件名不要带扩展名.wav。6、播放声音文件 用ClassWizard为播放按钮(IDC_PLAY

5、),在CMyDlg类添加鼠标单击的消息映射函数,并加如下代码:void CMyDlg:OnPlay() /添加控件通知消息处理代码MCI_PLAY_PARMS mciPlayParms;mciPlayParms.dwFrom=0; /从文件开始处开始播放mciSendCommand(m_MCIDeviceID,MCI_PLAY,MCI_FROM,(DWORD)(LPVOID)&mciPlayParms);7、在程序退出时停止播放并关闭MCI设备 用ClassWizard为CMyDlg类添加WM_DESTROY消息,该消息映射函数能使程序退出时停止声音文件的播放并关闭MCI设备。void CMy

6、Dlg:OnDestroy() CDialog:OnDestroy(); mciSendCommand(m_MCIDeviceID,MCI_STOP,MCI_WAIT,NULL); /停止播放 mciSendCommand(m_MCIDeviceID,MCI_CLOSE,MCI_WAIT,NULL); /关闭MCI设备(8)编译并运行程序,在单击“播放”按钮时,程序将播放声音;当单击“退出”按钮或单击窗口的关闭按钮时,声音播放会立即停止。72 MCI(媒体控制接口)媒体控制接口(Media Control Interface)为Windows程序提供了在高层次上控制媒体设备接口的能力。程序不必

7、关心具体设备,就可以对激光唱机(CD)、视盘机、波形音频设备、视频播放设备和MIDI设备等媒体设备进行控制。对于程序员来说,可以把MCI理解为设备面板上的一排按钮,通过选择不同的按键(发送不同的MCI命令)就可以让设备完成各种功能,而不必关心设备内部实现。例如,对于play按键,视盘机和CD机有不同的反应(一个是播放视频,一个是播放音频),而对用户来说只需要按同一按钮。利用MCI控制多媒体设备分为打开、使用和关闭设备三个过程。721 MFC设备类型 设备类型是指响应一组共用命令的一类MCI设备。表7.1列出了MFC设备类型。表7. 1 MCI 设 备 类 型 设备类型 说明 设备描述 设备驱动

8、程序 animation 动画播放设备 MCI_DEVICE_ANIMATION cdaudio CD音频设备,如激光唱机 MCI_DEVICE_CD_AUDIO MCICDA.DRVdat 数字音频磁带机 MCI_DEVICE_DATdigitalvideo 数字视频设备 MCI_DEVICE_DIGITAL_VIDEOother 未定义的MCI设备 MCI_DEVICE_OTHERoverlay 窗口中的模拟设备 MCI_DEVICE_OVERLAY scanner 图形扫描设备 MCI_DEVICE_SCANNERsequencer MIDI设备 MCI_DEVICE_SEQUENCER

9、 MCISEQ.DRVvcr 录象机设备 MCI_DEVICE_VCRvideodisc 影碟播放设备 MCI_DEVICE_VIDEODISK MCIPIONR.DRVwaveaudio 波形音频设备 MCI_DEVICE_WAVEAUDIO MCIWAVE.DRVmmmovie 多媒体影片播放机 MCIMMP.DRV所有设备 MCI_ALL_DEVICE_ID avivideo 视频音频交叉设备722 MCI命令与函数应用程序通过MCI设备发送命令来控制MCI设备。1、MCI命令 MCI发送命令有2种方法,一是调用MCI函数mciSendString(),向MCI发送命令字符串,二是调用M

10、CI函数mciSendCommand()函数,向MCI发送命令消息,如表7.2所示。2、MCI函数 所有的MCI函数名都是以mci为前缀,函数原型在MMSYSTEM.H中声明。主要的MCI函数如表7.3所示。3、高级音频函数 Windows提供了3个播放声音的高级音频函数,它们是:MessageBeep()、PlaySound()和sndPlaySound()。这3个函数可以满足播放波形声音的一般需要,但他们播放的WAVE文件(波形声音文件)的大小不能超过100KB,如果要播放较大的WAVE文件,则应该使用MCI(媒体控制接口)。 表7. 2 MCI命令列表 命令消息 命令字符串 命令说明 命

11、令类型MCI_SYSINFO SYSINFO 返回有关MCI设备的信息MCI_BREAK BREAK 为一个指定的MCI设备设置一个终止键 系统命令MCI_SOUND SOUND 播放Windows指定的系统声音MCI_CLOSE CLOSE 关闭一个MCI设备MCI_GETDEVCAPS GETDEVCAPS 获得一个MCI设备的性能参数MCI_INFO INFO 从一个MCI设备得到有关的信息 通用命令MCI_OPEN OPEN 初始化一个MCI设备MCI_STATUS STATUS 从MCI设备返回有关的状态MCI_LOAD LOAD 从一个磁盘文件中加载数据MCI_PAUSE PAUS

12、E 暂停播放MCI_PLAY PLAY 开始播放MCI_RECORD RECORD 开始记录数据MCI_RESUME RESUME 重新开始播放或录音 可选命令MCI_SAVE SAVE 将数据存储到磁盘文件中MCI_SEEK SEEK 向前或向后检索MCI_SET SET 设置设备信息MCI_SYOP STOP 停止播放或记录表7. 3 常用的MCI函数 函数名 功能 类型 mciSendCommand 发送命令消息 mciGetDeviceID 获得MCI设备的ID 向MCI发送命令消息函数 mciSetYieldProc 设定回调函数 mciGetYieldProc 获得回调函数 mci

13、SendString 发送命令字符串 向MCI发送命令字串函数 mciGetErrorString 获得当前MCI错误的字符串描述 公用函数(1)MessageBeep()函数 该函数主要用来播放系统报警声音。系统报警声音是由用户在控制面板中的声音(Sounds)程序中定义的,或者在WIN.INI的sounds段中指定。该函数的原型为:BOOL MessageBeep(UINT uType);参 数:uType说明了声音的类型,如表7.4所示。若函数调用成功则返回TRUE。MessageBeep()只能用来播放少数定义的声音,如果程序需要播放波形音频文件(*.WAV文件)或音频资源,就需要使用

14、PlaySound()或sndPlaySound()函数。表7.4 MessageBeep()函数的参数取值 UType 描 述 -1 从机器的扬声器中发出蜂鸣声 MB_ICONASTERISK 播放由SystemAsterisk定义的声音 MB_ICONEXCLAMATION 播放由SystemExclamation定义的声音 MB_ICONHAND 播放由SystemHand定义的声音 MB_ICONQUESTION 播放由SystemQuestion定义的声音 MB_OK 播放由SystemDefauIt定义的声音(2)PlaySound()函数 PlaySound()函数的函数原型为:

15、BOOL PlaySound(LPCSTR lpszSound,HMODULE hMod,DWORD fdwSound);参 数:lpszSound指定了要播放声音的字符串,该参数可以是WAVE文件的名字、WAVE资源名、内存中声音数据的指针或在系统注册表WIN.INI中定义的系统事件声音。如果该参数为NULL则停止正在播放的声音。hMod是应用程序的实例句柄,当播放WAVE资源时使用该参数,否则它必须为NULL。fdwSound是标志的组合,如表7.5所示。若函数调用成功则返回TRUE,否则返回FALSE。 表7. 5 播放标志 标 志 含 义 SND_APPLICATION 用应用程序指定

16、的关联来播放声音 SND_ALLAS lpszSound参数指定了注册表或WIN.INI中的系统事件的别名 SND_ALLAS_ID lpszSound参数指定了预定义的声音标识符 SND_ASYNC 用异步方式播放声音,PlaySound函数在开始播放后立即返回 SND_FILENAME lpszSound参数指定了WAVE文件 SND_LOOP 重复播放声音,必须与SND_ASYNC标志一块使用 SND_MEMORY 播放载入到内存中的声音,此时lpszSound是指向声音数据的指针 SND_NODEFAULT 不播放默认声音,若无此标志,则PlaySound在没有找到声音时会播放默认声音

17、 SND_NOSTOP PlaySound不打断原来的声音播出并立即返回FALSE SND_NOWAIT 如果驱动程序正忙,则函数就不播放声音并立即返回 SND_PURGE 停止所有与调用任务有关的声音。若参数lpszSound为NULL, 就停止所有的声音,否则,停止lpszSound指定的声音。 SND_RESOURCE lpszSound参数是WAVE资源的标识符,这时要用到hMod参数 SND_SYNC 同步播放声音,在播放完后PlaySound函数才返回73 MCI编程步骤 MCI为用户提供了控制不同多媒体设备的函数库,这些函数库允许用户以不同的方式访问设备。在MFC中使用MCI函数

18、进行多媒体设备控制的一般步骤为:打开设备设置或获取设备相关信息播放设备关闭设备等几个过程。实际上,上述过程的操作都要向多媒体设备发送MCI指令。指令发送一般是通过调用表7.3中的mciSendCommand(用于发送命令消息)或mciSendString(用于发送字符串命令)函数进行的。其中的mciSendCommand函数原型如下:MCIERROR mciSendCommand(MCIDEVICEID IDDevice,UINT uMsg,DWORD fdwCommand,DWORD dwParam);参 数:IDDevice:表示接受MCI命令的设备标识符,但当MCI命令为MCI_OPEN

19、时,此参数应为0;uMsg: 表示要发送的命令消息;fdwCommand:表示MCI命令消息的标志位;dwParam: 表示指向MCI命令消息数据结构的指针。该函数成功调用时返回0,否则返回非0值。另外,在调用MCI函数所在的源文件开头处(最好是stdafx.h(建立预编译头文件)还要包含文件mmsystem.h以及编译时加入winmm.lib库或在程序中加入下列语句:#pragma comment(lib,”winmm32.lib”)下面是MCI编程过程中,不可缺少的4个步骤,其列出的代码,我们在例7.1中都有过使用。1、打开设备 为了简化代码,MCI为不同的多媒体设备打开提供相应的数据结构

20、类型。例如,对于waveaudio设备提供了MCI_WAVE_OPEN_PARMS结构,对于overlay提供了MCI_OVLY_OPEN_PARMS结构等。若用户不想使用设备中特定的参数数据,则可使用统一的MCI_OPEN_PARMS结构,其原型如下:typedef struct DWORD dwCallback; /低字节用于MCI_NOTIFY的窗口句柄 MCIDEVICEID wDeviceID /返回的设备表示符 LPCSTR lpstrDeviceType; /MCI设备的类型 LPCSTR lpstrElementName; /设备元素 LPCSTR lpstrAlias; /可

21、选的设备别名MCI_OPEN_PARMS;显然,打开一个多媒体设备的代码过程是:首先定义一个MCI_OPEN_PARMS(或其他)结构类型变量,然后给结构变量中的相应参数赋值,最后调用mciSendCommand向设备发送MCI_OPEN命令消息,当调用成功时,即可获得相应的设备标识符。2、设置或获取设备信息使用MCI_SET和MCI_STATUS命令可以分别用于设置和获取设备信息,并在用函数mciSendCommand发送命令时使用相应的MCI_SET_PARMS和 MCI_STATUS_PARMS结构,它们的原型如下:typedef struct DWORD dwCallback; /低字

22、节用于MCI_NOTIFY的窗口句柄 DWORD dwTimeFormat; /时间格式 DWORD dwAudio; /输出声道MCI_SET_PARMS;typedef struct DWORD dwCallback; /低字节用于MCI_NOTIFY的窗口句柄 DWORD dwReturn; /要获取的设备信息 DWORD dwItem; /需要获取的信息项 DWORD dwTrack; /取目的长度或取目号MCI_STATUS_PARMS;3、播放设备 使用MCI_PLAY命令可以使设备播放多媒体文件,并在用函数mciSend Command发送命令时,使用相应的MCI_PLAY_PA

23、RMS结构,其原型如下:Typedef struct DWORD dwCallback; /低字节用于MCI_NOTIFY的窗口句柄 DWORD dwFrom; /播放的起点位置 DWORD dwTo; /播放的终点位置MCI_PLAY_PARMS;但需要注意的是:为了便于程序判断媒体是否播放结束,还应该让MCI向窗口发送MCI_NOTIFY消息。而且,在调用的窗口中应加入MM_MCINOTIFY的消息处理。但由于ClassWizard不支持该消息,因而需要手动进行。例如,若接收MM_MCINOTIFY消息的窗口是一个对话框CMyDlg,则添加消息处理的过程如下:(1)切换到项目工作区窗口的C

24、lassView页面,右击CMyDlg类,选择快捷选单中的”Add Member Function”命令。在弹出的”Add Member Function”对话框中为CMyDlg类添加保护型的成员函数,其原型如下:LRESSULT OnMCINotify(WPARAM wParam,LPARAM lParam);(2)在类CMyDlg的消息入口处,添加下列消息宏指令:ON_MESSAGE(MM_MCINOTIFY,OnMCINotify)(3)编写CMyDlg:OnMCINotify函数代码:LRESULT CMyDlg:OnMCINotify(WPARAM wParam,LPARAM iPa

25、ram).return FALSE;4、关闭设备 使用MCI_STOP和MCI_CLOSE命令可以分别用于停止播放和关闭设备,由于它们不需要设置或返回附加的信息因此用户不必考虑相应的MCI_GENERIC_PARMS结构。74 使用MCIWnd窗口类上述直接使用MCI(媒体控制接口)的底层函数进行多媒体设备控制的方法需要用户编写大量的代码,而另一种更为简单的方法是使用MCIWnd(Media Control Interface Window)窗口类,它仅需要少量的程序就可以在应用程序中添加多媒体的控制功能。MCIWnd是一个控制多媒体设备的窗口类,它提供的函数、消息以及宏与上述的MCI的底层功

26、能相似。若在应用程序中使用MCIWnd窗口类,还必须在调用MCIWnd函数所在的源文件的前面(最好是stdafx.h)添加vfw.h的头文件,以及编译时加入vfw32.lib库或在程序中加入语句:#pragma comment(lib,”vfw32.lib”)在MCIWnd窗口类中,虽然它所提供的函数并不多,但是它所提供的宏却非常多,并且基本上与MCI的底层功能相对应。在应用程序中使用MCIWnd窗口类的一般步骤是:(1)在程序中调用MCIWndRrgisterClass函数注册MCI窗口类,以便以后用 CreateWindow或CreateWindowEx函数创建窗口,或者直接调用函数:MC

27、IWndCreate创建窗口。(2)获得相应的窗口句柄后,就可调用MCIWndOpen宏来打开设备。(3)由于MCIWnd窗口提供了相应的媒体控制按钮,因而不需要用户编写额外的代码。(4)作为技巧,用户还应该跟踪MCIWnd窗口的一些消息如:MCIWNDMNOTIFYSIZE来调整MCIWnd窗口。例72 利用MCIWnd窗口类在多文档应用程序中添加一个多媒体播放器。(1) 用MFC AppWizard(exe)创建一个多文档应用程序名为:多媒体播放(2) 在预编译头文件StdAfx.h中放入包含文件,以使应用程序能使用所有的多媒体代码。由于项目中的每一个文件已经包含StdAfx.h,所以在其

28、他地方就不必再包含这些多媒体文件。在工作区FileView页面,打开头文件(.h)夹,找到StdAfx.h按如下加代码:.#endif / _AFX_NO_AFXCMN_SUPPORT#include #pragma comment(lib,”vfw32.lib”)(3)在应用程序类的CMyApp:InitInstance函数的最前面,使用MCIWndRegisterClass函数注册MCI窗口类。虽然,后面的创建窗口是直接调用函数MCIWndCreate来进行的,但还应该保证应用程序的运行系统拥有并支持MCIWnd(是一个控制多媒体设备的窗口类)窗口类。BOOL CMyApp:InitIns

29、tance() if(!MCIWndRegisterClass() /注册MCIWnd窗口类 return FALSE; AfxEnableControlContainer(); .(4)在CMyView.h的public中添加一个成员变量用于标识嵌入的MCIWnd窗口句柄: HWND m_hMyMCIWnd; / HWND窗口句柄,定义窗口句柄对象(5)在CMyView类中添加OnInitialUpdate消息处理函数,并增加下列代码:void CMyView:OnInitialUpdate() CView:OnInitialUpdate();m_hMyMCIWnd=MCIWndCreate

30、(m_hWnd,AfxGetInstanceHandle(),MCIWNDF_NOTIFYSIZE|MCIWNDF_NOERRORDLG|WS_CHILD|WS_VISIBLE,NULL); /见下面说明1if(m_hMyMCIWnd=NULL) return; /没创建子窗口,返回const CString &filename=GetDocument()-GetPathName();/获得路径名if(filename.GetLength()0)/路径名字符串长度要大于0MCIWndOpen(m_hMyMCIWnd,(LPCSTR)filename,0);/见下面说明2 说 明:函数:MCIWndCreate(m_hWnd,AfxGetInstanceHandle(),MCIWNDF_NOTIFYSIZE|MCIWNDF_NOERRORDLG| WS_CHILD|WS_VISIBLE,NULL);其功能:创建一个使用MCI设备的窗口,返回MCI设备窗口的句柄。参 数:m_hWnd: 父窗口句柄AfxGetInstanceHandle():当前实例句柄,AfxGetInstanceHandle()函数就是获得实例句柄函数NULL:打开的MCI设备的名称或多媒体文件名MCIWnd:窗口的风格:MCIWNDF_NOTIFYSIZE:MCIWnd窗口

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1