登陆注册
13955600000031

第31章 多媒体程序设计(4)

VB可以较为方便地调用Windows的API函数,以支持VB本身不具备的功能。Windows将系统所使用的API函数封装在一系列的动态链接库中,常见的有KERNAL.EXE,GDI.EXE,USER.EXE等,此外还有许多DLL文件。支持多媒体的DLL文件有MMSYSTEM.DLL,AAPLAY.DLL等。这些动态链接库可以看成是应用程序的函数库,一旦在应用程序中进行了声明,即建立了链接,在程序中就可像使用自己内附的函数一样调用封装在动态链接库中的函数。如果要使用的函数库文件不是放在Windows\\System目录下,则必须加上完整的路径名称。

1.声明

在VB中按照声明变量的原则,也可将动态链接的API函数声明成全局或模块级,声明指令为Declare,语法如下。

函数:DeclareFunction\[函数名\]Lib\[动态链接库文件名\](参数)\[数据类型\]

过程:DeclareSub\[过程名\]Lib\[动态链接库文件名\](参数)

如果希望这个API函数的调用返回一个函数值,则应将该函数声明成Function,反之可声明成Sub,函数名的数据类型可以省略。同时要注意的是,Declare语句中的动态链接库一定要包含有声明的API函数。

此外,API函数通常有许多参数,这是调用API函数最烦人的事,一方面要搞清楚每个参数在声明中的说明,另一方面由于传递参数的方式有两种:一种是传地址,另一种是传值。如不加以说明,VB以传地址调用,但大部分的API参数都是使用传值调用的。所以按VB的声明原则,在参数声明前要加上ByVal。

2.使用

一旦对这些API函数进行声明后,可以把它们当做和VB提供的Function或Procedure一样在VB应用程序中使用。MMSYSTEM.DLL动态链接库中,提供了一百多个具有多媒体处理功能的API函数。涉及各类多媒体设备,例如以Wave开头的API函数专门处理语音,还可直接控制PC喇叭发声:

CloseSound/OpenSound关闭/打开声音驱动程序

SetvoiQueuesize设置声音队列的大小

SetvoiceAclent设置播放音符的音速

SetvoiceNote把音符设置到声音队列中

StartSound开始播放声音

StopSound停止声音播放

这些都涉及底层函数调用,而涉及MCI命令的高级函数且和VB有关的是以下3个以MCI开头的函数:

MciSendString传送指令字符给MCI,由MCI接口解释执行指定字符串

MciExecute简单的MCI指令执行调用函数

MciGetErrorString获得MCI错误代码所表示的意思

7.5.2一些API函数的具体说明

和VB有关的MCI函数有三个,分别为mciExecute,mciSendString及mciGetErrorString,下面分别加以说明。

1.mciExecute函数

这是一个简单的MCI指令执行函数,其唯一的参数就是MCI指令字符串。该函数将MCI指令传给MCI接口,由接口解释执行。若执行mciExecute时发生错误,MCI会显示一个对话框显示错误信息,并且传回一个非零的错误代码。如果要处理该错误信息,则可用mciSendString函数进行处理。

例如,i%=mciExecute(“openCDAudioaliasCD”)

2.mciSendString函数

如在传递并执行MCI指令中,不希望在发生错误时看到系统提示的出错信息或想通过程序自行处理,则可以用mciSendString函数代替mciExecute函数。除了都有MCI指令字符串参数外,mciSendString函数的第二个参数为mciReturnString,该参数返回一个文字信息字符串,第三个参数为mciReturnLength,该参数为可接收字符串的最大长度,第四个参数是mcihWnd,在VB中设置为0即可。

必须强调在参数传递时,第二个实参数一定是定长字符串,而不能是变长字符串,第三个实参数即是其长度;其次,如果mciSendString执行不成功,会传回一个代表错误类型的非零代码。再者,在应用程序中,上述两个API函数可混合使用。

例如,DimReturnStringAsString*256

E%=mciSendString(“closeALL”,ReturnString,256,0)

