说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

Visual Basic设计多媒体应用程序

HTML文档下载 WORD文档下载 PDF文档下载
Visual Basic设计多媒体应用程序
作者:王向阳
一、前言
  随着多媒体硬件环境和软件环境的不断完善,目前,大部分计算机软件开发中都涉及多媒体软件技术的应用。
  进行多媒体应用程序设计,从原理上说,可以采用从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

  ’“向后”按钮触发事件
  Private Sub MMControl1_PrevCompleted(ErrorCode As Long)
  Label1.Caption = Str$(MMControl1.Track)
  End Sub
  
  Private Sub MMControl1_StatusUpdate()
  Label1.Caption = Str$(MMControl1.Position And &HFF)
  If MMControl1.Mode = vbMCIModePlay Then
  Label3.BackColor = &H80FF&
  Else
  Label3.BackColor = &H404040
  End If
  End Sub
 
  ’“停止”按钮触发事件
  Private Sub MMControl1_StopClick(Cancel As Integer)
  MMControl1.UpdateInterval = 0
  Label3.BackColor = &H404040
  MMControl1.To = MMControl1.Start
  MMControl1.Command = "Seek"
  MMControl1.Track = 1
  Label1.Caption = "1"
  End Sub

  2、播放AVI(音频视频接口)文件
  电影(包括声音和图像)是广大计算机工作者最为关心的媒体信息之一,电影处理技术也是多媒体关键技术之一。而在多媒体系统中,AVI(Audio Video Interface,音频视频接口)文件是存储电影(包括声音和图像)的标准格式,这些AVI文件一般是通过捕获实时视频信号得来的,也可以通过扫描仪获取图像或者使用动画制作软件得到。于是,屏幕窗口上的音频视频操作,就变成了对AVI文件(文件后缀为AVI)的处理。在实际工作中,播放AVI文件(即影片)的方法有许多种,而其中以利用Visual Basic的多媒体控件方法最为简单、方便。下面以一个具体实例来说明如何播放AVI文件:假设用户当前目录下有名字为DEMO.AVI的视频音频文件,则利用Visul Basic播放该影片需要经过如下步骤:
  (1)在Visual Basic的窗体中加入一个MMControl多媒体控件、一个PictureBox图片框控件和两个ComandButton命令按钮部件;
  (2)设置各个控件的属性,其中窗体命名为Form1,MMControl多媒体控件命名为MMControl1、PictureBox图片框控件命名为Picture1、两个ComandButton命令按钮控件分别命名为Play和Close;
  (3)编写各触发事件源程序代码并且运行。源程序代码为:
  Private Sub Play_Click()
  MMControl1.Filename = "DEMO.AVI"
  MMControl1.DeviceType= = "AVIVIDEO"
  MMControl1.hWndDisplay = Picture1.hWnd
  MMControl1.Command = "OPEN"
  MMControl1.To = 1
  MMControl1.Command = "SEEK"
  MMControl1.Command = "PLAY"
  End Sub
  Private Sub Close_Click()
  MMControl1.Command = "STOP"
  MMControl1.Command = "CLOSE"
  End Sub
  值得注意的是:在播放AVI文件之前,首先应该把AVI(音频视频)驱动程序安装在Windows下。AVI的驱动程序名为MCIAVI.DRV,必须将它拷贝到WINDOWSSYSTEM目录下,同时在SYSTEM.INI文件的[MCI]部分加上:
  AVIVIDEO=MCIAVI.DRV
  这样,运行Windows时,Windows会自动地将AVI的驱动程序安装好。
  以上仅描述了利用多媒体控制部件播放音频文件(.WAV)、CD唱片和音频视频文件(.AVI)的操作过程。实际上利用多媒体控制部件同样可以播放动画文件(.FLI、.FLC)、MIDI文件等其他媒体信息。

六、结束语
  通过前面论述,不难看出:利用Visual Basic提供的多媒体控制部件MCI.OCX,广大计算机用户可以方便、快捷、高效率地开发出各种多媒体应用程序。但需要强调的是:开发设计Visual Basic多媒体应用程序,除了可以利用多媒体控制部件以外,还可以采用其他手段,例如通过调用API函数等等(鉴于篇幅,这里未做讨论)。可见, Visual Basic确实是专业与非专业多媒体软件开发人员共同拥有的理想开发工具。

