Problème fonction play2d IrrKlang C++

Résolu/Fermé
darkazeron Messages postés 94 Date d'inscription dimanche 24 février 2013 Statut Membre Dernière intervention 10 septembre 2019 - 1 juin 2016 à 01:43
darkazeron Messages postés 94 Date d'inscription dimanche 24 février 2013 Statut Membre Dernière intervention 10 septembre 2019 - 1 juin 2016 à 01:54
Bonsoir,

Je viens vers vous car je suis à court d'idée sur le fonctionnement de la fonction play2d de la librairie IrrKlang en c++ (sous Unix). Je souhaite, pour les besoins de la réalisation d'un jeu vidéo, jouer un son simple une seule fois. Seulement voilà le problème, je parviens pas a faire marcher la fonction en dehors d'une boucle. Les tutos qui existent montrent son execution au sein d'une boucle do while ou while, ce qui marche chez moi :

 #include <stdio.h>
#include <iostream>
#include <irrKlang.h>

void playsound(std::string source = "sounds/sword.wav", bool loop = true)
{
irrklang::ISoundEngine* engine = irrklang::createIrrKlangDevice();

if (!engine)
std::cerr << "Cannot start the engine" << std::endl;
else
{
do{
engine->play2D(source.c_str(), loop);
played = true;
}while (std::cin .get() != "q");
engine->drop();
}
}

int main()
{
playsound();
return (0);
}


tandis que ce simple code ne fonctionne pas (compilation sans warning et passage au gdb ne montre pas d'erreur). L'exécution ne produis aucune action.

int main(int argc, const char** argv)
{
irrklang::ISoundEngine* engine = irrklang::createIrrKlangDevice();

engine->play2D("sounds/sheep.wav", true);
engine->drop();
return 0;
}
A voir également:

1 réponse

darkazeron Messages postés 94 Date d'inscription dimanche 24 février 2013 Statut Membre Dernière intervention 10 septembre 2019 12
1 juin 2016 à 01:54
Autant pour moi je viens de comprendre la source de mon erreur.
Je drop le ISoundEngine avant que la lecture du son aie eu le temps de s'effectuer entièrement vue que la fonction play2D est non bloquante. Dans les boucles le son était bien joué vu que l'attente de la saisie de caractère est , quand à elle, bloquante ce qui permet de laisser le temps à la lecture d'être effectuée.
0