




已阅读5页,还剩43页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
29 第12章 多媒体开发与MCI和MMAPI编程第三篇 多媒体开发多媒体开发是多媒体技术的一个重要方面,也是计算机专业人员可充分发挥自己长处的地方。本篇主要介绍,在Windows环境下进行多媒体开发的,各种应用程序编程接口的使用方法。本篇首先介绍多媒体开发的一般概念,比较两类媒体集成工具的优劣;然后给出在Windows中播放波形音频的三种方法与函数;重点介绍传统的Windows高/底层多媒体编程接口MCI和MMAPI,对后者主要介绍MIDI和MMIO编程。本篇的另一个重点内容,是介绍微软公司所推崇的(多媒体和计算机游戏的开发接口)DirectX SDK编程。先概述DirectX的发展历史和版本演化、功能结构与组件模块,重点介绍DirectX的主要组件Direct3D和DirectSound的基本编程方法,并给出若干实例。本篇包含如下2章:n 第12章 多媒体开发与MCI和MMAPI编程n 第13章 DirectX编程入门第12章 多媒体开发与MCI和MMAPI编程本章先概述多媒体开发的要素、过程和工具,接着给出播放波形音频文件的三个高层函数,然后讨论MCI、MMIO与MIDI等多媒体编程接口,重点介绍MCI编程。12.1 多媒体开发概述多媒体的开发有人、环境和工具三个要素,其开发过程与人员有关,其开发工具分为素材准备和媒体集成两大类,而其中的媒体集成工具又可分成编程和著作两类。12.1.1 开发要素n 人 开发者 = 设计人员 + 编程人员n 环境 软硬件 = 多媒体计算机(MPC等) + 多媒体操作系统(MOS)n 工具 开发软件 = 素材准备工具 + 媒体集成工具(编程/著作)12.1.2 开发过程与人员多媒体开发的过程与相关人员如图12-1所示。领域问题应用程序剧本设计程序编制媒体数据准备领域专家剧本编导文字编辑音乐音效美工摄影视频制作软件人员图12-1 多媒体的开发过程与相关人员12.1.3 开发工具多媒体的开发工具可以分为素材准备和媒体集成两大类,而其中的集成工具又可进一步分成编程和著作两类。本书重点介绍集成工具中的编程类。1。素材准备工具l 常用软件n 文字: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/DirectXu 底层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 基于页(脚本/卡片)将媒体对象连接于页(卡片/节点)上,以面向对象方式处理媒体元素,用属性定义/脚本规范媒体元素,超文本功能强,特别适合于电子图书、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、数据交换、嵌入u 模块化面向对象u 界面友好易学易用u 扩充性好支持各种扩展l 比较两种媒体集成工具的优缺点与适用范围的比较见表12-1。表12-1 多媒体集成工具的比较类型优点缺点适用编程控制灵活,速度快难度大、工作量大、周期长、需专业程序员、设计人员与编程人员难沟通集成、量小、快速著作容易、工作量小、周期短、不需专业程序员速度慢,控制粗单独、量大、固定方式12.2 播放波形音频文件本节介绍Windows中只可用来播放音频文件的几种高层函数,包括只能播放系统声音的MessageBeep、Win16中就有的可以播放波形文件的老函数sndPlaySound、以及Win32引进的功能强大的播放波形文件的新函数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值声音0xFFFFFFFF(-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 StopSystemQuestion=chord.wav, QuestionSystemDefault=ding.wav, Default BeepSystemStart=data.wav, Windows StartSystemExit=c:windows/glass.wav, Windows Exit若系统没有安装音频设备,则会使用计算机本身的小喇叭来发声;否则,会调用声卡来播放对应的波形文件。可以用SDK函数waveOutGetNumDevs来判断系统是否安装了音频设备,其原型为:UINT waveOutGetNumDevs(VOID); / 返回系统中安装的音频设备数如if (waveOutGetNumDevs() = 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异步播放,调用后立即返回(最常用)SND_LOOP0x08循环播放,必须与SND_ASYNC标志同用SND_MEMORY0x04lpszSound指向内存中波形声音映像(可以动态生产声音)SND_NODEFAULT0x02找不到指定声音时,不播放缺省的声音SND_NOSTOP0x10如果有声音正在播放,则不播放指定的声音而直接返回SND_SYNC0x00同步播放,直到声音播完后调用才返回(缺省值)为了结束异步或循环播放,可以用lpszSound=NULL来调用sndPlaySound函数。如:sndPlaySound(LSystemAsterisk, SND_ASYNC);sndPlaySound(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 (IsDlgButtonChecked(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);注意:对波形文件,系统先在当前目录中查找,若没有,再到标准的搜索路径中去查找。若没有找到指定的系统声音或波形文件,则播放系统缺省声音;若没有定义系统缺省声音,则不播放任何声音并返回FALSE。另外,为了使包含sndPlaySound、PlaySound或MCI函数的程序能够编译通过,必须包含多媒体头文件:#include 并在项目属性中添加对多媒体库winmm.lib的链接。12.2.3 PlaySoundsndPlaySound是为了与Win16兼容而保留的老函数,而PlaySound是Win32引进的新函数,它的功能更强大,sndPlaySound只不过是它的子集。其函数原型为:BOOL PlaySound( LPCSTR pszSound, HMODULE hmod, DWORD 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_RESOURCE,则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别名是一个预定义的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(), 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的命令,可分成如下三类: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 dat数字音频磁带机(DAT = Digital Audio Tape数字录音带)n digitalvideo数字视频(不基于GUI)n mmmovie多媒体影片播放设备n other未定义的MCI设备(扩展用)n overlay窗口中的模拟视频接口(基于GUI)n scanner图像扫描仪n sequencerMIDI音序器n vcr盒式磁带录像机(VCR = Video Cassette Recorder)n videodisc影碟机n waveaudio波形音频设备这些设备名所对应的设备驱动程序在Win32/64的注册表或老版本Windows的win.ini中定义。如win.ini的mci段:mcicdaudio=mcicda.drvwaveaudio=mciwave.drvsequencer=mciseq.drvmmmovie=mcimmp.drv12.3.2 接口、函数与命令多媒体应用程序通过发送命令来控制多媒体设备,MCI有串和消息两种命令接口方式。这些命令接口,又由若干MCI函数来具体实现。l 接口应用程序通过向MCI设备发送命令来控制它,这种命令有两种接口方式:(功能等价)n 命令串方式用近似英语的句法与MCI设备通信,直观、面向用户。是一种文本形式的接口,常用于VB等可视化编程平台和ToolBook等多媒体著作工具。如mciExcute(Lplay cdaudio from 2 to 5);n 命令消息方式利用消息和数据结构与MCI设备通信,快速、面向程序员。常用于C/C+语言的应用程序,以直接控制多媒体设备。如:MCI_PLAY_PARMS playParms;playParms.dwFrom = MCI_MAKE_TMSF(2, 0, 0, 0);playParms.dwTo = MCI_MAKE_TMSF(6, 0, 0, 0);mciSendCommand(wDevID, MCI_PLAY, MCI_FROM | MCI_TO, (DWORD)(LPVOID)&playParms); l 函数MCI函数中,有些只适用于一种接口方式,有些则两种接口都可以用。1)仅命令串方式只适用于命令串接口方式的有下列2个函数:(命令串中不区分大小写)n mciSendString(发送命令串),函数原型为:MCIERROR mciSendString( / 出错返回非零值(错误代码)/ 可用mciGetErrorString获得错误的文本描述 LPCTSTR lpszCommand, / 指向以null结尾的命令字符串:”命令 设备 参数” LPTSTR lpszReturnString,/ 指向接收返回信息的缓冲区,为NULL时不返回信息 UINT cchReturn, / 上述缓冲区的大小 HANDLE hwndCallback / 在命令串中含notify时,它指定一个回调窗口的句柄/ 一般为NULL);如:mciSendString(Lopen sample.wav type waveaudio alias wave, NULL, 0, NULL);n mciExcute(执行)是mciSendString的简化形式:BOOL mciExcute(LPCTSTR lpszCommand); / 成功返回TRUE该函数只有Win16支持,Win32不支持,可自写一函数实现:BOOL mciExcute(LPCTSTR lpszCommand) if (mciSendString(lpszCommand, NULL, 0, NULL) return FALSE;return TRUE;如:mciExcute(Lopen sample.wav type waveaudio alias wave);2)仅命令消息方式只适用于命令消息接口方式的只有一个函数:n mciSendCommand(发送命令),函数原型为:MCIERROR mciSendCommand( / 出错返回非零值(低字错误代码,高字驱动程序ID) / 也可用mciGetErrorString获得错误的文本描述 MCIDEVICEID IDDevice, / 接收命令消息的MCI设备ID/ 对MCI_OPEN消息为NULL UINT uMsg, / 命令消息 DWORD fdwCommand, / 命令消息的附加标志 DWORD dwParam / 命令消息参数的结构指针(可统一函数形式));如:MCI_OPEN_PARMS openParms;openParms.lpstrDeviceType = Lwaveaudio;openParms.lpstrElementName = Lsample.wav;openParms.lpstrAlias = Lwave;mciSendCommand(NULL, MCI_OPEN, MCI_OPEN_TYPE | MCI_OPEN_ELEMENT | MCI_OPEN_ALIAS, (DWORD)(LPVOID)&playParms);MCIDEVICEID wDevID = openParms.wDeviceID;3)两种接口方式两种接口方式都支持的函数有五个:n mciGetErrorString(获得出错文本串)BOOL mciGetErrorString( / 成功返回TRUE DWORD fdwError, / 由mciSendString或mciSendCommand返回的错误代码 LPTSTR lpszErrorText, / 指向接收返回错误信息的文本缓冲区 UINT cchErrorText / 上述缓冲区的长度 );如:MCIERROR err = mciSendString(Lopen sample.wav type waveaudio alias wave, NULL, 0, NULL);if (err) wchar_t errStr256;if (mciGetErrorString(err, errStr, 256) MessageBox(errStr, LError);n mciGetDeviceID(获得设备ID),函数原型为:MCIDEVICEID mciGetDeviceID( / 出错返回非零 LPCTSTR lpszDevice / 已经打开的设备别名);如:wDevID = mciGetDeviceID(Lwaveaudio);或wDevID = mciGetDeviceID(Lwave);n mciSetYieldProc(设置等待时调用的过程)UINT mciSetYieldProc(/ 成功返回非零值 MCIDEVICEID IDDevice, / 指定设备ID YIELDPROC yp, / 等待时调用的过程 DWORD dwYieldData / 传送给过程的参数);n mciGetYieldProc(获得等待时调用的过程)YIELDPROC mciGetYieldProc( / 成功返回回调函数,失败返回NULL MCIDEVICEID IDDevice, / 被监控的MCI设备的ID LPDWORD lpdwYieldData / 指向传送给过程的参数之缓冲区,可为NULL);n mciGetCreatorTask(获取创建任务)HANDLE mciGetCreatorTask( / 成功返回创建指定设备的任务句柄,失败返回NULL MCIDEVICEID IDDevice / 已经打开的设备ID);其中,后三个函数少用。l 命令MCI的命令很多,可以分为如下四类:n 系统命令直接由MCI系统解释和处理,不传送到MCI设备。如break或MCI_BREAKn 通用命令所有MCI设备都支持的命令。如open或MCI_OPENn 可选命令MCI设备可选择使用的命令。如play或MCI_PLAYn 专用命令为某类MCI设备集专有。如list或MCI_LIST(DV/VCR)前三类中部分命令参见表12-5:表12-5 MCI的命令(字母序)类型消息串说明系统MCI_BREAKbreak为指定MCI设备设置终止键MCI_SOUNDsound播放Windows指定的系统声音MCI_SYSINFOsysinfo返回有关MCI设备的信息通用MCI_CLOSEclose关闭MCI设备MCI_GETDEVCAPSgetdevcaps获得MCI设备的性能参数MCI_INFOinfo获得MCI设备的有关信息MCI_OPENopen打开(初始化)MCI设备MCI_STATUSstatus返回MCI设备的状态信息可选MCI_LOADload从文件中加载数据MCI_PAUSEpause暂停播放/记录MCI_PLAYplay开始播放数据MCI_RECORDrecord开始记录数据MCI_RESUMEresume重新开始播放/记录MCI_SAVEsave保存数据到文件MCI_SEEKseek改变当前位置MCI_SETset改变控制设置MCI_STOPstop停止播放/记录标志MCI_WAITwaitMCI命令执行完后才返回MCI_NOTIFYnotifyMCI命令执行完后向应用程序发送MM_MCINOTIFY消息注:接收MM_MCINOTIFY消息的窗口句柄由mciSendString的最后一个输入参数指定,或由mciSendCommand的最后一个输入参数MCIDEVICEID结构的第一个域指定。l 附加标志与参数结构复杂的命令一般都有附加标志,并需要设置相应数据结构。如打开命令MCI_OPEN消息的附加标志见表12-6(可以位或|)。表12-6 打开命令的部分附加标志标志含义(在MCI_OPEN_PARMS结构的)MCI_OPEN_ALIASlpstrAlias域指定了别名MCI_OPEN_ELEMENTlpstrElementName域指定了元素(文件)名MCI_OPEN_SHAREABLE按共享方式打开MCI设备MCI_OPEN_TYPElpstrDeviceType域指定了设备类型MCI_OPEN_TYPE_IDwDeviceID域指定了设备类型的ID其中,结构MCI_OPEN_PARMS的定义为:typedef struct DWORD dwCallback; MCIDEVICEID wDeviceID; LPCSTR lpstrDeviceType; LPCSTR lpstrElementName; LPCSTR lpstrAlias; MCI_OPEN_PARMS;12.3.3 编程下面以播放CD音乐与波形音频文件为例,介绍简单与复杂MCI设备的多媒体编程。l 准备为了使用MCI编程,必须包含多媒体头文件:#include 并在项目属性中添加对多媒体库winmm.lib链接。l 命令串1)CDwchar_t buf256;MCIERROR err = mciSendString(Lopen cdaudio alias cd, NULL, 0, NULL); / 打开CDif (err) if (mciGetErrorString(err, buf, 256) MessageBox(buf, LError); / 获得并显示错误串return;mciSendString(Lstatus cd number of tracks, buf, 256, NULL); / 获得音轨总数m_nTracks = wcstol(buf, NULL, 10); / 这里使用了宽字符版的字符串到整数的/ 转换函数:long wcstol( const wchar_t *nptr, wchar_t *endptr, int base );wsprintf(buf, Lplay cd from %d to %d, m_nFrom, m_nTo); mciSendString(buf, NULL, 0, NULL); / 从音轨m_nFrom头播放到音轨m_nTo1尾其他常用命令:mciSendString(Lset cd time format tmsf, NULL,0,NULL); / 设置时间格式为/ 轨(100):分(100):秒(60):帧(strFilePath);MCIERROR err = mciSendString(buf, NULL, 0, NULL);if (err) if (mciGetErrorString(err, buf, 256) MessageBox(buf, L“Error”);return;/ t1和t2为用户指定的起止时间(单位为秒,浮点变量)DWORD start = (DWORD)(t1 * 1000 + 0.5), end = (DWORD)(t2 * 1000 + 0.5);wsprintf(buf, Lplay sound from %ld to %ld, start, end);mciSendString(buf, NULL, 0, NULL);其他常用命令:mciSendString(Lstatus sound length, buf, 256, NULL);mciSendString(Lpause sound, NULL, 0, NULL);mciSendString(Lplay sound, NULL, 0, NULL); / 从当前位置播放到文件尾mciSendString(Lstop sound, NULL, 0, NULL);mciSendString(Lclose sound, NULL, 0, NULL);l 命令消息1)CD/ 打开CDwchar_t buf256;MCI_OPEN_PARMS openParms;openParms.lpstrDeviceType = Lcdaudio;openParms.lpstrAlias = Lcd;MCIERROR err = mciSendCommand(NULL, MCI_OPEN, MCI_OPEN_TYPE | MCI_OPEN_ALIAS, (DWORD)(LPVOID)&playParms);if (err) if (mciGetErrorString(err, buf, 256) MessageBox(buf, LError);return;MCIDEVICEID wDevID = openParms.wDeviceID;/ 设置时间格式MCI_SET_PARMS setParms;setParms.dwTimeFormat = MCI_FORMAT_TMSF;mciSendCommand(wDevID, MCI_SET, MCI_SET_TIME_FORMAT, (DWORD)(LPVOID)&setParms);/ 播放CDMCI_PLAY_PARMS playParms;playParms.dwFrom = MCI_MAKE_TMSF(m_nFrom, 0, 0, 0);playParms.dwTo = MCI_MAKE_TMSF(m_nTo, 0, 0, 0);mciSendCommand(wDevID, MCI_PLAY, MCI_FROM | MCI_TO, (DWORD)(LPVOID)&playParms); 其中,设置结构MCI_SET_PARMS的定义为:typedef struct DWORD dwCallback; DWORD dwTimeFormat; DWORD dwAudio; MCI_SET_PARMS;播放结构MCI_PLAY_PARMS的定义为:typedef struct DWORD dwCallback; DWORD dwFrom; DWORD dwTo; MCI_PLAY_PARMS;2)WAV/ 打开wchar_t buf256;MCI_OPEN_PARMS openParms;openParms.lpstrDeviceType = Lwaveaudio;openParms.lpstrElementName = Lsample.wav;openParms.lpstrAlias = Lwave;MCIERROR err = mciSendCommand(NULL, MCI_OPEN, MCI_OPEN_TYPE | MCI_OPEN_ELEMENT | MCI_OPEN_ALIAS, (DWORD)(LPVOID)&playParms);if (err) if (mciGetErrorString(err, buf, 256) MessageBox(buf, LError);return;MCIDEVICEID wDevID = openParms.wDeviceID;mciSendCommand(wDevID, MCI_PLAY, NULL, NULL); / 播放12.4 MMAPI简介MMAPI(MultiMedia API)是Windows的底层多媒体编程接口,包括波形音频处理(45个函数)、MIDI操作(41个函数)、多媒体计时器管理(8个函数)、操作杆控制(8个函数)和多媒体文件I/O(19个函数),共121个函数、44条消息和14个数据结构。本节只是列出各类MMAPI函数的名称,其中的MMIO和MIDI部分会在后面两节中介绍,其他MMAPI的函数和功能可参见Visual C+的帮助系统。在Visual Studio 2005的帮助系统中,MCI和MMAPI的帮助位于“目录Win32和COM开发Graphics and MultimediaWindows MultimediaSDK DocumentationWindows Multimedia”的诸子目录中。12.4.1 波形音频处理MMAPI中含有45个波形音频处理函数(5个aux*+2个* PlaySound+38个waveIn/Out*):auxGetDevCapsauxGetNumDevsauxGetVolumeauxOutMessageauxSetVolumePlaySoundsndPlaySoundwaveInAddBufferwaveInClosewaveInGetDevCapswaveInGetErrorTextwaveInGetIDwaveInGetNumDevswaveInGetPositionwaveInMessagewaveInOpenwaveInPrepareHeaderwaveInProcwaveInResetwaveInStartwaveInStopwaveInUnprepareHeaderwaveOutBreakLoopwaveOutClosewaveOutGetDevCapswaveOutGetErrorTextwaveOutGetIDwaveOutGetNumDevswaveOutGetPitchwaveOutGetPlaybackRatewaveOutGetPositionwaveOutGetVolumewaveOutMessagewaveOutOpenwaveOutPausewaveOutPrepareHeaderwaveOutProcwaveOutResetwaveOutRestartwaveOutSetPitchwaveOutSetPlaybackRatewaveOutSetVolumewaveOutUnprepareHeaderwaveOutWrite12.4.2 MIDIMMAPI中含有41个MIDI函数:midiConnect midiDisconnectmidiInAddBuffermidiInClosemidiInGetDevCapsmidiInGetErrorTextmidiInGetIDmidiInGetNumDevsmidiInMessagemidiInOpenmidiInPrepareHeadermidiInProcmidiInResetmidiInStartmidiInStopmidiInUnprepareHeadermidiOutCacheDrumPatchesmidiOutCachePatchesmidiOutClosemidiOutGetDevCapsmidiOutGetErrorTextmidiOutGetIDmidiOutGetNumDevsmidiOutGetVolumemidiOutLongMsgmidiOutMessagemidiOutOpenmidiOutPrepareHeaderMidiOutProcmidiOutResetmidiOutSetVolumemidiOutShortMsgmidiOutUnprepareHeadermidiStreamClosemidiStreamOpenmidiStreamOutmidiStreamPausemidiStreamPositionmidiStreamPropertymidiStreamRestartmidiStreamStop12.4.3 计时器MMAPI中含有8个多媒体时间函数:timeBeginPeriodtimeEndPeriodtimeGetDevCapstimeGetSystemTimetimeGetTimetimeKillEventTimeProctimeSetEvent12.4.4 操作杆MMAPI中含有8个操作杆(joystick)函数:joyGetDevCapsjoyGetNumDevsjoyGetPosjoyGetPosExjoyGetThresholdjoyReleaseCapturejoySetCapturejoySetThreshold12.4.5 多媒体文件I/O这里只罗列MMIO定义的2个数据类型和2个结构,以及它所提供的18个函数和1个宏,还有7个专用消息。有关MMIO的详细内容,将在后面的12.6节中作部分介绍。l 数据类型FOURCC; / 4字符代码MMRESULT; / 错误返回代码(0表示正确)l 结构:MMIOINFO; / I/O信息MMCKINFO; / 块信息l 函数或宏n 基本I/O(6个):mmioClose、mmioOpen、mmioRead、mmioRename、mmioSeek、mmioWriten 缓冲I/O(5个):mmioAdvance、mmioFlu
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 风电叶片水性涂料项目可行性研究报告
- 防汛抢险知识培训资料课件
- 旅游业项目计划报告
- 酒店客房服务方案指南
- GeneralAgencyAgreement总代理协议3篇
- 节点重要性评估-洞察及研究
- 藤材资源优化-洞察及研究
- 气压纳米材料改性-洞察及研究
- 2025年广东省广州市中考物理三轮冲刺《声现象》
- 基于强化学习的多目标控温算法在非线性热源干扰下的鲁棒性优化路径探索
- 1.3加与减①(课件)数学沪教版二年级上册(新教材)
- 2025至2030中国HPV相关疾病行业项目调研及市场前景预测评估报告
- 许昌襄城县特招医学院校毕业生招聘笔试真题2024
- 2025版全新离婚协议书:财产分割、子女抚养及离婚后财产保全合同范本
- 石油钻井知识课件
- 永辉超市快消培训
- “学回信精神·助改革发展”专题调研报告
- 2025年医学基础知识题库及答案
- (2025秋新版)苏教版三年级数学上册全册教案
- 2025北京京剧院招聘10人考试备考试题及答案解析
- 2025至2030中国催收外包服务行业销售模式及未来营销策略分析报告
评论
0/150
提交评论