书城计算机网络多媒体技术
15865500000031

第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控件设计多媒体程序?