登陆注册
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控件设计多媒体程序?

同类推荐
  • 多媒体技术

    多媒体技术

    多媒体技术多媒体技术多媒体技术多媒体技术多媒体技术多媒体技术多媒体技术多媒体技术多媒体技术多媒体技术多媒体技术
  • 下一代互联网

    下一代互联网

    本书系统介绍了下一代互联网的进展情况,包括下一代互联网的概念解析,国内外下一代互联网的最新发展情况,下一代互联网的关键技术进展,以及各国发展下一代互联网的政策计划。最后分析了下一代互联网对未来社会的影响,提出我国发展下一代互联网的政策建议等。全书共6章,包括互联网发展历史和现状,下一代互联网基本概念,下一代互联网研究最新进展,下一代互联网发展现状,我国发展下一代互联网现状,发展下一代互联网战略建议。
  • 中文版AutoCAD2011基础与应用案例教程

    中文版AutoCAD2011基础与应用案例教程

    本书采用项目教学方式,通过大量案例全面介绍了AutoCAD2011软件的功能和应用技巧。全书共分8个项目,内容涵盖AutoCAD2011基本操作,绘制与编辑图形,标注尺寸,添加文字注释与应用表格,创建与应用块,绘制与编辑三维图形,图形输出等。
  • 智能计算方法概论

    智能计算方法概论

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

    如何组装电脑

    本书以问答的形式介绍了组装电脑的基本知识。内容包括:电脑硬件的部件组成、CPU的发展历程、CPU主频、内存的组成、内存的主要性能参数等。
热门推荐
  • 大侠也认栽

    大侠也认栽

    为了调养病体,陆君遥离家九年,跟着师父习武。如今再踏上这块土地,他有些淡淡的近家情怯,可更教他无所适从的是,当年父亲为病弱的他作主,仓促迎娶,与他拜了天地成了亲的妻子──孟心芽。成亲时,她还稚气未脱,突然被丢进陆家这深宅大院,慌乱的眼里写满无助,只敢傻气地偷偷对他说心事。如今,她已是雍容聪慧、独立自主的当家主母,将陆家产业管理得有声有色,对待丈夫却也如公事,见了面净问他要不要纳妾、让陆家多子多孙?唉,是他这个丈夫亏欠她的,但一返家就这么不解风情,还真教人气馁!看来,要指望他的小妻子表现些浓情蜜意,怕是难了;但这也无妨,他现在有的是一辈子,可以慢慢认识她、感动她,与她做一对真正的夫妻……
  • 8种成功习惯

    8种成功习惯

    8种成功习惯,教你如何获得成功,如何获得完美人生。
  • LOTUS:莲的世界

    LOTUS:莲的世界

    公元2020年,LOTUS(莲)系统登上历史舞台。将人类神经系统与网络空间连结——一夜间,虚拟取代了现实,无限代替了有限……人类仿佛体验到了缔造新世界的快感。然而一切似乎没那么简单。一道禁令终止了各国新技术的应用与研究。故事开始于十年后平凡的一天。却成为了所有阴谋与悲剧的起点……
  • 我的未婚妻是诸葛大力

    我的未婚妻是诸葛大力

    对爱五剧情不满意?对诸葛大力的归属有遗憾?作为一个十年爱粉,看到爱五结局之后的苏晨表示,我有一个大胆的想法……然后,他就穿越了!看到近在眼前的诸葛大力,苏晨表示,诸葛大力是我的,不管是张伟,还是赵海狸,都给我一边玩去!(本书以爱五为现实世界,主角会穿越到其他世界,诸天流,主要以国风类为主,纯武侠、玄幻路线,后期视情况而定)
  • 龙组之面位穿越

    龙组之面位穿越

    本人遇到了点事,本书暂停更新。。
  • 天行

    天行

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

    裂世十八刀

    白天他是一个普通学生,晚上他在游戏里NB哄哄。有一天,他把游戏里的内功在现实中练成了。从此,一切都变了~扣扣群号:328353057。怼起来~~~
  • 古代烘焙日志

    古代烘焙日志

    新书《重生农女忙考学》,空间爽文,欢迎一观。小小的糕点,大大的理想。轻松励志奋斗文,欢迎一品,再品
  • 有女扶桑

    有女扶桑

    一场邪恶的试验,22世纪的孤僻少女成了异世界的怪力女。乖乖,不怕不怕,大不了咱给演个胸口碎大石也能挣口饭吃。这是一个孤僻女孩的自强史,这是一个纯真少女的黑化录,这是一个执着女子的修仙记。
  • 农村文化娱乐常识——五子棋

    农村文化娱乐常识——五子棋

    文化,天地万物(包括人)的信息的产生融汇渗透(的过程)。是以精神文明为导向的融汇、渗透。文化,是精神文明的保障和导向。娱乐可被看作是一种通过表现喜怒哀乐或自己和他人的技巧而使与受者喜悦,并带有一定启发性的活动。很显然,这种定义是广泛的,它包含了悲喜剧、各种比赛和游戏、音乐舞蹈表演和欣赏等等。