登陆注册
13955600000029

第29章 多媒体程序设计(2)

在这里,可以看到AutoActivate属性默认为DoubleClick,在应用程序执行时,只要用鼠标双击OLE对象,即可启动对应的动作。

【例7.5】

设计两个OLE控件,一个用于播放MIDI序列,一个用于播放AVI视频。

在窗体上绘制两个OLE控件,在插入对象窗口选择“由文件创建”,从浏览器中选择相应的MIDI文件和AVI文件。

由于AutoActivate属性都为DoubleClick,在应用程序执行时,只要用鼠标双击OLE对象,即可播放MIDI序列和AVI视频。

如要控制播放,比如单击“播放”按钮后播放,可针对Command1_CLICK事件编程。在本例中再增加三个按钮数组,即在窗体上绘制三个按钮,分别为“播放”、“编辑”、“结束”,然后进行复制,建立按钮数组。源程序如下:

7.4使用MCI控件开发多媒体程序

下面介绍用VB开发多媒体系统的另一种方法,这也是使用VB开发多媒体系统最主要的方法之一,即运用VB内附的MCI32.OCX,它是通过多媒体控制接口MCI(MicrosoftMultimediaControl6.0)对多媒体设备进行控制的。

7.4.1MCI简介

MCI(MediaControlInterface)是媒体控制接口的意思,它包含在MMSYSTEM。DLL库模块中,用来协调事件与MCI设备驱动程序之间的通信,为控制音频、视频等外围设备,提供了与设备无关的应用程序,并具有可扩充性。由于这些特性,用户的应用程序可以方便使用遵循MCI控制标准的多媒体设备,而且系统升级十分方便,使得开发应用系统无需了解多媒体产品的细节,大大提高了应用系统的开发效率。

1.MCI的接口分类

MCI接口可分成两类:一类是使用命令消息接口函数,另一类是使用命令字符串接口函数。这两种函数中的任何一种都可访问所有的MCI设备。命令消息接口使用消息控制MCI设备,命令字符串接口使用文本命令控制MCI设备。

Windows本身的通信方式是使用消息(Message)来实现的,所以若使用命令消息接口函数来执行Windows的多媒体功能,则速度较快;若用命令字符串接口命令控制MCI设备,文本串中必须包含执行一个命令所需的所有信息,MCI分析文本串,并把它翻译成能送到命令消息接口中的消息才能执行,所以命令字符串接口的执行速度一定慢于命令消息接口。

Windows多媒体模块提供的与MCI有关的命令字符串接口函数有三个:

MCISENDSTRING向一个MCI设备驱动程序发送一个命令字符串

MCIEXECUTE为MCISENDSTRING的简化函数

MCIGETERRORSTRING返回一个同错误代码相对应的错误字符串

2.MCI设备类型

MCI可控制简单设备和复合设备,相应的设备驱动程序也分为简单和复合两类。简单设备是不需要指定数据文件的设备,如CD播放器。复合设备是需要指定相应的数据文件的设备,如MIDI数字音频设备。

应用程序通过MCI控制设备,必须有相应的MCI设备驱动,VB编程中常用到的部分MCI设备驱动如表72所示。

表7.2部分MCI设备驱动

设备类型

设备驱动程序名

描述Cdaudio

Mcida.drv

McidriverforadaudiodevicesSequencer

Mciseq.drv

MicrosoftmcimidisequencerVideodisc

Mcipronr.drv

McidriverforpioneervideodiscplayerMovice

Mcimmp.drv

McidriverformoviceWaveaudio

Mciwave.drv

Mcidriverforwaveformaudio

其他

Mciaap.drv

Mcidriverforfloorflc

Mciavk.drv

Mcidriverforavk

Mciavi.drv

Mcidriverforavi

Mcisca.drv

Mcidriverforvisca

归纳起来,MCI所能控制的多媒体设备如下:

①简单设备:可编程控制的录放像机,可编程控制的激光影碟机,CD音频设备,视频卡(如播放电视/录像机),MPEG解压卡(如播放CDIMovie光盘)。

②复合设备:数字视频播放设备(如*.avi文件),动画播放设备(如*.fli文件),语音录放设备(如*.wav文件),MIDI音序器(如*.mid文件),MPEG解压卡(如*.mpg或*.dat文件)。

7.4.2MCI32.OCX的属性

媒体控制对象涉及的属性和事件很多,表73列出了MCI的部分属性,下面介绍媒体控制对象的一些重要属性。

表7.3MCI的部分属性

属性

描述

属性

描述AutoEnable

自动启用

NotifyMessage

确认信息ButtonVisible

显示按钮

NotifyValue

确认设定值CanEject

能否退出媒体

Orientation

定位CanRecord

能否记录

Position

位置CanStep

能否前进一格画面

RecordMode

记录格式Command

MCI命令

Shareable

能否共享DeviceID

多媒体设备代码

Silent

静音DeviceType

多媒体设备类型

Start

开始位置Error

错误

TimeFormat

时间格式ErrorMessage

错误信息

To

结束位置FileName

文件名

Track

磁道Frames

画面

TrackLength

磁道长度Length

媒体长度

Tracks

磁道总数Mode

目前所处状态

Visible

能否显示MousePoint

鼠标指针形状

Wait

等待Notify

确认hWndDisplay设定窗口

From起始位置TrackPosition轨道起始位置UpdateInterval更新间隔。

1.有关外观的属性

1)AutoEnable属性

AutoEnable属性设置为True时,媒体对象自动监测所指定的多媒体设备状态,并自动决定按钮的状态。AutoEnable属性设置为False时,可通过ButtonEnabled属性设置,决定媒体控件中按钮的有效性。

2)ButtonVisible属性

ButtonVisible属性设置为False时,按钮在媒体控件上消失。

3)Visible属性

设定媒体控制对象在程序执行阶段是否显示出来。

4)CanEject,CanRecord,CanStep属性

这些属性在设计阶段不可见,即在属性窗口中不出现,运行时只读。主要用来监测打开的设备是否具有弹出媒体、播放、录制、步进等功能。

5)Orientation属性

该属性设定媒体控制对象按钮的排列方向。

2.对媒体的一般控制功能

一般控制功能是指对媒体的通用控制功能,它几乎适用于所有的媒体设备。

1)DeviceType属性

指定要打开的媒体设备类型,MCI控件可根据文件扩展名自动设置设备类型。

2)FileName属性

以【打开】命令指定要打开的文件,或以【保存】命令指定要保存的文件。针对复合设备,必须指定文件名才可以打开和保存。

3)Command属性

执行一个MCI控制命令,属性窗口不显示该属性。可以使用14个基本命令来完成一些功能,如表74所示。具体格式是:

媒体控制对象.Command=MCI控制命令

表7.4MCI常用控制命令列表

MCI控制命令说明MCI控制命令说明

Open打开媒体设备Record录制Close关闭媒体设备Prev回到目前磁道的起始点Play播放Next到下一个磁道的起始点Pause暂停Seek搜索指定的位置Stop停止Eject退出媒体Back后退一格画面Sound播放声音Step前进一格画面Save存储。

4)hWndDisplay属性

通过设置该属性,给需要窗口的多媒体设备设定一个窗口,这类多媒体设备通常指Avivideo和Overlay设备。对Avivideo设备而言,如果不提供窗口设置,系统主动提供一个缺省窗口显示视频。

5)From,To属性

用在Play或Record前,表示播放或录制的起始、结束位置。

6)TimeFormat,Position,Start属性

TimeFormat用来设定时间格式,如果未设定TimeFormat或所用的设备不支持设定值,则系统会使用缺省值。Timeformat的属性说明如表75所示。

表7.5TimeFormat的属性说明

属性值

说明0Milliseconds以ms为单位1

HMS以时分秒为单位,用4个字节存储,前3个字节对应于时分秒,最后字节未用2

MSF以分秒帧为单位,用4个字节存储,前3个字节对应于分秒帧,最后字节未用3

以帧为单位8

以字节为单位9

以取样为单位

根据设定的TimeFormat属性值,Position属性返回已打开的媒体设备的位置,一般用4个字节表示。Position属性在程序执行时只读,在属性窗口不可见,即用户不能通过改变该属性值来改变媒体设备的位置。Start属性根据目前的时间格式,返回媒体设备的起始位置。同样,该属性在程序执行时只读,在属性窗口不可见。

7)Mode属性

Mode的属性说明如表76所示。

为顺利运行下一个MCI命令,常可通过对Mode属性的读取,获得设备的当前状况。例如,在播放声音文件前,通过检测设备状态,确保设备关闭后再打开。其程序段如下:

IfNotMMControl1.Mode=524Then

MMControl1.Command=“close”

EndIf

MMControl1.FileName=“指定要打开的文件名”

MMControl1.Command=“open”…

8)Silent属性

决定声音是否可以播放。

9)Shareable属性

决定多个程序是否能共享一个MCI设备。一般而言,此属性针对的是简单设备,而复杂设备不能共享。

10)Track,TrackLength,TrackPosition,Tracks属性

目前,Track只用在cdaudio,videodisk中,该属性指定特定的轨道(Track)供TrackLength及TrackPosition属性传回相关信息。就cdaudio而言,每个TrackLength代表一首歌中Track属性指定的轨道的时间长度。TrackPosition指定轨道的起始位置,Tracks传回轨道数。

