utiliser PlaySound () en C ++ / OpenGL pour lire le son en arrière-plan

J’essaie de lire un fichier wav en arrière-plan d’un jeu construit en c ++ avec opengl. J’utilise la ligne suivante pour lire le fichier wav:

PlaySound("starwars.wav", NULL, SND_FILENAME|SND_LOOP); 

Le problème est lorsque la musique commence l’animation s’arrête. J’ai essayé de démarrer la musique en appuyant sur un bouton du clavier, mais lorsque je fais cela, la musique commence et toute l’animation s’arrête. Y a-t-il un moyen d’éviter cela? Je veux juste que de la musique joue en arrière-plan et que PlaySound semble être le moyen le plus simple d’y parvenir, étant donné qu’elle ne nécessite qu’une ligne de code.

Vous voulez passer

SND_ASYNC

Cela ferait revenir PlaySound immédiatement, au lieu d’attendre que le son soit fini, ce qui, dans votre cas, ne correspondrait pas à celui de la boucle. IIRC PlaySound permet à un seul son de jouer à la fois, il est donc préférable de chercher une bibliothèque de sons, surtout si vous faites un jeu.

En conclusion pour que votre échantillon fonctionne:

PlaySound("starwars.wav", NULL, SND_ASYNC|SND_FILENAME|SND_LOOP);

S’il vous plaît voir ceci

Je ne suis pas un expert avec Windows Sound API, mais il semble que la fonction PlaySound est une opération de blocage, ce qui signifie que votre application se fige jusqu’à ce que la fonction soit terminée, c’est-à-dire que le son est joué jusqu’à la fin. Peut-être y a-t-il un drapeau pour contourner cela?

Vous pouvez démarrer un thread pour le son, qui se termine après l’arrêt du son. Ou vous pourriez vouloir regarder dans une API de son simple.

Si vous utilisez le format playSound (“* .wav”, NULL, SND_SYNC | SND_LOOP), vous avez presque perdu le contrôle de l’animation du jeu qui sera gelée avec la boucle incluse dans la fonction playSound () mais SND_LOOP mais Si vous modifiez le SND_SYNC avec SND_ASYNC, cela fonctionnerait exactement comme vous l’avez commandé, mais n’oubliez pas que cela fonctionne pour Windows et n’oubliez pas d’inclure le WINMM.LIB (bibliothèque multimédia de fenêtres) sous le projet / opengl / visual c ++ / link