注意,mciSendString实际接收的文字信息若是不定长的,则以空字符(CHW)代替字符串的结束。所以一方面可使用足够的定长字符串以容纳全部文字信息,另一方面可通过字符串处理函数(如instr函数)取得实际文字信息。

3.mciGetErrorString函数

由mciSendString函数所传回的错误代码,可通过调用mciGetErrorString函数获得错误代码所表示的具体意义,其第一个参数mciError为需要获得信息的错误代码,第二个参数mciErrorString是返回的文字字符信息,而第三个参数mciErrorLength为可接收字符串的最大长度。同样,实参的字符变量必须设定为定长,而且必须保证足够长。

7.5.3API程序设计举例

【例7.9】编写程序片段,播放德彪西的《月光》,播放时出现错误,则可显示错误信息。源程序如下:

’Module1.bas在模块中对函数进行说明。

思考与练习题一、名词解释窗口事件消息事件驱动模型对象OLEMCIAPI

二、不定项选择题

1.多媒体控件的操作对象是。

A.媒体控制接口(MCI)设备B.计算机的所有外设

C.VB应用程序D.在并行通信口和串行通信口上的设备

2.下列关于多媒体控件外观的说法中,正确的是。

A.多媒体控件的外观是固定的,不可更改

B.多媒体控件中的播放键可以由用户设置

C.多媒体控件只支持水平方向的外形

D.不显示多媒体控件就无法使用它

3.下列设备中,是多媒体控件支持的设备类型。

A.AVIB.CDAudioC.WaveAudioD.MIDI序列发生器

4.当使用多媒体控件播放音乐CD时,应将其DeviceType属性设置为。

A.AVIVideoB.WaveAudioC.CDAudioD.DigitalVideo

5.下列按键中,不是多媒体控件所具有的按键。

A.PlayB.NextC.ButtonD.Record

6.下列语句能够停止多媒体设备的播放。

A.MMControl.Command=“Pause”

B.MMControl.Command=“Close”

C.MMControl.Command=“Step”

D.MMControl.Command=“Stop”

三、填空题

1.程序界面对象共有以下三种:。

2.VB是由美国Microsoft公司推出的基于的程序开发工具,VB的程序设计风格与传统设计方法不同,它是和的程序设计方法。面向对象是一种全新的设计和构造软件的思维方法。在面向对象的程序设计中,是系统中的基本运行实体。

3.OLE是ObjectLinkingandEmbedding的缩写,意思为,其含义是将一个包含OLE功能的程序到其他基于OLE的Windows应用程序中。OLE技术是实现不同软件之间的,程序员可以把以前编写好、测试过的模块以插入到正在编写的程序中,这样就明显地提高了程序的结构性和软件开发效率。

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

四、简答题

1.在Windows系统中,对多媒体设备进行控制的方法有哪些?

2.什么是媒体控制接口MCI?MCI设备类型有哪些?

3.MCI命令可分为哪些类型?

4.如何在工具箱中增加MCI控件?

5.什么是API?使用API函数设计多媒体程序有何优点?

6.如何使用OLE控件设计多媒体程序?