11)UpdateInterval属性

该属性的值决定两次StatusUpdate事件之间的us数。如果其值为0,将不会有任何的StatusUpdate事件发生。

7.4.3MCI32.OCX的事件

媒体控制对象的事件有Done、ButtonClick、ButtonCompleted、ButtonGotFocus、ButtonLostFocus和StatusUpdate,事件描述如表77所示。Button可以是【Prev】、【Next】、【Play】、【Pause】、【Back】、【Step】、【Stop】、【Record】或【Eject】九个按钮之中的一个,如PlayClick事件。下面对这些事件进行简单的说明。

表7.7媒体控制对象的所有事件及描述

描述事件

描述Done

完成MCI命令动作ButtonGotFocus

按钮取得焦点BottonClick

单击按钮ButtonLostFocus

按钮失去焦点BottonCompleted

按钮动作完成StatusUpdate

更新媒体控制对象的状态报告

1)ButtonClick事件

语法格式:SubMMControln_ButtonClick(CancelAsInteger)。

其中n为媒体控制对象的序号,以后不再说明。

当MCI控件在运行阶段时,单击控件上的按钮激发相应的事件。在默认状态下,每个按钮的Click事件都是执行一个该按钮对应的MCI指令,例如,PlayClick事件执行一条MCI的play指令。即若在ButtonClick事件中,未将Cancel参数设为True,或未传True给ButtonClick事件,则系统先执行按钮代表的MCI指令,再执行事件过程中的语句。反之,若将Cancel参数设为True,则系统不执行按钮代表的MCI指令,而是直接执行事件过程中的语句。

2)ButtonCompleted事件

语法格式:SubMMControln_ButtonCompleted(ErrorcodeAsLong)。

媒体控制对象上按钮对应的MCI控制命令执行时,激发该事件。在事件中返回参数Errorcode,错误代码Errorcode的值所代表的意义如下:

·0MCI控制命令执行成功

·其他MCI控制命令执行不成功

3)ButtonGotFocus,ButtonLostFocus事件

当媒体控制对象的按钮取得焦点或失去焦点时分别激发ButtonGotFocus或ButtonLostFocus事件。

4)Done事件

语法格式:SubMMControln_Done(NotifyCodeAsInteger)。

在Notify属性设置为True时,MCI控制命令执行完毕时激发该事件。NotifyCode的值表示MCI控制命令是否完成,其设定值说明如表78所示:

7.4.4MCI编程举例

当进入VB6.0时,工具箱(ToolBox)中不包含MCI32.OCX,若要使用必须首先将其加入到工具箱中。办法如下:

同类推荐
  • 如何处理电脑故障

    如何处理电脑故障

    本书以问答的方式介绍了电脑会出现的各种故障,内容包括了音箱声音失真,如何处理?如何做好电脑的日常维护等等问题。
  • 网络广告经纪人

    网络广告经纪人

    本书为网络广告经纪人培训认证的指定教材,该认证是商务部中国商务广告协会和信息产业部中国电子商会联合推出的,旨在为国家造就和培养出一大批网络广告梯队型人才。该教材包括网络广告经纪人的介绍和发展趋势,以及网络广告的原理、策划、设计、制作、发布与交换、效果评估、管理,以及网络广告营销的国内外最新的成功案例,还提供了一些常用的网络广告制作工具。本教材适合助理网络广告经纪人和网络广告经纪人层次使用。也可作为高校广告、电子商务等专业的教材。
  • 天下一家:网络联通世界(科学新导向丛书)

    天下一家:网络联通世界(科学新导向丛书)

    《天下一家:网络联通世界》一书从网络的基本知识出发,详细地介绍了网络科技的发展与用途,还包括校园网络对普及教育的重大作用。本书内容翔实、结构清晰、图文并茂,是一本实用性极强的网上冲浪参考书。
  • 计算机网络技术与应用

    计算机网络技术与应用

    本书共8章,系统地介绍了计算机网络的发展和基本原理体系结构、局域网、广域网、网络服务、网络安全、典型网络的结构特点等内容。除第8章外,其他各章都附有练习题。为了加强学习效果,本书围绕知识点的典型性,精选了6个实验。此外,在本书的第8章,我们综合各章知识设计了“办公局域网组建设计”和“中小型企业局域网组建设计”这两个常用的计算机网络技术应用实例,供学生学习和参考。本教材适合作为本科非计算机专业学生的计算机网络教材。
  • 条形码技术与应用

    条形码技术与应用

    条形码是一种可供电子仪器自动识别的标准符号,是由一组黑白相间、粗细不同的条、空符号按一定编码规则排列组成的标记,用以表示一定的信息,确认某个物体或规定它的移动,能正确快速地为产、供、销各环节在采集、处理和交换信息时提供标识。
