如何使用PlaySound()在VB6中播放声音

时间:2013-04-12 21:38:42

标签: vb6 playsound

如何使用PlaySound()播放.wav文件?我有PlaySound(声音),但我一直收到错误“Argument not optional”。

另外如何停止播放声音?

1 个答案:

答案 0 :(得分:4)

您没有在问题中向我们展示任何代码,因此我只需要猜测可能出现的问题。

首先,需要在VB 6代码中正确声明PlaySound函数:

Public Declare Function PlaySound Lib "winmm.dll" Alias "PlaySoundA" _
    (ByVal lpszName As String,                                       _
     ByVal hModule As Long,                                          _
     ByVal dwFlags As Long) As Long

您需要一些常量,您可以使用API​​ Viewer应用程序轻松找到它们。这是我从网上下载的列表,因为我没有安装VB 6:

Private Const SND_APPLICATION As Long = &H80
Private Const SND_ALIAS As Long       = &H10000
Private Const SND_ALIAS_ID As Long    = &H110000
Private Const SND_ASYNC As Long       = &H1
Private Const SND_FILENAME As Long    = &H20000
Private Const SND_LOOP As Long        = &H8
Private Const SND_MEMORY As Long      = &H4
Private Const SND_NODEFAULT As Long   = &H2
Private Const SND_NOSTOP As Long      = &H10
Private Const SND_NOWAIT As Long      = &H2000
Private Const SND_PURGE As Long       = &H40
Private Const SND_RESOURCE As Long    = &H40004
Private Const SND_SYNC As Long        = &H0

您需要咨询the SDK documentation以了解每个魔术数字的含义或作用。当你在那里时,你还应该阅读函数参数的含义。从你得到的错误,听起来你试图错误地调用该函数。特别是,您省略了三个参数中的一个,并且它们都是必需的(即,未标记为Optional)。

我不知道你想播放什么样的声音,或声音文件的位置,所以我不能举一个完美捕捉你情况的例子。但是,要从磁盘上的文件播放声音,您可以将完整路径作为第一个参数传递给声音文件,将第二个参数传递给0(因为您没有从资源加载声音),并且{{1第三个参数。

SND_FILENAME

您还可以添加PlaySound "X:\Sounds\trumpet.wav", 0, SND_FILENAME 标志以异步播放声音。这意味着该函数将立即返回,并在其余代码执行时允许声音在后台播放。这不是使用SND_ASYNC标志显式实现的默认行为。

您可以添加SND_SYNC标志以使声音重复播放,直至您停止播放。当然,这也需要SND_LOOP标志。

把它们放在一起,我们得到的声音不断循环并以异步方式播放:

SND_ASYNC

要停止播放声音,请为第一个参数传递空字符串(因为您不需要指定要播放的声音),再次为第二个参数传递0,为第三个参数传递0(因为您不需要任何特殊行为):

PlaySound "X:\Sounds\trumpet.wav", 0, SND_FILENAME Or SND_ASYNC Or SND_LOOP

当然,这只有在您最初开始播放声音时传递PlaySound vbNullString, 0, 0 标志时才有效。否则,在声音播放完毕之前,控制权不会返回到您的代码,然后就没有什么可以阻止了!