2015-04-15 1 views
0

J'ai un problème avec un jeu. Je veux jouer un son d'arrière-plan et un autre son lorsque vous cliquez sur un bouton. Lorsque cela se produit, le son d'arrière-plan s'arrête et le deuxième son commence. Lorsque le deuxième son est terminé, aucun son ne sera joué.Comment jouer 2 sons différents en même temps? (Visual basic)

Vous pouvez voir mon code ci-dessous:

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

Je ne suis pas très confiant sur la pièce audio, mais cela ressemble à un cas pour le filetage - un exemple C# que j'ai trouvé ici - http://stackoverflow.com/questions/6240002/play-two-sounds -simultaneusly – InbetweenWeekends

+0

duplication possible de [Jouer plusieurs sons en utilisant SoundPlayer] (http://stackoverflow.com/questions/1285294/play-multiple-sounds-using-soundplayer) – jaket

+0

Cette question a déjà une réponse: http: // stackoverflow. com/questions/1285294/play-multiple-sons-using-soundplayer. En outre, ce n'est pas un problème de threading - SoundPlayer.Play est déjà Async. – jaket

Répondre

0

j'avais été aux prises avec le même problème .....

La réponse courte est que vous ne pouvez pas. Le système autorisera seulement un canal vers l'interface audio dans un processus donné. En tant que tel, lorsque vous démarrez un nouveau son, le précédent se termine.

Il existe un certain nombre de solutions de rechange qui utilisent principalement Direct-X ou Media-Player. Cependant, je n'ai trouvé ni l'une ni l'autre de ces solutions faciles ou robustes en ce sens que vous dépendez de la machine des utilisateurs pour installer les bonnes choses.

Cependant, j'ai trouvé une solution rapide et simple au problème.

J'ai ajouté un "hook" spécial à mon application de sorte que lorsque je l'exécute avec un argument de ligne de commande approprié, tout ce qu'il fait est de jouer un son particulier et de quitter. J'utilise ensuite l'objet processus pour démarrer une autre instance de l'application avec l'argument approprié .. et hey presto .. plusieurs sons.

Si votre application est configurée pour être automatiquement une instance unique, vous devez la désactiver et la remplacer par un petit code pour détecter une autre instance et quitter. Une autre alternative consiste à ajouter un petit exe à votre package d'application qui fait simplement partie du son. Je sais que cela ne semble pas très "pur", mais vraiment, tout ce que vous faites est de commencer un processus pour jouer un son en arrière-plan. Ce n'est pas vraiment important si ce processus est une fonction Windows native ou une de vos propres créations.