计算机科学与技术本科生毕业论文——基于win32的媒体播放器的实现_第1页
计算机科学与技术本科生毕业论文——基于win32的媒体播放器的实现_第2页
计算机科学与技术本科生毕业论文——基于win32的媒体播放器的实现_第3页
计算机科学与技术本科生毕业论文——基于win32的媒体播放器的实现_第4页
计算机科学与技术本科生毕业论文——基于win32的媒体播放器的实现_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、本科生毕业论文(设计)题 目: 基于win32的媒体播放器的实现 目 录摘要 HYPERLINK l _Toc449621117 PAGEREF _Toc449621117 h 1关键词 HYPERLINK l _Toc449621117 PAGEREF _Toc449621117 h 1 TOC o 1-3 h z u HYPERLINK l _Toc449621117 Abstract PAGEREF _Toc449621117 h 1 HYPERLINK l _Toc449621118 Key words PAGEREF _Toc449621118 h 1引言 HYPERLINK l _

2、Toc449621120 PAGEREF _Toc449621120 h 1 HYPERLINK l _Toc449621120 1 选题背景 PAGEREF _Toc449621120 h 1 HYPERLINK l _Toc449621121 1.1 问题的提出 PAGEREF _Toc449621121 h 1 HYPERLINK l _Toc449621122 1.2 国内外研究状况 PAGEREF _Toc449621122 h 2 HYPERLINK l _Toc449621123 1.2.1 国外研究状况 PAGEREF _Toc449621123 h 2 HYPERLINK l

3、 _Toc449621124 1.2.2 国内研究状况 PAGEREF _Toc449621124 h 2 HYPERLINK l _Toc449621125 1.3 研究的目的和内容 PAGEREF _Toc449621125 h 3 HYPERLINK l _Toc449621126 1.3.1 研究目的 PAGEREF _Toc449621126 h 3 HYPERLINK l _Toc449621128 1.3.2 研究内容 PAGEREF _Toc449621128 h 3 HYPERLINK l _Toc449621129 2 开发平台及应用技术 PAGEREF _Toc44962

4、1129 h 4 HYPERLINK l _Toc449621130 2.1 WIN32 API函数介绍 PAGEREF _Toc449621130 h 4 HYPERLINK l _Toc449621131 2.1.1 WIN32 API简介 PAGEREF _Toc449621131 h 4 HYPERLINK l _Toc449621132 2.1.2 WIN32 API历史 PAGEREF _Toc449621132 h 4 HYPERLINK l _Toc449621133 2.1.3 WIN32 API分类 PAGEREF _Toc449621133 h 4 HYPERLINK l

5、 _Toc449621134 2.2 多媒体功能API函数介绍 PAGEREF _Toc449621134 h 5 HYPERLINK l _Toc449621135 2.3 MCI命令接口编程 PAGEREF _Toc449621135 h 6 HYPERLINK l _Toc449621136 2.3.1 MCI设备 PAGEREF _Toc449621136 h 6 HYPERLINK l _Toc449621137 2.3.2 MCI命令 PAGEREF _Toc449621137 h 6 HYPERLINK l _Toc449621138 2.3.3 MCI命令消息接口方式 PAGE

6、REF _Toc449621138 h 7 HYPERLINK l _Toc449621139 2.3.4 MCI命令字符串接口方式 PAGEREF _Toc449621139 h 9 HYPERLINK l _Toc449621140 3 多媒体播放器的开发与设计 PAGEREF _Toc449621140 h 9 HYPERLINK l _Toc449621141 3.1 窗口过程与消息处理机制 PAGEREF _Toc449621141 h 9 HYPERLINK l _Toc449621142 3.2 队列消息与非队列消息 PAGEREF _Toc449621142 h 10 HYPE

7、RLINK l _Toc449621143 3.3 媒体播放器的核心功能以及函数分析 PAGEREF _Toc449621143 h 11 HYPERLINK l _Toc449621144 3.3.1 主对话框窗口过程 PAGEREF _Toc449621144 h 11 HYPERLINK l _Toc449621145 3.3.2 打开文件 PAGEREF _Toc449621145 h 13 HYPERLINK l _Toc449621146 3.3.3 删除文件 PAGEREF _Toc449621146 h 14 HYPERLINK l _Toc449621147 3.3.4 播放

8、歌曲 PAGEREF _Toc449621147 h 14 HYPERLINK l _Toc449621148 3.3.5 暂停或恢复播放歌曲 PAGEREF _Toc449621148 h 16 HYPERLINK l _Toc449621149 3.3.6 停止播放歌曲 PAGEREF _Toc449621149 h 16 HYPERLINK l _Toc449621150 3.3.7 上一曲、下一曲 PAGEREF _Toc449621150 h 17 HYPERLINK l _Toc449621151 3.3.8 音量、播放模式转换 PAGEREF _Toc449621151 h 17

