一、前言
随着多媒体硬件环境和软件环境的不断完善,目前,大部分计算机软件开发中都涉及多媒体软件技术的应用。
进行多媒体应用程序设计,从原理上说,可以采用从c++到多媒体专用开发系统(如toolbook、authorware、director)等多种层次的工具。然而,由于多媒体软件涉及的媒体复杂多样、开发周期短并且需要多种专业人员参与,因此,为了能进行实用高效的开发,必须选用简单易用、开发效率高的软件。
visual basic是microsoft公司开发的windows编程工具软件。由于它具有先进的设计思想、快速易掌握的使用方法及控制媒体对象手段灵活多样等特点,受到了多媒体软件开发人员的关注和青睐,也因此成为多媒体应用程序开发的理想工具。
二、visual basic的多媒体控件mci.ocx
mci(媒体控制接口)是microsoft公司为实现windows系统下设备无关性而提供的媒体控制接口标准。用户可以方便地使用mci控制标准的多媒体设备。
mci包含在windows多媒体扩展的mmsystem模块中,用来协调事件间以及mci设备驱动程序间的通讯,提供了与设备无关的接口属性。通常应用程序是通过指定一个mci设备类型来区分mci设备,设备类型指明了当前实际使用设备的物理类型,不同的设备类型使用不同的控件属性来进行描述(见附表1)。
从使用的控制方式上来说,mci设备分为复合和简单两类。一个简单mci设备并不需要设备元素。例如,cd音频和音碟机就是在一个已经安装好了的硬盘上工作的,它们不需要应用程序为其操作的媒体内容提供任何信息。但对于复合的mci设备,就需要应用程序提供设备元素,即一个包含全部路径名的源数据文件或目的文件。
visual basic语言的custom control(用户控制部件)概念体现了当今软件设计的发展潮流--面向对象技术,编程者可以在visual basic的工具箱(toolbox)中嵌入各式各样五花八门的用户控件,每个用户控制部件都有一定的属性和操作方法,编程者通过属性的设置和方法的控制完成特定的功能。为了方便地控制多媒体,在专业版visual basic工具箱中提供了一个用于多媒体目的的用户控件--mci.ocx。
多媒体mci控件mci.ocx专用于对多媒体控制接口mci设备的多媒体数据文件实施记录和回放,从目的效果上来说,该控件通过一组按钮来发出种种设备控制命令以实现对诸如:音频面板、midi音序器、cd-rom驱动器、音频cd播放机、录像带播放、录音带录放等设备的控制。在visual basic程序设计时,当在表中加入多媒体mci控件时(在工具箱内双击mci控件),则出现下列按钮群:向前(prev)、向后(next)、播放(play)、暂停(pause)、返回(back)、单步(step)、停止(stop)、记录(record)和出带(eject)。
应用程序对mci的这组按钮操作非常灵活方便,如当我们打开一个mci设备后,就可以根据该设备类型的属性随时从控件中选择合适的状态按钮来表示即刻设备的物理状态。所有mci控件可以有下列几种方式来编程:⑴控件及其各按钮的可见性和使能性;⑵可变或完全对控件进行重新定义;⑶在一个窗口表格中可以同时控制多个设备。
三、多媒体控制部件mci.ocx的调用
在visual basic3.0专业版中,多媒体控件mci.ocx(在visual basic 3.0和4.0中,多媒体控件的扩展名为.vbx)是作为可选用部件提供的。为了使用它,首先要执行fileadd file菜单命令,把windowssystem目录下的mci.ocx加入到工具箱(toolbox)中,这时会在工具箱中出现相应的mci.ocx图标。如果使用的是visual basic4.0版(或5.0版),选择oolscustom controls菜单或直接键入ctrl+t,即可出现对话框,在available controls列表框中选中microsoft multimedia controls条目旁边的检查框,同样会在工具箱中出现mci.ocx图标。
双击工具箱中的多媒体控件mci.ocx图标,调用mci.ocx控件之后,表单form中将出现一排灰色的媒体控制按钮(九个)。
四、visual basic多媒体应用程序设计步骤
多媒体控件mci.ocx包含有一组高级的与设备无关的控制命令。在使用该多媒体控件时,首先用open命令打开mci设备(多媒体设备)并建立一个与之对应的文件,以便来进行录或放等操作(但是对诸如cdaudio、vcr和录像带不能使用相应文件)。一旦设备打开成功,就可以向它发出各种操作命令(见附表的按钮命令)来完成指定的工作任务。最后记住,要用close命令来关闭设备和数据文件。
使用mci.ocx来进行多媒体应用程序开发是很方便的,因为大多数属性都是容易理解的,其中command属性尤为重要,它是在运行过程中向多媒体设备发命令。格式为:
form.mmcontrol.command=cmdstring$
其中,cmdstring$变量是如下可执行命令名:open、close、play、pause、stop、back、step、prev、next、seek、record、eject、sound和save。一旦给其命令设置,它就立刻执行,所发生的错误存在error属性中。
下面以播放demo.wav(波形文件)文件为例,说明visual basic多媒体应用程序设计步骤。
首先,创建一个包含有多媒体控件(mci.ocx)的表格(form),于是屏幕上显示出形状类似录音机的控制键,不过这时多媒体控制部件是不能马上拿来用的(各键呈灰色),须通过程序代码来改变键的状态。
其次,在form_load过程中,插入相应程序代码。如下
sub form_load()
‘在发出 open 命令前要设置多媒体设备的属性
form1.mmcontrol1.notify=false
form1.mmcontrol1.wait=true
form1.mmcontrol1.shareable=false
form1.mmcontrol1.devicetype="waveaudio"
form1.mmcontrol1.filename="c:windowss
mmdatademo.wav"
form1.mmcontrol1.command="open"
end sub
最后,运行上述程序,控制键呈黑色,这时就可以使用play、record等键操作数据文件demo.wav了。例如用鼠标点按play键就能听到.wav音效(计算机应装有发音设备)。
通过上面陈述,不难发现,visual basic利用多媒体控件mci.ocx设贫嗝教逵τ贸?序很容易掌握。
五、visual basic多媒体应用程序设计实例
1、播放cd音乐
在很多多媒体软件系统中,都提供了激光唱盘的播放软件,利用多媒体控件mci.ocx,我们可以轻松地编制出符合自己使用要求的简易激光唱盘播放机。
表1给出了简易cd播放器的主要控制部件定义,其后是对应于各个触发事件的源程序代码。
完整的源程序清单如下:
`cd播放机实用程序
`运行程序前请在cd-rom驱动器中装入一张激光唱碟’“load”按钮触发事件
private sub command1_click()
`装入cd唱片
on error goto mci_error
mmcontrol1.command = "open"
on error goto 0
`设置时间格式
mmcontrol1.timeformat = vbmciformattmsf
`关闭load按钮,显示图片
command1.enabled = false
picture1.picture = picture3.picture
` 设置初始轨道数
label1.caption = "1"
exit sub
mci_error:
displayerrormessagebox
resume mci_exit
mci_exit:
unload cd
end sub
private sub form_load()
mmcontrol1.wait = true
mmcontrol1.updateinterval = 0
` 设置设备类型
mmcontrol1.devicetype = "cdaudio"
`设置缺省轨道数为0
label1.caption = "0"
nd sub
private sub form_unload(cancel as integer)
mcitest.show
end sub
’“出带”按钮触发事件
private sub mmcontrol1_ejectclick(cancel as integer)
command1.enabled = true
picture1.picture = picture2.picture
mmcontrol1.updateinterval = 0
on error goto mci_error2
mmcontrol1.command = "eject"
mmcontrol1.command = "close"
on error goto 0
label1.caption = "0"
label3.backcolor = &h404040
exit sub
mci_error2:
displayerrormessagebox
resume next
end sub
’“向前”按钮触发事件
private sub mmcontrol1_nextcompleted(errorcode as long)
label1.caption = str$(mmcontrol1.track)
end sub
’“暂停”按钮触发事件
private sub mmcontrol1_pauseclick(cancel as integer)
mmcontrol1.updateinterval = 0
label3.backcolor = &h404040
end sub
’“播放”按钮触发事件
private sub mmcontrol1_playclick(cancel as integer)
mmcontrol1.updateinterval = 1000
label1.caption = str$(mmcontrol1.track)
end sub
’“向后”按钮触发事件