我对游戏有疑问。当您单击按钮时,我想播放背景声音和另一种声音。发生这种情况时,背景声音停止,第二个声音开始。当第二个声音结束时,不会播放声音。
您可以在下面看到我的代码:
Imports System.Media.SoundPlayer
Public Class GamePlaying
Dim mainmenusndplayer As New System.Media.SoundPlayer
Private Sub GamePlaying_FormClosing(ByVal sender As System.Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles MyBase.FormClosing
MainMenu.Show()
mainmenusndplayer.Stop()
End Sub
Private Sub btn_Fire_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_Fire.Click
btn_Fire.Enabled = False
Dim shotsound As New System.Media.SoundPlayer
shotsound.Stream = My.Resources.TankShoot
shotsound.Play()
End Sub
Private Sub GamePlaying_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
mainmenusndplayer.Stream = My.Resources.WoT_Roll_Out
mainmenusndplayer.Load()
mainmenusndplayer.PlayLooping()
End Sub
End Class
答案 0 :(得分:0)
我一直在努力解决同样的问题......
简短的回答是你不能。系统将仅允许在任何给定过程中一个声道到声音接口。因此,当您开始播放新声音时,前一个声音将终止。
有许多解决方法主要使用Direct-X或Media-Player。但是,我发现这些解决方案既不简单也不健壮,因为您依赖于用户计算机来安装正确的东西。
然而,我找到了解决问题的快速而简单的方法。
我在我的应用程序中添加了一个特殊的“钩子”,这样当我使用适当的命令行参数运行它时,它所做的就是播放一个特定的声音然后退出。然后我使用进程对象用适当的参数启动应用程序的另一个实例..并且嘿presto ..多个声音。
如果您的应用程序配置为自动成为单个实例,则需要禁用该应用程序并将其替换为少量代码以检测另一个实例并退出。
另一种方法是在您的应用程序包中添加一个小的exe,它只是简单地执行声音部分。
我知道这听起来不是很“纯粹”,但实际上,你所做的只是开始一个在后台播放声音的过程。如果该过程是Windows本机功能或您自己制作的功能并不重要。
答案 1 :(得分:0)
您可以将 winmm.dll 与 mciSendString 一起使用:
Imports System.Text
Imports System.Runtime.InteropServices
<DllImport("winmm.dll")>
Private Shared Function mciSendString(ByVal command As String, ByVal buffer As
StringBuilder, ByVal bufferSize As Integer, ByVal hwndCallback As IntPtr) As Integer
End Function
Private Sub MyForm_Click(sender As Object, e As EventArgs) Handles Me.Click
mciSendString("open " & Chr(34) & "C:\myFile1.wav" & Chr(34) " type waveaudio alias Sound1" & internalName, Nothing, 0, IntPtr.Zero)
mciSendString("open " & Chr(34) & "C:\myFile2.wav" & Chr(34) " type waveaudio alias Sound2" & internalName, Nothing, 0, IntPtr.Zero)
mciSendString("play Sound1", Nothing, 0, Me.Handle.ToInt64())
mciSendString("play Sound2", Nothing, 0, Me.Handle.ToInt64())
mciSendString("setaudio Sound1 volume to 1000", Nothing, 0, Me.Handle.ToInt64())
mciSendString("setaudio Sound2 volume to 1000", Nothing, 0, Me.Handle.ToInt64())
End Sub
并停止声音,您必须:
mciSendString("close Name1", Nothing, 0, Me.Handle.ToInt64())
mciSendString("close Name2", Nothing, 0, Me.Handle.ToInt64())
下载 winmm.dll