Plusieur sons wave

tyrion78 Messages postés 8 Date d'inscription mardi 20 mars 2007 Statut Membre Dernière intervention 2 décembre 2008 - 30 mars 2007 à 19:44
mouseb Messages postés 8 Date d'inscription lundi 11 septembre 2006 Statut Membre Dernière intervention 6 avril 2008 - 7 déc. 2007 à 11:25
Bonjour à tous!

Bon voila j'ai un petit probleme ^^
J'ai un projet en VB qui me demande de créer un jeu  ^^
Mais pour le rendre plus sympa je voudrai y mettre des effets sonores . Donc aprés plusieurs recherche j'ai trouvé mais il reste un probleme.
Que je vous explique:
    Donc j'ai réussi à mettre des effets sonores dans mon jeu mais le probleme c'est que je ne peux pas utiliser 2 sons simultanément. En effet je voudrai mettre un sons en arriere plan mais des que, par exemple je tire ( oui c'est un petit jeu de shoot ^^ ) , et bien le son en arriere plan s'arrete et est remplacé par le son du tir.

Donc voila ma question: Est il possible de mettre un son en arriere plan qui se repete tant qu'on a pas quitté le jeu tout en utilisant d'autres sons par dessus comme le tir par exemple?

Merci d'avance
PS: je suis en VB 2005

   
   

6 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
30 mars 2007 à 19:58
Salut
Et si tu nous disais comment tu as fait pour lire un fichier WAV, on saurait peut-être te dire comment le paramétrer !

Sinon, il existe toujours la DLL winmm.dll qui propose la fonction PlaySound qui possède plusieurs paramètres, comme :
SND_LOOP qui permet de jouer un son en boucle
SND_ASYNC qui permet de lancer le son et de rendre la main aussitôt, sans attendre la fin ...

Plus d'infos en cherchant "PlaySound" :
   - parmi les sources de vbfrance (mais en .Net, je ne sais pas) 
   - dans "api-guide" dispo sur www.allapi.net

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Champion du monde de boule de cristal - 2005
Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
tyrion78 Messages postés 8 Date d'inscription mardi 20 mars 2007 Statut Membre Dernière intervention 2 décembre 2008
30 mars 2007 à 23:08
Alors voila comment j'ai fait:

 Public Class SoundClass
        Declare Auto Function PlaySound Lib "winmm.dll" (ByVal name _
        As String, ByVal hmod As Integer, ByVal flags As Integer) As Integer

        Public Const SND_SYNC = &H0         
        Public Const SND_ASYNC = &H1        
        Public Const SND_FILENAME = &H20000 
        Public Const SND_RESOURCE = &H40004 

        Public Sub PlaySoundFile(ByVal filename As String)
           
            PlaySound(filename, Nothing, SND_FILENAME Or SND_ASYNC)

        End Sub
 End Class

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim SoundInst3 As New SoundClass()

            SoundInst3.PlaySoundFile("mon fichier wave1")

End Sub

Private Sub PctBoxGhost13_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PctBoxGhost13.Click

        Dim SoundInst1 As New SoundClass()

            SoundInst1.PlaySoundFile("mon fichier wave2")

End Sub

Donc alors avec ça, quand je lance mon application le son wave1 fonctionne correctement en arriere plan mais une fois que je click, le sons wave2 prend la place du sons wave1 qui lui s'arrete et ne ce relance plus :S

C'est pour ça que j'ai demandé s'il était possible de jouer le son wave1 en arriere plan en boucle sans qu'il s'arrete tout en entendant le son wave2 par dessus.

J'espere qu'avec ceci vous pourrez m'aider
Merci ^^
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
31 mars 2007 à 02:38
Ok, donc tu utilses déjà cette fonction.
Comme le système attaque la même interface, ça semble logique qu'il interrompt la première pour jouer la nouvelle.
Alors, il faut changer son fusil d'épaule.
Essaye en utilisant les fonction MCI : mciSendString
Il est capable d'émettre plusieurs fichiers son en même temps
(quelques minutes plus tard)
Voilà un exemple en VB6 que tu pourras facilement transposer en .Net (puisque API)
J'ai utilisé un fichier WAV de l'ordre de 20 secondes pour WAV1, et le deuxième, WAV2, est un petit jingle d'une seconde qui apparait deux fois pendant la lecture du 1er (à toi de mettre deux fichiers son correspondant dans ton répertoire)

Private Declare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" (ByVal lpstrCommand As String, ByVal lpstrReturnString As String, ByVal uReturnLength As Long, ByVal hwndCallback As Long) As Long



Private Sub Form_Load()
    Dim sFichier As String
    Dim r As Long, t As Single
   
    sFichier = App.Path & "\Son1.wav"
    r = mciSendString("OPEN """ & sFichier & """ TYPE WAVEAUDIO ALIAS WAV1" & Chr$(0), 0&, 0, 0)
    r = mciSendString("PLAY WAV1 FROM 0", 0&, 0, 0)
   
    t = Timer   ' Attend 2 secondes
    Do: DoEvents: Loop Until Timer > (t + 2)
   
    sFichier = App.Path & "\Son2.wav"
    r = mciSendString("OPEN """ & sFichier & """ TYPE WAVEAUDIO ALIAS WAV2" & Chr$(0), 0&, 0, 0)
    r = mciSendString("PLAY WAV2 FROM 0", 0&, 0, 0)



    t = Timer   ' Attend 1 seconde
    Do: DoEvents: Loop Until Timer > (t + 1)



    sFichier = App.Path & "\Son2.wav"
    r = mciSendString("OPEN """ & sFichier & """ TYPE WAVEAUDIO ALIAS WAV2" & Chr$(0), 0&, 0, 0)
    r = mciSendString("PLAY WAV2 FROM 0", 0&, 0, 0)
End Sub



Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
    Dim sFichier As String
    Dim r As Long
   
    ' Fermeture
    sFichier = App.Path & "\Son1.wav"
    r = mciSendString("OPEN """ & sFichier & """ TYPE WAVEAUDIO ALIAS WAV1" & Chr$(0), 0&, 0, 0)
    r = mciSendString&("STOP WAV1", 0&, 0, 0)
    r = mciSendString&("CLOSE ANIMATION", 0&, 0, 0)



    sFichier = App.Path & "\Son2.wav"
    r = mciSendString("OPEN """ & sFichier & """ TYPE WAVEAUDIO ALIAS WAV2" & Chr$(0), 0&, 0, 0)
    r = mciSendString&("STOP WAV2", 0&, 0, 0)
    r = mciSendString&("CLOSE ANIMATION", 0&, 0, 0)
End Sub


Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Champion du monde de boule de cristal - 2005
Le savoir est la seule matière qui s'accroit quand on
0
tyrion78 Messages postés 8 Date d'inscription mardi 20 mars 2007 Statut Membre Dernière intervention 2 décembre 2008
31 mars 2007 à 22:05
Merci beaucoup
Avec ça mon petit jeu sera plus sympathique.....
Merci encore

Bye
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
mstarsup5 Messages postés 527 Date d'inscription lundi 15 octobre 2007 Statut Membre Dernière intervention 10 octobre 2013 1
6 nov. 2007 à 11:51
Merci beaucoup pour cette API jack!
Très utile!
0
mouseb Messages postés 8 Date d'inscription lundi 11 septembre 2006 Statut Membre Dernière intervention 6 avril 2008
7 déc. 2007 à 11:25
Bonjour j'ai le meme probleme que toi mais je travaille avec VisualBasic 2005 express et il me semble que ce code ne marche pas sur cette version!

Est-ce que qqun pourrais m'aider a le convertir?
Merci d'avance!
0
Rejoignez-nous