9、 HYPERLINK l _Toc449621152 3.3.9 显示歌词 PAGEREF _Toc449621152 h 19 HYPERLINK l _Toc449621153 3.3.10 搜索歌曲 PAGEREF _Toc449621153 h 21 HYPERLINK l _Toc449621154 3.3.11 复制到移动设备 PAGEREF _Toc449621154 h 21 HYPERLINK l _Toc449621155 3.3.12 获取在线MV PAGEREF _Toc449621155 h 22 HYPERLINK l _Toc449621156 3.3.13 在线

10、搜歌 PAGEREF _Toc449621156 h 24 HYPERLINK l _Toc449621157 3.3.14 换肤 PAGEREF _Toc449621157 h 25 HYPERLINK l _Toc449621158 4 系统实现与系统总结 PAGEREF _Toc449621158 h 25 HYPERLINK l _Toc449621159 4.1 实现的效果截图 PAGEREF _Toc449621159 h 25 HYPERLINK l _Toc449621160 4.2 解决的关键问题 PAGEREF _Toc449621160 h 31 HYPERLINK l

11、_Toc449621161 4.3 总结 PAGEREF _Toc449621161 h 31致谢 HYPERLINK l _Toc449621161 32参考文献 HYPERLINK l _Toc449621161 32基于win32的媒体播放器的实现摘要:目前市场多媒体播放器种类繁多,为了开发简便大多数多媒体播放器通常采用第三方框架,这样导致了软件资源占用较大。针对这一问题对多媒体播放器的需求进行分析,在WINDOWS NT环境下利用C语言,WIN32 API和MCI多媒体指令接口实现了一款体积较小、资源占用较少的绿色媒体播放器。研究了对歌曲读取与显示模块的转码、进度条的匹配、配置、网页脚

12、本分析与向外部程序传参等问题并进行了有效解决。播放器支持多种音频、视频等格式播放,支持在最小化到托盘的情况下,用户可正常进行播放模式的切换、歌词显示以及MV观看等功能。关键词:媒体播放器;win32;MCI接口Implementation of Media Player based on Win32Abstract:Now the type of Media Player is various, for the sake of simplicity, most Media Player used the third-party framework, however, the resource

13、cost and the waste of cache is very large. Multimedia player needs to be analyzed against this problem, we use C language, win32 API and MCI instruction to make a green media player based on WINDOWS NT which has a small size and less resource consumption. We discuss about transcoding of songs, match

14、ing of the progress bar, analysis of the page script, parameter transmission to external program and other issues. All of the issues above have been effectively solved. The media player supports when minimized to the tray, the user can switch to normal play mode, make lyrics be displayed, achieve an

15、d view music video and other functions. Key words: media player; win32; MCI interface随着多媒体技术的发展,越来越多的人开始使用多媒体,多媒体已经走出了实验室,进入了商业市场、学校、政府机构。因此,在这些领域中,多媒体播放器作为多媒体呈现的载体,其开发与制作也越来越得到关注。1 选题背景1.1 问题的提出将声乐与视频集成到Windows操作系统中是一个历史性的重大进步。Windows系统中最初对多媒体的支持是在1991年时微软为Windows特别添加的多媒体扩展系统。1992年发布的Windows3.1将多媒体

16、作为单独的一类API。近年来,在20世纪90年代还十分少见的CD_ROM驱动器和声卡已成为了新计算机的标准配置。如今,绝大多数人都认为多媒体和Windows的图形视觉相辅相成,推动计算机突破了其传统的形象(一堆数字和文本的集合体)。随着计算机科学网络的普及和多媒体技术的发展,多媒体技术已经成为计算机领域发展的热点技术,针对目前各种媒体格式,如何既高效有快捷的播放各类多媒体成为了大多数人关注的重点,因此媒体播放器的开发任重而道远。1.2 国内外研究状况随着网络技术,中央处理器和存储器的多方位发展,多媒体技术早已把计算机、通信及音像等紧密地结合在了一起。现在,国内外数字化多媒体已经被应用到教育、通

17、信、金融、建筑艺术、娱乐、通信等各个领域。并且在移动端开始崭露头角,随着无线技术的发展,多媒体的传播方式已经从有线跨入了无线的领域。1.2.1 国外研究状况国外多媒体技术的概念以及其应用出现于20世纪80年代初期,经过了十余年的发展,伴随计算机科学网络的普及与多媒体技术的飞速发展,多媒体技术早已成为计算机领域的又一大热点,针对目前的各种多媒体格式,如何既高效有快捷的播放各类多媒体成为了大多数人关注的重点,因此媒体播放器的开发任重而道远。国外出现了诸如MXplayer,KMP等全能解码播放器。美国MIT媒体实验室认为,多媒体在当今社会地位逐渐变得重要,但是在主要技术方面很难突破。要想取得很大突破

