在某些情況下,例如編寫游戲,或將要進行一項非常冗長的過程, 可以通過播放音樂來增加游戲的聲光效果或是減少漫長的等待所帶來 的困倦。本文介紹如何在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:WIN95MEDIACAYON.MI D/")
如果希望對聲音文件的部分進行播放,可以使用from…to…語句 格式,例如若要 播放CANYON.MID文件的10毫秒到100毫秒的部分,可以 使用如下的語句:
Dim Return Value As Long
RetumSoundValue=mciExecute("play C:WIND95MEDIA/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:WIN95WEDIATADA.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:WIN95MEDACNYON.MI D from 10to 100"
EndSub
按下F5鍵來執行樣例程序。單擊"使用sndPlaySound函數"命令按 鈕,則使用sndPlay Sound函數來播放C:WIN95MEDIA目錄下的TADA.W AV聲音文件。音擊"使用mciExe cute函數來播放C:MIN95MED IA目錄下CANYON.MID文件的10毫秒到100毫秒的部分。