多媒体技术12多媒体开发与MCI和MMAPI编程.doc





《多媒体技术12多媒体开发与MCI和MMAPI编程.doc》由会员分享,可在线阅读,更多相关《多媒体技术12多媒体开发与MCI和MMAPI编程.doc(46页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、 27 第12章 多媒体开发与MCI和MMAPI编程第三篇 多媒体开发多媒体开发是多媒体技术的一个重要方面,也是计算机专业人员可充分发挥自己长处的地方。本篇主要介绍,在Windows环境下进行多媒体开发的,各种应用程序编程接口的使用方法。本篇首先介绍多媒体开发的一般概念,比较两类媒体集成工具的优劣;然后给出在Windows中播放波形音频的三种方法与函数;重点介绍传统的Windows高/底层多媒体编程接口MCI和MMAPI,对后者主要介绍MIDI和MMIO编程。本篇的另一个重点内容,是介绍微软公司所推崇的(多媒体和计算机游戏的开发接口)DirectX SDK编程。先概述DirectX的发展历史和
2、版本演化、功能结构与组件模块,重点介绍DirectX的主要组件Direct3D和DirectSound的基本编程方法,并给出若干实例。本篇包含如下2章:n 第12章 多媒体开发与MCI和MMAPI编程n 第13章 DirectX编程入门第12章 多媒体开发与MCI和MMAPI编程本章先概述多媒体开发的要素、过程和工具,接着给出播放波形音频文件的三个高层函数,然后讨论MCI、MMIO与MIDI等多媒体编程接口,重点介绍MCI编程。12.1 多媒体开发概述多媒体的开发有人、环境和工具三个要素,其开发过程与人员有关,其开发工具分为素材准备和媒体集成两大类,而其中的媒体集成工具又可分成编程和著作两类。
3、12.1.1 开发要素n 人 开发者 = 设计人员 + 编程人员n 环境 软硬件 = 多媒体计算机(MPC等) + 多媒体操作系统(MOS)n 工具 开发软件 = 素材准备工具 + 媒体集成工具(编程/著作)12.1.2 开发过程与人员多媒体开发的过程与相关人员如图12-1所示。领域问题应用程序剧本设计程序编制媒体数据准备领域专家剧本编导文字编辑音乐音效美工摄影视频制作软件人员图12-1 多媒体的开发过程与相关人员12.1.3 开发工具多媒体的开发工具可以分为素材准备和媒体集成两大类,而其中的集成工具又可进一步分成编程和著作两类。本书重点介绍集成工具中的编程类。1。素材准备工具l 常用软件n
4、文字:Word、WordPerfect、WPS、Cool 3Dn 音频:Cool Edit、Audio Editor、Wave Flow、Cakewalkn 图形:Illustrator、Corel Draw、AutoCADn 图像:Photoshop、ACDSeen 动画:Flash、GIF Animator、3DS、Mayan 视频:Video Studio、Premiere、After Effectsn 综合:MediaStudio、Fireworks2。媒体集成工具多媒体的集成工具有两类:著作与编程,前者针对普通用户,后者则为计算机专业人员所使用。l 编程n APIu 高层MCI/Di
5、rectXu 底层MMIO/MMAPI/硬件驱动程序n 语言工具u Visual C+u C+ Builderu Visual Basicu Delphiu Javan 接口类型u MDK/SDK/DDKu OLE/COM/ActiveXu DLLl 著作n 分类u 基于图标(流程图)按对象/事件顺序组织数据,以流程图为骨干,通用。如Authorware、Icon Authoru 基于时间(时序)按时间顺序组织数据/事件,用时线方式表达媒体元素之间的相互关系,特别适合于动画。如Director、Action!u 基于页(脚本/卡片)将媒体对象连接于页(卡片/节点)上,以面向对象方式处理媒体元素
6、,用属性定义/脚本规范媒体元素,超文本功能强,特别适合于电子图书、MCAI。如ToolBook、PowerPoint、HyperCardu 基于网页(标记语言)Web网页,基于HTML/XML、JavaScript/VBScript、ASP/JSP。如FrontPage、Dreamweavern 要求u 编程环境能控制和编排多媒体数据u 超媒体提供超级链接功能u 流程控制l 易生成带有条件和逻辑分支的复杂流程结构l 可由用户输入产生跳转l 可调整复杂事件的顺序l 易产生和链接热键/点/区u 多媒体数据I/O支持各种文件格式u 动画支持动画的编辑与演播u 动态链接外部程序OLE/ActiveX、
7、数据交换、嵌入u 模块化面向对象u 界面友好易学易用u 扩充性好支持各种扩展l 比较两种媒体集成工具的优缺点与适用范围的比较见表12-1。表12-1 多媒体集成工具的比较类型优点缺点适用编程控制灵活,速度快难度大、工作量大、周期长、需专业程序员、设计人员与编程人员难沟通集成、量小、快速著作容易、工作量小、周期短、不需专业程序员速度慢,控制粗单独、量大、固定方式12.2 播放波形音频文件本节介绍Windows中只可用来播放音频文件的几种高层函数,包括只能播放系统声音的MessageBeep、Win16中就有的可以播放波形文件的老函数sndPlaySound、以及Win32引进的功能强大的播放波形
8、文件的新函数PlaySound。而MCI中的声音播放将在下节介绍。Windows音频服务的层次关系参见图12-2。多媒体应用程序高层音频函数MCI设备驱动程序低层音频函数MIDI映射器低层音频驱动程序应用程序层高层音频服务低层音频服务图12-2 Windows音频服务的层次关系12.2.1 MessageBeep函数原型为:BOOL MessageBeep( UINT uType / sound type);该函数调用后马上返回,若成功返回TRUE,否则返回FALSE。其中,参数uType为声音类型,其可取值见表12-2:表12-2 MessageBeep播放的声音类型uType值声音0xFF
9、FFFFFF(-1)用计算机喇叭发出标准嘟声MB_ICONASTERISK系统星号MB_ICONEXCLAMATION系统感叹号MB_ICONHAND系统手MB_ICONQUESTION系统问号 MB_OK系统缺省这些系统事件的声音,可用控制面板中声音与音频设备程序来设置和指定,保存在注册表中。老版本的Windows将这些设置信息保存在win.ini文件的Sounds段中。如:SoundsSystemAsterisk=chord.wav, AsteriskSystemExclamation=chord.wav, ExclamationSystemHand=chord.wav, Critical
10、 StopSystemQuestion=chord.wav, QuestionSystemDefault=ding.wav, Default BeepSystemStart=data.wav, Windows StartSystemExit=c:windows/glass.wav, Windows Exit若系统没有安装音频设备,则会使用计算机本身的小喇叭来发声;否则,会调用声卡来播放对应的波形文件。可以用SDK函数waveOutGetNumDevs来判断系统是否安装了音频设备,其原型为:UINT waveOutGetNumDevs(VOID); / 返回系统中安装的音频设备数如if (wav
11、eOutGetNumDevs() = 0) MessageBox(LNo audio device!, LError ); return;12.2.2 sndPlaySound函数原型为:BOOL sndPlaySound( LPCSTR lpszSound, UINT fuSound );其中,lpszSound可为注册系统声音的表项,也可为盘中的波形文件,为NULL则停止播放正在播放的任何声音。fuSound为标志参数(无符号整数),可取值为表12-3中所列诸符号常量的或:表12-3 sndPlaySound函数中的fuSound参数fuSound值对应数值含义SND_ASYNC0x01异
12、步播放,调用后立即返回(最常用)SND_LOOP0x08循环播放,必须与SND_ASYNC标志同用SND_MEMORY0x04lpszSound指向内存中波形声音映像(可以动态生产声音)SND_NODEFAULT0x02找不到指定声音时,不播放缺省的声音SND_NOSTOP0x10如果有声音正在播放,则不播放指定的声音而直接返回SND_SYNC0x00同步播放,直到声音播完后调用才返回(缺省值)为了结束异步或循环播放,可以用lpszSound=NULL来调用sndPlaySound函数。如:sndPlaySound(LSystemAsterisk, SND_ASYNC);sndPlaySoun
13、d(strWaveFile, SND_LOOP | SND_ASYNC);sndPlaySound(NULL, 0);又如:void CMTestDlg:OnSndplayPlay() char filters = L波形音频文件(*.wav)|*.wav|所有文件(*.*)|*.*|;CFileDialog fDlg(TRUE, NULL, NULL, OFN_HIDEREADONLY, filters);if (fDlg.DoModal() = IDOK) CString strWavFile = fDlg.GetPathName();UINT flags = 0;if (IsDlgBut
14、tonChecked(IDC_SNDPLAY_ASYNC) flags |= SND_ASYNC;if (IsDlgButtonChecked(IDC_SNDPLAY_LOOP) flags |= SND_LOOP;if (IsDlgButtonChecked(IDC_SNDPLAY_NOSTOP) flags |= SND_NOSTOP;sndPlaySound(strWavFile, flags);void CMTestDlg:OnSndplayStop() sndPlaySound(NULL, 0);注意:对波形文件,系统先在当前目录中查找,若没有,再到标准的搜索路径中去查找。若没有找到
15、指定的系统声音或波形文件,则播放系统缺省声音;若没有定义系统缺省声音,则不播放任何声音并返回FALSE。另外,为了使包含sndPlaySound、PlaySound或MCI函数的程序能够编译通过,必须包含多媒体头文件:#include 并在项目属性中添加对多媒体库winmm.lib的链接。12.2.3 PlaySoundsndPlaySound是为了与Win16兼容而保留的老函数,而PlaySound是Win32引进的新函数,它的功能更强大,sndPlaySound只不过是它的子集。其函数原型为:BOOL PlaySound( LPCSTR pszSound, HMODULE hmod, DW
16、ORD fdwSound);其中参数n pszSound含义与fdwSound的设置有关。u 若fdwSound标志设置为SND_ALIAS、SND_FILENAME或SND_RESOURCE,则pszSound为系统事件的别名、文件名或资源IDu 若fdwSound标志没有设置这些值,则先在注册表或win.ini中寻找串为pszSound的声音,若没有,则视其为文件名u 若pszSound=NULL,则停止播放正在播放的任何声音(同sndPlaySound)。若要停止非波形格式的声音,必须设置fdwSound的标志SND_PURGEn hmodu 若设置了fdwSound的标志SND_RES
17、OURCE,则hmod为包含pszSound所指定资源的可执行文件的句柄u 若没有设置fdwSound的标志SND_RESOURCE,则hmod必须为NULLn fdwSound似sndPlaySound的fuSound为标志参数,它除了可取fuSound可取的6个值外,还可以取表12-4中所列的值。表12-4 PlaySound函数中的fdwSound参数的部分值fdwSound值对应数值含义SND_NOWAIT0x002000若设备忙,则不等待(不播放声音,立即返回)SND_ ALIAS0x010000pszSound为注册项的别名SND_ ALIAS_ID0x110000别名是一个预定义
18、的IDSND_ FILENAME0x020000pszSound为文件名SND_ RESOURCE0x040004pszSound为资源名或原子(atom)SND_ PURGE0x40清除任务的非静止事件SND_ APPLICATION0x80使用应用程序指定关联程序来播放声音例如:PlaySound(Lc:soundssample.wav, NULL, SND_ASYNC);若定义了波形资源:IDR_SAMPLE WAVE ressample.wav则可用下面的语句来播放:PlaySound(MAKEINTRESOURCE(IDR_SAMPLE), AfxGetInstanceHandle(
19、), SND_ RESOURCE);也可以用PlaySound来播放系统声音,如PlaySound(LSystemHand, NULL, SND_ASYNC);12.3 MCI编程MCI(Media Control Interface媒体控制接口)是Windows中控制多媒体设备的高层命令接口,用于事件协调及与MCI设备驱动程序的通信。MCI的主要特点是其设备独立性。通过设备驱动程序,MCI提供了与设备无关的虚拟接口。参见图12-3。多媒体应用程序MCI设备驱动程序MCI命令多媒体设备图12-3 MCI的设备独立性MCI的核心是MCI的设备驱动程序,它用于解释和执行MCI的命令,可分成如下三类
20、:n 直接控制媒体设备硬件,如CD音乐、影碟机n 间接控制目标设备,通过低层MMAPI间接控制,如MIDI、WAVn 提供DLL高层接口,如AVI/MPEG影片播放器12.3.1 MCI设备MCI设备可分为如下两种类型:n 简单设备不需要提供数据文件,如CD音乐、激光视盘机n 复合设备需要提供数据文件,如MIDI音序器(.MID)、波形音频设备(.WAV)、影片播放器(.AVI/.MPG)每类MCI设备都有对应的命令集,但也有若干同类MCI驱动程序共用同一命令集,为了区分不同的驱动程序,MCI引入设备名:(按字母序排列)n animation动画播放设备n cdaudioCD音乐播放设备n d
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 多媒体技术 12 多媒体 开发 MCI MMAPI 编程

限制150内