18、性进展需要消耗大量的财力和人力。与此同时,国外的多媒体技术开始向移动和流媒体发展,如瑞士著名流媒体推送平台Spotify、Tunigo(已经于2013年5月7日被Spotify收购)、The Echo Nest(已经于2014年3月7日被Spotify收购)与苹果公司的Apple Music平台等。大多数对媒体都支持跨平台,采用的编码方式是Ogg Vorbis q5 codec编码,音频流大约为160kb/s,另外Spotify的在线播放模式在早期使用的是P2P模式,因此在在线播放时异常流畅,缓冲延迟的次数很少,极少卡顿。另外,The Echo Nest的智能音乐平台整合了大数据挖掘、自然语言

19、的处理、声学分析等先进技术,可以自动对音乐进行深度挖掘并且帮助分析音乐发展的走向。此外,各类多媒体播放器的界面都非常完美,运行流畅,如Foobar2000,Foobar2000是一个Windows平台下的高级音频播放器。Foobar2000是由适用于Winamp的插件PeterPawlowski编写的一个具有革命性的高级音频播放器。Foobar2000值得关注的在于他良好的体系结构。除了重要的音频管道外播放器所有功能部件均是模块化的。Foobar2000的可视化核心由一个视频播放插件提供,改核心支持对给定适当的MP3文件在输出级别上减少间隙的功能,比光使用DSP和输出插件模拟器要来的更加好。F

20、oobar2000在播放所有支持格式时自动尽可能的无间隙播放、完美的在无损的、OGG、MPC、MP3格式上实现。Foobar2000默认使用界面是原生WIN32 GUI,该初始界面支持更改为非标准的、可换肤的界面。在Foobar2000中的所有选项和命令都可以通过预设值的组合键来完成、且组合键可以由用户自由的进行重新排列整理。Foobar2000内置系统还还能够支持播放增益(ReplayGain)效果,这对于所有音频格式文件来说,已经成为了标准化的方法。总体来说,国外的多媒体播放器研究已经成熟。1.2.2 国内研究状况相比国外的发展,国内的多媒体平台起步较晚,但是也有大量的优秀多媒体播放器,有

21、如 HYPERLINK /view/6725.htm t _blank 千千静听、百猎、WinMP3Exp、 HYPERLINK /view/15989.htm t _blank Winamp、 HYPERLINK /view/6096.htm t _blank KuGoo、 HYPERLINK /view/1310.htm t _blank mp3、儿歌播放器等等音频播放器、新速影音、 HYPERLINK /view/1979962.htm t _blank PotPlayer、猫范(MoreFunTV)、 HYPERLINK /view/1303966.htm t _blank 迅雷看看、

22、 HYPERLINK /view/1688567.htm t _blank 变色龙万能播放器、KMPlayer、绚彩魅影、 HYPERLINK /view/36.htm t _blank 暴风影音、 HYPERLINK /view/206621.htm t _blank 超级兔子快乐影音、 HYPERLINK /view/47540.htm t _blank RealPlayer、 HYPERLINK /view/41173.htm t _blank Windows Media Player、 HYPERLINK /view/196819.htm t _blank QuickTime、 HYP

23、ERLINK /view/1843366.htm t _blank 快播(QVOD)、 HYPERLINK /view/1853244.htm t _blank QQ影音、 HYPERLINK /view/5213688.htm t _blank 百度影音、 HYPERLINK /view/6864605.htm t _blank 天天影音、等视频播放器,甚至大量的网络电视专用播放器和网页播放器开始普及。如Winamp就是其中一款较为经典的媒体播放器,伴随着MP3这种音乐格式的出现而出现,它已经有了15年的发展历史,在486和586交替的时代,Winamp的出现彻底断送了486播放MP3的梦想

24、,Winamp以前是计算机必备软件,能够播放各种类型的视频、音频档,除此之外还支持浏览图片,直到目前为止,相当一部分人仍然在使用Winamp软件播放MP3文件。而近几年随着网易云音乐的普及,国内的多媒体播放器也开始向流媒体服务进行转变,例如网易云音乐,相比市场上其他产品主打歌单、社交、音乐人推荐和音乐指纹识别技术这些功能。用户可以根据自己的喜好创建、收藏与分享歌单并且可以利用云端SNS来建立关系并且共享音乐,另外运用音乐指纹识别技术,系统可以通过听取音乐旋律以方便帮助用户查找适合自己的歌曲。与此同时,宽带多媒体技术在国内也开始发展起来,如中星微电子的“星光中国芯”芯片,也正在向稳定的方向发展1