附表1 MCI设备类型定义
设备类型   设备描述
CDAudio    激光唱盘播放设备
DAT      数字化磁带音频播放机
DigitalVideo 动态数字视频图像设备
Animation  动画播放设备
Other    未给出标准定义的MCI设备
Overlay    模拟视频图像叠加设备
Sequence    MIDI音序发生器
VCR     可以使用程序控制的磁盘录像机
VideoDisc   可以使用程序控制的激光视盘机
WaveAudio  播放数字化波形音频的设备???

附表2 多媒体控制部件特有事件列表
事件       说明
Done        完成MCI命令动作(Notify为真)
ButtonClick    单击按钮
ButtonCompleted 按钮执行命令完成
ButtonGetFocus  按钮获得输入焦点
ButtonLostFocus 按钮失去输入焦点
StatusUpdate   更新媒体控制对象的状态信息
咸鱼大翻身?索尼将发展可穿戴游戏设备 popping:基于Facebook Pop引擎的iOS动画库 《近匠》专访极路由CTO康神 真正智能中心应当这样做 为什么说Android才是游戏开发者的乐土? 开发移动医疗应用必知的10个掘金点 个推CTO叶新江:云推送技术如何助力产品开发 《近匠》Face++:漫谈人脸识别 无线充电技术赛高:随意走动也能电量满格 体验至上!移动Web应用JavaScript UI库App.js 专访中国国航:传统行业的“轻应用观” 开发者找众筹,哪些网站更靠谱? 48小时脑力激荡 中美青年创客大赛英特尔北京选拔赛 “微应用+大平台”推动企业软件走向碎片化 浅谈Hive vs. HBase 十款最新的JavaScript开发工具 JavaScript Promise启示录 百度携多位安全专家深入探讨安全人才快速培养机制 卡饭技术代表严佳:引入安全人才,企业应遵循S.L.E.E.P、S.T.A.R法则 百度资深研发工程师周晓波:平台+数据 百度培养安全人才的重要思路 代码审查是如何抹杀开发者积极性的? 事件分析平台EventHub开源 云计算智能交通行业论坛:李德毅院士谈智能车 多家知名企业分享应用实践 我伙呆!CRM生死对手微软及Salesforce或将联手 阿里巴巴曾鸣:数据时代来临 OpenStack企业应用之路技术培训:虚机迁移、HA、VDI、跨Hypervisor管理 云计算技术背后的那些天才程序员:KVM之父Avi Kivity 中国气象局联手阿里云:海量气象数据变“活数据” 浪潮首度公布“I2I计划” 全面接盘IBM X业务 一周消息树:Surface Pro 3想替代笔记本太难,微软正逐渐迷失方向 就是要赚钱!NativeX推自定义原生广告交易 继智能手机后的下一个战场:智能家居 我散,我散,我散散散 散3 发分!!!! 发分!!!!! 发分!!!!!!!! 发分!!!!!!!!!!!! 发分!!!!!!!!!!!!!!!!!!! 请问如何去掉测试版软件的“购买”提示框???急急急急!!! 有关获取HTML中Frames的问题? 给分!!!!!啊 给分!!!!!啊!! 给分!!!!!啊!!!!!! 给分!!!!!啊!!!!!!!!!!!!! 给啊!!!!!!!!!!!!! 不是俺蓄意谋两位帮主的反,实在是 ... APPLET连接数据库。。。(我已经每粉了) 千分散尽不复来!!! 千分散尽不复来!!!! 千分散尽不复来!!!!! 千分散尽不复来!! 千分散尽不复来!!!!!!!! 千分散尽不复来!!!!!!!!! 千分散尽不复来!!!!!!!!!!!!! 用分把灌水乐园咽死!!!!! 千分散尽不复来!!!!!!!!!!!!!!!!! 千分散尽不复来!!!!!!!!!!!!!!!!!! 千分散尽不复来!!!!!!!!!!!!!!!!!!! 千分散尽不复来!!!!!!!!!!!!!!!!!!!!! 千分散尽不复来~ 千分散尽不复来~! 请教数据窗口的问题 千分散尽不复来? 千分散尽不复来?! 有LVS_OWNDATA属性的CListCtrl 加图标的问题,25分 在做会员注册时,在添加新数据页,程序一运行就在RS.updata出错,为什么(原程序) 高手请你回答我啦!!!! 我要回家了,第一个给300 哪有msproxy下载????? 请问要怎么样才能在自己写的程序运行时让用户无法使用开始菜单? jdbc的版本 发分!!!!!!!!! 对于初学者,应该学些什么样的数据库? Java的优点 化功大法第一章--散分。 吸星大发第一章--散分 i need help 葵花宝典第一章--散分 求哈密而顿路的算法 我是新手请问下面程序哪错了!为什么提示我有1处错误! ???????????请问怎样将.h连入.CPP中 richtextbox控件的什么方法能实现打字功能 有10-80八个数,把它们分别入两个大圆上的五个圆圈内,使五个数的和为200,应该怎么填 问写“Saving the Earth”的英语作文人类的不明智之举:1,乱伐树木 2,乱扔垃圾 3,不加处理排放废物导致的问题:l,土地沙化 2,河水变脏 3,空气质量差 4,全球气温升高建议;合理化建议至少三条 20世纪80年代具体指哪几年? 地球表面约70%被海洋覆盖,人类为什么还缺水?请说出三个理由. 以saving the earth为题,写一篇80词的英语作文, 一个人增加40%,又减少了20%,这时等于80,这个数是 地球表面约百分之七十被海洋覆盖 人类为什么还缺水 帮忙写英语作文 Saving the Earth 80词左右提示:1 如何保护环境成为世界最大难题之一2 各种污染破坏环境 损害健康 3 不要乱倒垃圾 乱排污水4 我们应该保护环境 使我们的家园更加健康 一个数增加百分之40,又减少百分之20,结果得80,求这个数原来是多少?用方程解,务必请快 地球严重缺水的原因是什么 求作文:saving the earth 一个数减少25%后是60,这个数增加20%后是()A.80 B.100 C.96 D.120 地球上有4/5的面积是海洋,那为什么还一直说缺水呢?我知道海洋是不能喝的,可是现在科技这么发达,就没有机器可以过滤这些海水吗?那样的话不就是不存在缺水问题了? 将20、30、40、50、60、70、80、90这八个数填入下面的圆中,使毎个大圆上的五个小圆里的数和都等于300等于300 一个数减少它的20%后是80,这个数是多少?帮我做做吧等用谢谢 为什么地球会缺水地区降水降是否和蒸发量有关?我们日常用掉的水流入江河,经过蒸发后下雨水流入地表,那为什么还会缺水?水循环中哪里丢失了淡水?寻求专业大虾我们提倡节约用水是节约 将20、30、40、50、60、70、80、90这八个数填入下面的圆中,使毎个大圆上的五个小圆里的数和都等于250. 1.一种洗衣机,现在每台550元,比原价涨了150元,价格上涨了几分之几?2.修一条路,第一周修了40%,第二周修了252米,两周共修了这条路的85%,这条路全长多少米?3.一个数增加20%,在减少20%后是80%,这个 80万年后地球会怎样 大小两个圆,大圆半径等于小圆直径,那么大圆面积是小圆面积的() 3分之20大于6,小于6,还是等于6 最近有什么大事件```急用```80分``越新越重大的越好..最好好最分析.. 19世纪60年代相当于多少年是什么历史事件 什么数乘6等于20分之3 三分之二加九份之二家二十七分之二加八十一分之二加二百四十三分之二用简便方法计算 100万年以后地球是什么样子?人穿着 家用电器 军队 科技等等是什么样子的 20世纪60年代到现在一共有多少年?怎么计算? 九分之二除与27分之八等于多少 80-90年代中发生的大事件! 20世纪60年代是多少年?怎么算出来的? (1又三分之二+九分之八-1二十七分之二)×27 找一部外星人入侵地球的科幻电影在海上外星人发射了两个想轮子一样的东西、撞坏了高架桥 20世纪60年代指的是哪年?1960-1969年对吗?可是,为什么是这样算啊?不是说1世纪等于100年吗?那20世纪应该是2000年吗?怎么是1900年了呢?另外,想请教一下公元前和公元后是怎么算的呢?哪年是公元前? 九分之二加二十七分之四等于几? 美国外星人入侵地球的电影貌似就是外星人入侵地球,外星机器长着三只脚,非常高大,他们所到之处血染江河,将人绞成血丝,供外星人食用,他们的武器,飞船有防御系统,任何战机,坦克,大炮,甚 20世纪80年代是哪一年,怎么算的1世纪=100年,20世纪怎么是1900年呢 方是多少?三分之一+九分之二+二十七分之四+八十一分之八+三的n次方分之二的n-1次方等于多少? 外星人入侵地球的科幻片,最后通过鲸鱼和外星人对话挽救了地球的是哪部影片外星人的宇宙飞船就象一截粗木头这个影片我看过,科学家发现外星人对鲸鱼的叫声很亲切,知道鲸鱼能和外星人 二十世纪80年代是什么时间,怎样计算? 若两百四十三分之三十二的n次方除以九分之四的n次方等于八分之二十七,求n的值 求美国外星人入侵地球以前看过的,很多飞碟入侵地球,外星人象八爪鱼似的,美国很久以前还抓到过,一直研究,在最后有个老头开飞机打飞碟没弹药了,直接飞进飞碟下边同归于尽了,请问这个片 二十世纪八十年代是什么时间? X乘以X等于40 ---------------------X=? 氯化钠在海水盐类物质中的比例?60%?70%?80%?90? 20世纪80年代是哪一年到哪一年?20世纪90年代又是指哪年到哪年? 60乘以(x减1)等于40乘以(x加1)怎么做 为什么海水中的盐类主要是氯化钠?海水盐分组成表 盐 类 克 / 升 占盐类的 % 氯化钠 27.213 77.75 氯化镁 3.807 10.87 硫酸镁 1.658 4.73 硫酸钙 1.26 3.6 硫酸钾 0.863 2.50 碳酸钙 0.123 0.30 溴化镁 0.076 0.20 20世纪80年代中期是什么年份 多少?乘以百分之四十等于 0.125 为什么氯化钠占海水的盐类成分88.64%,在河水所占的比例却很低? 20世纪八十年代的时代背景是什么?整个大的时代背景 1981-1985 1986-1990 1991-1995 1996-2000 2001-2005 2006-2009 这几个时间段的背景 可以重复 重赏 把100,200,300,...,700,800这八个数,分别填入小圆圈里,使每个大圈上五个数的和是2100.一共八个小圆圈,五个小圆圈用绳子连在一起是一个大圆圈,两个大圆圈连在一起,有共同的两个小圆圈.不知道说 海水中氯化钠有80%吗? 一世纪有几个年代?1980年属于多少年代? 把10.20.30.40.50.60.70.80这八位数填入圆圈内,使每个大圆上的五个数的和是200有两组,每组有五个圆,其中有两个圆是套在一起共用的 每一千克海水中含有氯化钠等盐类约35克,所以海水是咸水,但可能变成淡水跑到地球上来海水到陆地上变成淡 形成天然水循环,这个过程包含了水的 和 两种物态变化 为什么 在二十世纪八十年代 英文是这个单词的英文 把10到80这八个数填入圆圈内,使每个大圆的五个数的和是200 图是一个3个圆的和一个5个圆的合在一起 以Saving the Earth为题目写篇作文人类的不明知之举:1.乱伐树木2.乱扔垃圾3.不加处理排放污水导致的问题:1.土地沙化2.河水变脏3.空气质量差4.全球气温升高建议:合理化建议至少3条开头:As time goe “今天她梳着20世纪80年代的发型”的英语
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn