-1

如何使用 PlaySound() 播放 .wav 文件?我有 PlaySound(sound) 但我不断收到错误“参数不是可选的”。

另外如何停止播放声音?

4

1 回答 1

4

你没有在你的问题中向我们展示任何代码,所以我只需要猜测可能是什么问题。

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

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

您需要查阅SDK 文档以了解每个幻数的含义或作用。当您在那里时,您还应该阅读函数参数的含义。从您收到的错误来看,听起来您正试图错误地调用该函数。特别是,您省略了三个参数之一,它们都是必需的(即,未标记Optional)。

我不知道你想播放什么样的声音,也不知道声音文件在哪里,所以我无法举一个完美捕捉你情况的例子。但是,要从磁盘上的文件播放声音,您需要将声音文件的完整路径作为第一个参数传递,第二个参数为 0(因为您没有从资源加载声音),SND_FILENAME第三个参数为争论。

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

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

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

将所有这些放在一起,我们会得到一个持续循环并异步播放的声音:

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

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

PlaySound vbNullString, 0, 0

当然,这只有SND_ASYNC在您最初开始播放声音时通过标志才有效。否则,直到声音播放完毕,控制才会返回到您的代码,然后就没有什么可以停止了!

于 2013-04-12T22:42:49.183 回答