热门推荐
  • 原始雨林谍影

    原始雨林谍影

    无限好书尽在阅文。
  • 从厨师开始无敌

    从厨师开始无敌

    一场大火,让叶歌失去了双亲。万般悲痛之下,他不得已辞去自己的工作,回家继承父母留下的餐馆。不过面对剧烈的行业竞争,叶歌的餐馆变得很是萧条,就连谈了多年的女友也离他而去。就在这绝望之际,打算另谋出路的叶歌却是从父母留下的食谱中发现了为人所不知的秘辛。从那以后,自己不仅做的菜味道更好,而且只要完成日常任务自身就会变强。一道麻婆豆腐,身体灵敏度+1。一道水煮鱼,身体爆发力+5。一道鱼香肉丝,感知能力+10。一道糖醋排骨,灵气值+5。……哈哈,从今以后,钱不钱的无所谓,关键是我喜欢做厨师!叶歌笑了,这种奇遇让得他的生活有了天翻地覆的变化。但因此也有一些烦恼接踵而至,甚至他还发现那场让父母身亡的大火似乎也没那么简单……
  • 亿万继承者:洛少的千金小娇妻

    亿万继承者:洛少的千金小娇妻

    “洛凌希你个混蛋你想干嘛!”某男坏坏一笑“老婆我好不容易把你这冷艳的安家大小姐感化了,当然要做坏事啊!”第二天早上,某女揉着自己的老腰,心想:我怎么就嫁给这个混蛋了呢?……小虐大宠欢迎入坑
  • 我与我的n次元女友

    我与我的n次元女友

    谢小米是某大的学生,表面上平淡无奇,喜欢宅宿舍,业余时间作编码的兼职,兼职中无意中启动一个奇怪的病毒,从此自己的手提电脑越来越奇怪,似乎有了生命。。。。生活从此改变。
  • 娱乐圈之钢铁直男

    娱乐圈之钢铁直男

    “我这个人有一个缺点,就是学不会撒谎。”凭借这句人生格言,黄自永在娱乐圈翻江倒海。
  • 兄弟你懂个der

    兄弟你懂个der

    黎沁自诩这辈子没做错什么,只不过小时侯架打个有点多,逼着隔壁那货穿了裙子,偷偷给他爸妈进言建议他报舞蹈班之外好像没什么吧?而且舞蹈对身形好,裙子让他理解女生,打他教会他人间真理......江祁:老子谢谢你(微笑)黎沁:你懂个der?这是人间真理
  • 拂风吹雪

    拂风吹雪

    拂风吹雪,是什么?是一曲,是一舞,是一人,还是一段情缘?
  • 染爱成婚:狼性老公,别吻我

    染爱成婚:狼性老公,别吻我

    这时,门开了。一个穿黑西装,戴墨镜的男人,扶着一位俊美无边的醉酒男人进来。
  • 彼岸星尘

    彼岸星尘

    富家子弟带着记忆重生在战火纷飞的异世,这实在算不上什么幸运的事情,与生俱来的天赋让心存安逸的他注定无法过上平静的生活,古怪的拜师,奇异的求学,家族破灭,师父失踪,未知的未来让他不得不走上追寻的道路!一切痛苦的根源,都是所求不得,夜断尘觉得,浅耀这种人大概是不会痛苦,因为他生无所求,自己大概是会痛苦一生的,因为自己想要的,太多了······
  • 抱歉我马甲又掉了

    抱歉我马甲又掉了

    传闻柳城江家的大小姐——江欣怡一回来就和家里断绝了关系,回到学校也整天打架斗殴,上课睡觉,翘课翻墙............她通通都会。传闻这位江大小姐,干啥啥不行,吃啥啥不剩,整天吊儿郎当,无所事事。她在某一天救下了一个妖孽至极,似仙,又似妖的男人,从此对她纠缠不休。传闻锦京最高掌权人——戚逸宸的夫人是个孤儿,某人暗戳戳的警告锦京各大世家豪门,他媳妇儿什么都不懂,叫手底下的人有些眼力劲儿。直到有一天,江欣怡掉马了,锦京各大世家豪门纷纷表示无语,这是来了一个比他们宸爷还狠的人啊。掉了一堆马甲后,江欣怡被堵在厨房,不得不盯着眼前的男人。“江家家主?”“是............”“黑客若翎?”“嗯............”..................某一次,影一看着自己一不小心扒出来的自家爷的夫人的马甲,看了自家爷一眼:“爷,当初您重伤的那个血盟盟主............是夫人............爷,保重!”“............”