25、,多媒体语音识别,多媒体教学,多媒体文字识别等等都表明,多媒体技术和多媒体产业在中国已经全面普及。1.3 研究的目的和内容伴随着多媒体技术的发展,多媒体素材种类也逐渐的增多,包括音频、视频、图像、动画等形式,但由于音视频、图像等格式的信息容量较大,并且受到硬件等条件的限制,在以往多媒体应用并不十分广泛,但是随着硬件技术的不断提高,多媒体技术已经被各类人员广泛使用,比如开发多媒体课件、网络课程、网站、应用软件、管理项目等均需利用多媒体技术与所媒体素材,因此开发制作一款这样的播放器具有非常高的价值与现实意义。1.3.1 研究目的与其它多媒体播放器比较,直接使用win32 API开发的多媒体播放器具

26、有功能强大、占用空间小的特点,它与现有多媒体资源应用状况紧密结合,既具有很强的直观感,又不失一般性,制作一款基于win32 API的播放器有助于了解MCI接口的特性,既可以提高播放器与操作系统的交互性,同时又有助于提高播放器的播放质量。1.3.2 研究内容1) 主界面的初始化,ini配置文件的读取(播放列表的生成、上次关闭时的播放模式、是否打开歌词、是否开机自启)。2) 判断歌曲是否为无效文件(即路径中的源音乐文件不存在,歌单列表中却存在,若判断为无效文件则用户双击后提示并在列表中自动删除。3) 利用WINDOWS操作系统提供的MCI接口实现播放、暂停、停止、上一曲、下一曲等操作、并实现五种播

27、放模式(单曲循环、单曲播放、顺序播放、列表循环、随机播放)。4) 音乐文件的添加,删除,清空,并将路径与各项状态写入配置文件。5) 音量窗口的初始化,滚动条与双声道音量的同步。6) 菜单的初始化,包括主界面菜单,右键弹出菜单,托盘右键弹出菜单。7) 托盘的初始化以及相关消息响应,包括最小化的操作。8) 歌词与歌曲的同步显示,包括歌词文件的读取,字符串与时间的匹配等。9) 开机自启动,包括注册表的写入。10) 本地歌曲的搜索,包括前端匹配,关键字匹配和后端匹配。11) 歌曲的在线搜索,包括下载网站HTML代码,分析提取歌曲名、歌手以及专辑等。12) 在线MV的获取,包括分析歌曲链接,屏蔽视频广告

28、,以及向外部delphi程序传递参数。13) 播放器皮肤的设置。14) 退出播放器关闭主界面时的动画。 15) 实时监测是否有移动设备插入,实现歌曲能够复制到移动设备的功能。2 开发平台及应用技术2.1 WIN32 API函数介绍2.1.1 WIN32 API简介Windows API全称Windows API,有非正式的简称法为WinAPI,意为可用的核心应用程序编程接口,它被设计为各种语言的程序调用,也是应用软件与Windows系统最直接的交互方式。大多数驱动程序所需要的对Windows系统的更底层次接口访问,由所有版本的Windows的Native API来提供接口。Windows有一个

29、专门的软件开发包提供给程序员相应的编程工具和参考文档,以可以方便程序员开发和使用基于WIN32的软件和利用WIN32技术。使用Win32 API,应用程序可以充分发挥WINDOWS的高效率。 所有的WIN32平台都支持统一的API,其中有函数、结构体、队列消息、宏及编程接口。使用 Win32 API开发出的应用程序可以充分挖掘每个平台独特的功能与利用各个平台专用的属性。2.1.2 WIN32 API历史Windows API会为程序员构建大量复杂且又不尽相同的Windows的底层结构,这一点有助于为Windows程序员开发出的应用程序提供较好的灵活性与较为丰富的功能。然而,WIN32 API

30、需要应用程序处理大量底层的操作,大多数情况下是有关图形界面的重复性机械操作。对于程序员来说,操作系统的功能完全由API来定义。API涵盖了应用程序所能调用的全部操作系统函数,以及相关的数据类型和结构。在Windows中,API还隐含了一种特殊的程序结构。这些年来,Windows操作系统已经今非昔比,而Windows API也随之改变和成长并反映出这种变化。WIN32 API的1.0版本只提供了接近450个函数接口,发展到现在提供了接近1000个接口的版本。然而,整体而言,Windows接口保持了相当好的,古老的Windows 1.0程序对习惯于现在版本Windows API的程序员也并不陌生。

31、大约是在当体系结构从16位变到32位的时候,Windows API及其语法发生了最大改变。从1.0版到3.1版,Windows一直采用16位得分英特尔8086、8088及286微处理器的所谓分段内存管理模式(Segmented Memory Model, SMM)。但是为了保证软件的兼容性,在英特尔386之后生产的32位处理器也都支持分段内存管理模式。在分段内存管理模式下,处理器寄存器宽度是16位,因此,C语言中的integer数据类型也是16位的位宽。在该下,内存地址分为两个部分:16位宽的段指针与16位宽的位移指针。从编程效率的角度来看,这种分段方式较为繁杂,因为需要程序员主动区分指针类型

