在某些情况下,例如编写游戏,或将要进行一项非常冗长的过程, 可以通过播放音乐来增加游戏的声光效果或是减少漫长的等待所带来 的困倦。本文介绍如何在Visual Basic 中播放声音文件。
在Windows系统中支持的声音文件有WAV文件和MIDI文件,通常使 用Windows应用程序编程接口(API)函数可以对MIDI文件进行播放;而 使用API函数sndPlaySound则可以对WAV 播放文件进行播放,当然,也 可以使用nciExecute函数来播放WAV文件。播放WAV文件
需要在程序窗体的通用声明部分中或标准模块中添加如下声明语 句:
Private Declare Function sndPlaySound Lib "winmm.dll" Al ias"sndPlaySound A"((ByVal lpszSound Name As String,ByVal uF lags As Long)As Long
然后添回如下标准识常量:
Public Const SND_SYNC=& H0
Public Const SND_ASYNC=& H1
Public Const SND_NODEFAULT=& H2
Public Const SND_MEMORY=& H4
Public Const SND_ALIAS=& H10000
Public Const SND_RESOURCE=& H40004
Public Const SND_ALIAS_ID=& H110000
Public Const SND_ALIAS_START=0
Public Const SND_LOOP=& H8
Public Const SND_NOSTOP=& H10
Public Const SND_VALID=& H1F
Public Const SND_NOWAIT=& H2000
Public Const SND_validflags=& H17201F
Public Const SND_RESERVED=& HFF000000
Public Const SND_TYPE_MASK=& H170007
sndPlaySound函数需要两个参数,第一个参数soundfilename是要 播放的WAV文件的名称,第二个参数是一个表明播放方式的标识常量, 其值如上述常量定义,通常所使用的标识意义如下:
?SND_SYNC播放WAV文件,播放完毕后将控制转移回应用程序中。
?SND_ASYNC播放WAV文件,然后将控制立即转移回应用程序中。
?SND_NODEFAULT不要播放缺省的WAV文件,以免发生某些意外的 错误。
?SND_MEMORY播放以前已经加载到内存中的WAV文件。
?SND_LOOP循环播放WAV文件。
?SND_NOSTOP在开始播放其它的WAV文件之前,需要完成对本WAV 文件的播放。
值得注意的是SND_LOOP标识通常需要同SND_ASYNC共同使用,也即 在两个标识之间添加与播放符,以免在对WAV文件进行播放的时候将系 统挂起。
播放MIDI文件
需要在程? 体的通用声明部分中或标准模块中添加如下声明语 句:
Private Declare Function mciExecute Lib"winmm.dll"Alias" mciExecute"(ByVa l lpstrComman As String)As Long
mciExecute函数只需要一个参数CommandString,顾名思义,它是 一个命令字符串,用于表明对声音文件播放的命令,例如,希望完整播 放声音文件,则该字符串就是字符串"pl ay"加上声音文件的路径以及 文件名称,如下所示:
Dim Return Vsalue As Long
ReturnSoundValue=mciEecute("play C:\WIN95\MEDIA\CAYON.MI D/")
如果希望对声音文件的部分进行播放,可以使用from…to…语句 格式,例如若要 播放CANYON.MID文件的10毫秒到100毫秒的部分,可以 使用如下的语句:
Dim Return Value As Long
RetumSoundValue=mciExecute("play C:\WIND95\MEDIA/CASNYON .MID from10 to 100")
micExecute函数也可以用来对WAV文件进行播放,方法同播放MIDI 一样。
样例程序
1.在Visual Basic中开始一个新的项目,采用缺省的方法建立For m1。
2.将如下声明语句添加到Form1的通常声明部分中(注意每个声明 语句需要书写在一行内):
Private Declare Function sndPlaySound Lib"winmm.dll"Alia s"sndPlaySoundA" (ByVal lpszSoundName As String,ByVal uFlags As Long)As long
Const SND_SYNC=& H0
Const SND_ASYNC=& H1
Const SND_NODEFAULT=& H2
Const SND_MEMORY=& H4
Const SND_ALIAS=& H10000
Const SND_FILENAME=&H20000
Const SND_RESOURCE=& H40004
Const SND_ALIAS_ID=& H110000
Const SND_ALIAS_START=0
Const SND_LOOP=& H8
Const SND_NOSTOP=& H10
Const SND_VALID=& H1F
Const SND_NOWAIT=& H2000
Const SND_validflags=& H17201F
Const SND_RESERVED=& HFF000000
Const SND_TYPE_MASK=& H170007
Private Declare Function mciExecute Lib"winmm.dll"Alias" mciExecute"(ByVa l lpstrCommand As String)As Long
3.在Forml上添加一个文本框控件,采用缺省的方法建立TexT1。 将其Caption属性设置为NULL。
4.在Form1上添加一个命令按钮控件,采用缺省的方法建立Comman d1。将其Caption属性设置为"使用mciExecute函数"。
5.在Form1上添加一个命令按钮控件,采用缺省的方法建立Comman d2。将其Cpaption 属性设置为"使用mciExecute函数"。
6.将如下代码添加到Command1的单击事件中:
Private Sub Command1_Click()
Dim Return Value As Long
Text1.Test="使用sndPlaySound函数播放Canyon.mid文件Return Value=sanPlaySou nd("C:\WIN95\WEDIA\TADA.WAV",SND_SYNC)
End Sub
7.将如下代码添加到Command2的单击事件中:
Private Sub Command2_Click()
Dim Return Value As Long
Text1.Test="使用sndPlaySound函数播放Canyon.mid文件。"
ReturnSoundValue=mciExdecute"play C:\WIN95\MEDA\CNYON.MI D from 10to 100"
EndSub
按下F5键来执行样例程序。单击"使用sndPlaySound函数"命令按 钮,则使用sndPlay Sound函数来播放C:\WIN95\MEDIA目录下的TADA.W AV声音文件。音击"使用mciExe cute函数来播放C:\MIN95\MED IA目录下CANYON.MID文件的10毫秒到100毫秒的部分。