同类推荐
  • 研究性学习丛书-电脑知识

    研究性学习丛书-电脑知识

    本书对电脑知识有一个全面详细的介绍,会对读者的电脑知识进行提高。
  • 智能计算方法概论

    智能计算方法概论

    本书以智能计算领域的若干前沿技术为主线,内容包括数字水印技术在版权保护区和身份认证中的应用,量子算法在信号处理、图像处理中的应用,量子数据挖掘技术,小波方法在医学图像处理中的应用等。
  • 音视频合成制作

    音视频合成制作

    本书共分4篇6章,其中第1篇简介音视频合成的编导基础,第2篇主要介绍SonyCinescore1电影音乐自动合成,第3篇主要介绍Vegas7.0音视频剪辑合成,第4篇主要介绍AdobeAudition2.0、CakewalkSONAR6和SteinbergNuendo3的音视频合成。本书可以作为音乐、美术、动画、舞蹈、影视、戏剧等艺术院校视听艺术合成制作课程的教材,也可以作为相关人员的自学用书。
  • 科学伴你行-神奇的通信技术

    科学伴你行-神奇的通信技术

    在日常生活中,有时人们要借助于小旗子来进行通信联络,比如,开运动会时,发令员常常要用小旗子与计时员联系;当你乘坐火车进入车站时,都会看到车站工作人员拿着红色和绿色的小旗子在站台上进行指挥;在战争中,打出白色旗子表示投降,插上红色旗子表明胜利;航行在茫茫大海上的船只,双方船员会凭不同旗帜组成的标志,来了解对方的意思。以上种种用小旗子来“说话”的通信方式就叫做旗语。
  • 现代企业财务软件应用教程

    现代企业财务软件应用教程

    本书内容包括财务软件概论、系统管理、企业应用平台、总账管理、报表管理、薪资管理、固定资产管理、应收款管理、应付款管理等。
热门推荐
  • 执掌成仙

    执掌成仙

    一人铸一剑,唯执命运,掌缘生灭;若成仙之路,永无止境,愿做凡仙!
  • 谋皇

    谋皇

    一道皇令,乱了牵好的红线;一场帝争,成王败寇如何!
  • 乱武时代

    乱武时代

    平凡少年,夺舍穿越,迎来神秘绚烂的人生。是甘为棋子,还是跳出棋盘。上古天帝争锋,究竟谁为刀俎,谁为鱼肉。梦中惊起凭栏坐,一念沧海皆成空。
  • 气泡水味的青春

    气泡水味的青春

    从幼儿园到工作,从懵懂到成熟,一个女孩的青春,也许是你的青春。
  • 天行

    天行

    号称“北辰骑神”的天才玩家以自创的“牧马冲锋流”战术击败了国服第一弓手北冥雪,被誉为天纵战榜第一骑士的他,却受到小人排挤,最终离开了效力已久的银狐俱乐部。是沉沦,还是再次崛起?恰逢其时,月恒集团第四款游戏“天行”正式上线,虚拟世界再起风云!
  • 寻韵前尘

    寻韵前尘

    女孩记忆残缺穿越异界,且看她如何在异界生存!注:1、世界背景看第五章2、看不懂没事,慢慢看,会懂的!(本书作为正文番外存在!)3、正文已完结,新书筹备中!
  • 神女归来:冥帝撩妹忙

    神女归来:冥帝撩妹忙

    天启大陆惊雷炸响,迎来了一位酷炫狂拽吊炸天的神女。她左手炼丹,右手御兽,搅得天下鬼哭狼嚎。众人纷纷祈祷:神明啊,快来个人收了这妖孽吧!于是冥帝从天而降,大手一捞,掳走了神女。美人在怀,冥帝各种色诱:“瑶儿,你就从了我吧。”“滚!自己发情别来找老娘!”“那怎么行,这火可是你燎起来的,你不应该帮我灭了它吗,嗯?”于是屋内衣衫乱飞,众人捂脸,羞羞羞~~本书已建扣扣群,群号499953784,输入小说里任意人物名验证哦,欢迎骚扰~
  • 抢个皇帝做老公:战神八小姐

    抢个皇帝做老公:战神八小姐

    她生平最讨厌被人背叛,前世死于伙伴之手,穿越后又有人对她不断放暗箭,想要置她于死地,她叶骨朵,真就这么好欺负么?竞争少族长,抢伪善姐姐的老公,她发誓要为自己复仇,可是……这个被抢的男人不是应该失声痛哭大声求饶么?可他这一脸心满意足的是为啥?OMG!!难道……她抢错人了?
  • tfboys之玺爱

    tfboys之玺爱

    弃文了,别看了……………………………………………………
  • 神裔之瞳

    神裔之瞳

    这是关于眼睛的故事。神的后裔,他们凭借眼睛得到神的能力。太阳神后裔,月亮神后裔……