32、。长指针包括一个段地址和一个位移地址,而短指针则仅仅包括在约定的短地址下的一个位移地址。从WindowsN及Windows 95开始,利用32位因特尔386、486以及奔腾处理器,Windows开始支持32平面内存管理模式。C的int数据类型也因此扩展成32宽。为32位Windows编写的程序可以直接用32位指针访问平面线形内存空间。从Win16到Win32转化过程中大部分函数保持不变,但也有一些需要扩展,比如图形左边点数值从Win16的16位变成了Win32的32位。所有32位版本的Windows既支持Win16 API以保证和原先的程序兼容,也支持Win32 API以运行新的应用程序。Wi

33、ndows NT与Windows 95和Windows 98的工作方式有所不同。在Windows NT中,Win16的函数调用通过一个翻译层先被转换成win32的函数调用,然后由操作系统来处理。但是该模式在WIN95和WIN98系统中与之相反,WIN32 API都会事先经由系统翻译层先被转换成WIN16接口,之后再交给操作系统来进行处理。2.1.3 WIN32 API分类Windows API所提供功能可以归为七类:1) 基础服务(Base Services),提供对Windows系统可用的基础资源的访问接口。如:文件系统(file system),外部设备(device),进程(proces

34、s),线程(thread),以及访问注册表(Windows Registry),和错误处理机制(error handling)。这些功能接口位于,16位Windows下的kernel.exe、krn1286.exe和krn1386.exe系统文档中;以及32位Windows下的kernel32.dll和advapi32.dll中。2) 图形设备接口(GDI),包括输出图形数据到显示设备、打印机或者其他的外部输出设备。该接口位于16位Windows下的gdi可执行文件与32位Windows下的gdi32动态链接库。3) 图形化用户界面(GUI),提供给用户第一次创建和管理显示器屏和大多数的基本控

35、件,如按钮和滚动条。随时接收用户鼠标与键盘输入,以及其他与GUI交互的功能。这些调用接口位于:16位Windows下的user.exe,以及32位Windows下的user32.dll。从Windows XP版本之后,基本控件和通用对话框控件(Common Control Library)的调用接口放在comctl132.dll中。4) 通用对话框链接库(Common Dialog Box Library),该链接库可为应用程序提供标准对话框,如打开/保存文档对话框、颜色对话框和字体对话框等等。这个链接库位于:16位Windows下的commdlg.dll中,以及32位Windows下comd

36、lg32.dll。它被归类为User Interface API之下。5) 通用控件链接库(Common Control Library),该链接库可以为应用程序提供接口用来访问操作系统提供给用户一些相关联且使用的控件。如:状态栏(status bar)、进度条(progress bars)、工具栏(toolbar)和标签(tab)。这个链接库位于:16位Windows下的commctrl.dll中,以及32位Windows下comctl32.dll中。它被归类为User Interface API下。6) Windows外壳(Windows Shell),作为Windows API的组成部分

37、,不仅允许应用程序访问Windows外壳提供的功能,还对之有所改进和增强。它位于16位Windows下的shell.dll中,以及32位Windows下的shell32.dll中(Windows 95则在shlwapi.dll中)。它被归类为User Interface API之下。7) 网络服务(Network Services),为访问操作系统提供的多种网络功能提供接口。它包括NetBIOS、Winsock、NetDDE及RPC等。2.2 多媒体功能API函数介绍Windows中对多媒体功能的API支持主要分为两个集合,分别被称为“底层”接口和“高层”接口。高层接口包括一系列函数,这些函数

38、以简短的描述性前缀开头,在MSDN文档的/Platform SDK/Graphics and Multimedia Reference/Multimedia Functions中列出(高层函数也在那里)底层波形音频输入函数和输出函数分别以waveIn和waveOut前缀开头。多媒体函数列表中有七个函数的前缀为mci,他们提供了对媒体控制接口(Media Control Interface, MCI)的访问。该接口是一个高层扩展API,可以控制多媒体个人电脑中的所有媒体硬件。MCI接口包含了对一切多媒体硬件设备都适用的各种命令。运行“打开设备”命令后,该设备就可以输入或者输出,然后可以运行“录制

39、”命令(表示进行输入操作)或“播放”命令(表示进行输出操作),完成后可运行“关闭”命令来关闭设备。MCI本身有两种形式。一向MCI接口发送队列消息。这些消息中包括了位编码与C语言中的所有数据结构。第二种形式是想MCI发送文本字符串。该功能主要是为脚本语言服务的,这些脚本语言具有灵活的字符串操作函数,却没有太多的Windows API调用支持。MCI中的设备名称包括cdaudio、waveaudio、sequencer(MIDI)、videodisc、vcr、overlay(窗口中的模拟视频)、dat(digital audio tape,数字录音带)和digitalvideo。MCI设备分为“

