-在某些情况下,例如程序员正在编写一个游戏,或是将要进行一项非常冗长无聊的过程,可以通过播放音乐来增加游戏的声光效果或是减少漫长的等待所带来的困倦。本文介绍如何在MicrosoftVisualBasic中对声音文件进行播放。
播放声音文件
—-在MicrosoftVisualBasic中进行多媒体音乐的播放是一件非常轻松的事情。在MicrosoftWindows系统中支持的声音文件有WAV文件和MIDI文件,通常使用Windows应用程序编程接口(API)函数mciExecute函数可以对MIDI文件进行播放。而使用API函数sndPlaySound则可以对WAV播放文件进行播放,当然,你也可以使用mciExecute函数来播放WAV文件。
—-为了播放WAV文件,你需要在你的程序窗体的通用声明部分中,或是标准模块中添加如下的声明语句:
—-PrivateDeclareFunctionsndPlaySoundLib”winmm.dll”Alias”sndPlaySoundA”(ByVallpszSoundNameAsString,ByValuFlagsAsLong)As
Long
—-以及如下的标识常量:
—-PublicConstSND_SYNC=&H0
—-PublicConstSND_ASYNC=&H1
—-PublicConstSND_NODEFAULT=&H2
—-PublicConstSND_MEMORY=&H4
—-PublicConstSND_ALIAS=&H10000
—-PublicConstSND_FILENAME=&H20000
—-PublicConstSND_RESOURCE=&H40004
—-PublicConstSND_ALIAS_ID=&H110000
—-PublicConstSND_ALIAS_START=0
—-PublicConstSND_LOOP=&H8
—-PublicConstSND_NOSTOP=&H10
—-PublicConstSND_VALID=&H1F
—-PublicConstSND_NOWAIT=&H2000
—-PublicConstSND_VALIDFLAGS=&H17201F
—-PublicConstSND_RESERVED=&HFF000000
—-PublicConstSND_TYPE_MASK=&H170007
—-sndPlaySound函数需要两个参数,第一个参数soundfilename是要播放的WAV文件的名称。第二个参数是一个表明播放方式的标识常量,其定义的值如上所示,通常所使用的标识意义如下:
—-SND_SYNC播放WAV文件,播放完毕后将控制转移回你的应用程序中。
—-SND_ASYNC播放WAV文件,然后将控制立即转移回你的应用程序中,而不管对WAV文件的播放是否结束。
—-SND_NODEFAULT不要播放缺省的WAV文件,以免发生某些意外的错误。
—-SND_MEMORY播放以前已经加载到内存中的WAV文件。
—-SND_LOOP循环播放WAV文件。
—-SND_NOSTOP在开始播放其它的WAV文件之前,需要完成对本WAV文件的播放。
—-注意:SND_LOOP标识通常需要同SND_ASYNC共同使用,也即在两个标识之间添加与播放符,以免在对WAV文件进行播放的时候将系统挂起。
—-为了播放MIDI文件,你需要在你的程序窗体的通用声明部分中,或是标准模块中添加如下的声明语句:
—-PrivateDeclareFunctionmciExecuteLib”winmm.dll”Alias”mciExecute”(ByVallpstrCommandAsString)AsLong
—-mciExecute函数只需要一个参数,CommandString,顾名思义,它是一个命令字符串,用于表明对声音文件播放的命令,例如,希望完整播放声音文件,则该字符串就是字符串損lay”加上声音文件的路径以及文件名称,如下所示**
—-DimReturnValueAsLong
—-ReturnSoundValue=mciExecute(“playC:\WIN95\MEDIA\CANYON.MID”)
—-如果希望对声音文件的部分进行播放,可以使用from…to…语句格式,例如若要播放CANYON.MID文件的10毫秒到100毫秒的部分,可以使用如下的语句:
—-DimReturnValueAsLong
—-ReturnSoundValue=mciExecute(“playC:\WIN95\MEDIA\CANYON.MIDfrom10to100”)
—-mciExecute函数也可以用来对WAV文件进行播放,方法同播放MIDI一样。
样例程序
—-1.在VisualBasic中开始一个新的项目,采用缺省的方法建立Form1。
—-2.将如下的声明语句添加到Form1的通常声明部分中(注意每个声明语句需要被书写在一行内):
—-PrivateDeclareFunctionsndPlaySoundLib”winmm.dll”Alias”
sndPlaySoundA”(ByVallpszSoundNameAsString,ByValuFlagsAsLong)As
Long
—-ConstSND_SYNC=&H0
—-ConstSND_ASYNC=&H1
—-ConstSND_NODEFAULT=&H2
—-ConstSND_MEMORY=&H4
—-ConstSND_ALIAS=&H10000
—-ConstSND_FILENAME=&H20000
—-ConstSND_RESOURCE=&H40004
—-ConstSND_ALIAS_ID=&H110000
—-ConstSND_ALIAS_START=0
—-ConstSND_LOOP=&H8
—-ConstSND_NOSTOP=&H10
—-ConstSND_VALID=&H1F
—-ConstSND_NOWAIT=&H2000
—-ConstSND_VALIDFLAGS=&H17201F
—-ConstSND_RESERVED=&HFF000000
—-ConstSND_TYPE_MASK=&H170007
—-PrivateDeclareFunctionmciExecuteLib”winmm.dll”Alias”mciExecute”(ByVallpstrCommandAsString)AsLong
—-3.在Form1上添加一个文本框控件,采用缺省的方法建立Text1。将它的Caption属性设置为NULL。
—-4.在Form1上添加一个命令按钮控件,采用缺省的方法建立Command1。将它的Caption属性设置为”使用sndPlaySound函数敗*
—-5.在Form1上添加一个命令按钮控件,采用缺省的方法建立Command2。将它的Caption属性设置为”使用mciExecute函数敗*
—-6.将如下的代码添加到Command1的单击事件中:
PrivateSubCommand1_Click()
DimReturnValueAsLong
Text1.Text=”使用sndPlaySound函数播放TADA.WAV文件。”
ReturnValue=sndPlaySound(“C:\WIN95\MEDIA\TADA.WAV”,SND_SYNC)
EndSub
—-7.将如下的代码添加到Command2的单击事件中:
PrivateSubCommand2_Click()
DimReturnValueAsLong
Text1.Text=”使用mciExecute函数播放Canyon.mid文件。”
ReturnSoundValue=mciExecute
(“playC:\WIN95\MEDIA\CANYON.MIDfrom10to100”)
EndSub
—-通过按下F5键来执行样例程序。单击”使用sndPlaySound函数”命令按钮则使用sndPlaySound函数来播放C:\WIN95\MEDIA目录下面的TADA.WAV声音文件。单击”使用mciExecute函数”则使用mciExecute函数来播放C:\WIN95\MEDIA目录下面的CANYON.MID文件的10毫秒到100毫秒的部分。->