40、简单”和“复合”两种类型。简单的设备(如cdaudio)不使用文件,而复合设备(如waveaudio)则会使用文件,比如使用以.wav为拓展名的波形音频文件。另外的两个高层多媒体函数也值得一提,即MessageBeep和PlaySound函数。MessageBeep函数可以播放控制面板中声音程序制定的声音。PlaySound函数可以播放磁盘上的.WAV文件,或者播放作为资源被加载到内存中的.WAV文件。 2.3 MCI命令接口编程Windows MCI接口是适用于多媒体设备的高级命令接口。MCI可以控制所有的Windows能系统驱动的多媒体设备,包括CD音频设备、视频设备、数字化波形声音设备、

41、MIDI音序器、录像机及影碟机等。MCI接口位于Windows操作系统的MMSYSTEM动态链接库中,用来协调多媒体事件和控制设备驱动程序之间的消息通信。在一些MCI驱动程序当中,比如影碟机的MCI设备驱动程序,该程序可以直接控制用户指定的目标设备;相应的另外一些MCI设备驱动程序,比如Wave和MIDI的设备驱动程序则可以借助MMSYSTE动态链接库中的接口函数,来间接控制用户指定的目标设备;另外还有一些MCI设备驱动程序则可以提供与其他Windows动态链接库连接的面向用户层的高级MCI接口。2.3.1 MCI设备使用MCI设备接口的应用程序可以通过用户指定设备来区分MCI设备,设备类型表

42、明了该设备对应的物理类型。表2-1表给出了常用的MCI设备类型。表 2-1MCI设备类型MCI设备说明Cdaudio激光唱机Waveaudio数字化波形声音设备SequencerMIDI音序器Overlay视频叠加设备(窗口中的模拟视频)Dat数字化磁带音频播放机Digitalvideo窗口中的数字视频Scanner图像扫描仪Vcr磁带录像机或播放机Videldisc影碟机Mmmovie多媒体影片播放器Other示定义的MCI设备2.3.2 MCI命令应用程序可以借助MCI设备想操作系统发送消息命令(包括命令消息或命令字符串)来控制对应的MCI设备,MCI命令可以分为下面4类,如下所述。1)

43、系统命令:直接由MCI解释并由系统处理,是不传送到MCI设备的命令。2 2) 通用命令:所有MCI设备都支持的MCI命令。3) 可选命令:MCI设备可选择使用的MCI命令。4) 专用命令:针对某类MCI设备或集合的专有MCI命令。MCI接口一共定义了两种接口方式,即命令消息的方式和命令字符串的方式。相对应地,MCI命令可以分为命令消息和命令字符串。主要的MCI命令及分类如表2-2所示,这些命令可能具有其相应的扩展形式。所有的MCI接口命令都可以使用含有两个标志命令来控制命令,这两个标志即为“wait”和“notify”。它们在命令消息和命令字符串接口的含义和使用格式如表2-3所示。表 2-2

44、MCI命令列表MCI命令消息MCI命令字符串MCI命令说明MCI_SYSINFOSYSINFO返回有关MCI设备的停息MCI_BREAKBREAK为一个指定的MCI设备设置一个终止键MCI_SOUNDSOUND播放一段Windows指定的系统声音MCI_CLOSECLOSE关闭一个MCI设备MCI_GETDEVCAPSGETDEVCAPS获得一个MCI设备的性能参数MCI_INFOINFO从一个MCI设备得到有关的信息MCI_OPENOPEN初始化一个MCI设备MCI_STATUSSTATUS从一个MCI设备返回有关的状态信息MCI_LOADLOAD从一个磁盘文件中加载数据MCI_PAUSEP

45、AUSE暂停播放数据MCI_PLAYPLAY开始播放数据MCI_RECORDRECORD开始记录数据MCI_RESUMERESUME重新开始播放或记录MCI_SAVESAVE将数据存储到磁盘文件中MCI_SEEKSEEK向前或向后检索MCI_SETSET设置设备信息MCI_STOPSTOP停止播放或记录表 2-3MCI标志命令命令消息命令字符串功 能MCI_WAITwait通知MCI设备等,MCI命令执行完后,才能将控制权还给应用程序MCI_NOTIFYnotify通知MCI设备等,立刻将控制权交给应用程序,但当命令执行完后,向应用程序发送MM_MCINOTIFY消息所有MCI函数都以mci为

46、前缀3。由于MCI命令消息和命令字符串接口方式,所以相应的MCI函数也分两类,包括命令消息指令函数和字符串指令函数。在MMSYSTEM.H头文件中已经定义了这些函数的原型。MCI函数如表2-4所示。表 2-4MCI函数函数名功 能类型mciSendCommand发送命令消息命令消息接口函数mciGetDeviceID获取MCI设备的IDmciSetYieldProc设定一个回调函数,在结束带wait标志的命令时调用mciGetYieldProc获取当前的回调函数mciSendString发送命令字符串命令字符串接口函数mciGetErrorString获取当前MCI错误的字符串描述公用函数2.

47、3.3 MCI命令消息接口方式MCI命令消息接口方式利用发送接收消息指令和数据结构来给多媒体设备发送指定命令与接收来自MCI设备反馈的消息。这种方式的接口函数主要有以下三种,mciSendCommand(),mciGetDeviceID()和mciGetErrorString()。它们的函数原型如下结构体所示:MCIERROR mciSendCommand ( MCIDEVICEID IDDevice, /设备ID UINT uMsg, /命令消息 DWORD fdwCommand, /命令消息标志 DWORD dwParam /命令消息使用的结构参数地址);MCIDEVICEID mciGe

48、tDeviceID ( LPCTSTR lpszDevice /设备类型);BOOL ( DWORD fdwError, /错误代码 LPTSTR lpszErrorText, /错误描述 UINT cchErrorText /错误描述长度mciGetDeviceID通过传送MCI设备名lpszDevice来获取MCI_OPEN命令消息找开MCI设备的标识号wDeviceID,其值可用于mciSendCommand的参数wDeviceID。mciSendCommand用于向标识号为wDeviceID的MCI设备发送命令消息uMsg。当MCI_OPEN()函数打开了一个多媒体设备时,操作系统将自

49、动创建一个设备标识号。如果设备打开成功,即可以从MCI_OPEN_PARMS结构的成员数据域wDeviceID中取得该设备的标识号,然后将该值将保存方便后续的MCI命令使用。如果mciSendCommand调用成功,则返回值为0;否则表示设备驱动出错,这时可用mciGetErrorString来取得错误信息的文字描述。4MCI提供一个名为MCI_ALL_DEVICE_ID的特殊设备标识号。当前所有已打开的MCI设备都将接收到对MCI_ALL_DEVICE_ID发送的任何MCI命令。任何多媒体设备都必须用MCI_OPEN指令打开。在打开MCI设备的同时,系统要求指定该打开操作对应的MCI_OPE

50、N_PARMS结构体。如果打开设备成功,则该结构的wDeviceID域返回MCI设备的标识号ID。使用MCI_OPEN打开消息命令消息时可以使用的指令如表2-5所示。MCI_OPEN_PARMS结构定义如下:typedef struct DWORD dwCallback; /回调窗口句柄 MCIDEVICEID wDeviceID; /设备打开成功,返回的设备号 LPCSTR lpstrDeviceType; /设备类型 LPCSTR lpstrElementName; /复合设备的设备元素,通常为文件名 LPCSTR lpstrAlias; /指定的设备别名 MCI_OPEN_PARMS;表

51、2-5MCI_OPEN命令消息标志消息标志意 义MC_OPEN_ALIASMCI_OPEN_PARMS结构的lpstrAlias域中指定了设备别名MC_OPEN_ELEMENTMCI_OPEN_PARMS结构的lpstrElementName域中指定了设备元素MC_OPEN_SHAREABE按共享设备方式打开设备MC_OPEN_TYPEMCI_OPEN_PARMS结构的lpstrDeviceType域中指定了设备类型MC_OPEN_TYPE_IDMCI_OPEN_PARMS结构的lpstrDeviceType域中指定了设备类型ID打开一个简单的MCI设备不需要5指定设备元素,即不需要指定对应的

52、数据文件,因此执行打开操作只需在MCI_OPEN_PARMS结构体当中指定wDeviceID数据域和lpstrDeviceType数据域并初始化。6要打开一个复合的MCI设备,必须指定对应的设备元素与设备类型数据域指并初始化。至于打开复合MCI设备,则可以有以下3种方式供程序员选择:1) 为确定MCI设备的性能强弱,可以仅仅指定设备的类型来打开MCI设备。这时,操作系统智能确定MCI设备的性能,然后关闭设备,一般是不能够进行其它操作的。72) 为了让一个设备元素和指定设备能够互相联系与发送消息,应该同时指定设备的数据文件名和设备的类型。指定完成并初始化之后可以对设备进行相应的操作。83) 在使

53、用系统隐藏MCI设备时,可以仅仅指定设备数据文件名,而把设备类型指定为空;MCI接口将根据设备元素的后缀名自动从系统中选择隐藏的MCI设备。9应用程序在使用完一个MCI设备之后必须显示关闭该MCI设备。用MCI_CLOSE命令消息可以关闭并释放MCI设备(即释放设备指针),并且取消应用程序对MCI设备或设备元素的访问控制权。当用MCI_SYSINFO命令消息获取MCI设备系统信息时,需要在mciSendCommand的第一个附加参数(dwParam)中指定MCI_SYSINFO_PARMS结构的地址,操作系统的消息将通过该结构返回10。与MCI_SYSINFO命令消息相关的消息标志如表2-6所

54、示。MCI_SYSINFO_PARMS结构定义如下:typedef struct DWORD dwCallback;/回调窗口句柄 LPSTR lpstrReturn; /返回信息缓冲区地址 DWORD dwRetSize; /返回信息大小 DWORD dwNumber; /索引号 UINT wDeviceType; /设备类型 MCI_SYSINFO_PARMS;表 2-6MCI_SYSINFO命令消息标志消息标志意 义MCI_SYSINFO_QUANTITY返回指定的设备类型的数目,如与MCI_SYSINFO_OPEN一起使用,则仅返回已打开的设备的数目MCI_SYSINFO_NAME返回

55、设备名,如与MCI_SYSINFO_OPEN一起使用,则仅返回已打开的设备的名称MCI_SYSINFO_OPEN仅返回已打开设备的信息MCI_SYSINFO_INSTALLNAME指定设备的安装名称另外在使用MCI设备时,应该注意设备间的消息共享、消息等待(即消息阻塞)与通告等标志位或者标志命令的使用。2.3.4 MCI命令字符串接口方式MCI命令字符串使用ASCII字符串来发送驱动MCI设备的命令,这种方式采用的接口函数有mciSendString()、mciGetErrorString()。mciSendString()函数被用来向MCI设备发送命令字符串消息,函数原型如下:MCIERRO

56、R mciSendString( LPCTSTR lpszCommand, /指向一个以NULL结尾的MCI命令字符串,格/式如下:comm.and device_name argument LPTSTR lpszReturnString, /指向一个用于存储MCI命令执行后返回的/字符串信息的缓冲区 UINT cchReturn, /缓冲区大小 HANDLE hwndCallback /指定一个接受MM_MCINOTIFY的窗口句柄,/非MCI命令中包含了notify标志,否则该参数可忽略。);3 多媒体播放器的开发与设计本播放器主要功能包括对歌曲的操作,托盘的初始化,在线搜索MV等,而完成

57、这些功能的主要机制便是windows系统的消息处理机制。媒体播放器总体系统功能如图3-1所示。3.1 窗口过程与消息处理机制窗口过程总是按照如下方式来定义:LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)窗口过程的4个参数与MSG结构的前4个字段是一一对应的。第一个参数hwnd,表示接受消息的窗口句柄,它与从CreateWindow函数返回的句柄相同。第二个参数与MSG结构的message字段相对应,该参数是一个标识消息的数字。后两个参数是位宽32位的附加参数,用来提供关于发送消息的更

58、加丰富的信息。这些参数中所包含的内容依赖于具体的消息类型。有时一个消息是由两个16位的值组合而成,有时一个消息参数是一个指向文本字符串或一个数据结构的指针。应用程序通常并不直接对窗口过程进行调用。窗口过程几乎总是由Windows自身调用的。应用程序如果希望调用自身的窗口过程,则可通过调用函数SendMessage来实现。图3-1 媒体播放器总体系统功能图窗口过程所接受的每条消息都由一个数字来标识,即窗口过程的message参数。Windows头文件WINUSER.H中为各种类型的消息定义了以WM为前缀的标识符。通常程序员都会使用switch-case结构来确定窗口过程中收到的消息以及相应的消息

59、响应。当窗口过程对消息进行处理后,应返回0。所有窗口过程不进行处理的消息都必须传给名称为DefWindowProc的Windows函数。DefWindowProc函数的返回值必须要从窗口过程中返回。113.2 队列消息与非队列消息消息既可以是“队列消息”,也可以是“非队列消息”。队列消息是指那些由Windows放入程序的消息队列中的消息。在程序的消息循环中,消息被检索,然后被投递到窗口过程中。非队列消息则是被“发送”(send)到窗口过程。无论在哪种情形下,窗口过程都会为窗口获取所有消息无论是队列消息还是非队列消息。因此,窗口过程实际上是窗口的“消息获取中心”。队列消息主要由用户的输入产生,主

60、要形式为按键消息(例如WM_KEYDOWN和WM_KEYUP消息)、由按键产生的字符消息(WM_CHAR)、鼠标移动(WM_MOUSEMOVE)、鼠标单击(WM_LBUTTONDOWN)等。此外,队列消息还包括定时器(WM_TIMER)、重绘消息(WM_PAINT)和退出消息(WM_QUIT)。非队列消息包括队列消息以外的其他所有消息。非队列消息一般是由调用特定的Windows函数所触发的。例如,当WinMain调用CreateWindow函数时候,Windows就会创建窗口,并在创建过程中向窗口过程发送一条WM_CREATE消息。当WinMain调用ShowWindow函数时,Windows

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论