IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

FMOD Discussion :

Gérer plusieurs sons en même temps


Sujet :

FMOD

  1. #1
    Membre du Club
    Inscrit en
    Septembre 2005
    Messages
    219
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 219
    Points : 44
    Points
    44
    Par défaut Gérer plusieurs sons en même temps
    Bonjour tout le monde ,

    J'ai un petit souci dans mon projet de jeu 3D développé avec Ogre en C++. J'utilise l'API FMOD Ex (en fait je ne peux inclure que fmod.h pour des soucis que je n'évoquerais pas ici) pour gérer le son de mon jeu. Jusque là tout va bien et j'arrive à jouer le son, le stopper et le redémarrer suite à des évènements. Le problème intervient lorsque j'essaye de jouer plusieurs sons au même instant, je m'explique : je lance un son d'ambiance (une musique assez longue) qui rythme mon niveau et l'univers et par dessus, j'aimerais que le joueur puisse entendre ses bruits de pas lorsqu'il marche sur une surface en particulier par exemple.

    Après quelques recherches sur le net, j'ai crû comprendre qu'il fallait gérer les différents "canaux" d'un objet son déclaré avec FMOD. Le souci c'est que je ne vois pas comment faire ça proprement afin d'éviter d'instancier un objet son différent à chaque fois mais un seul et d'utiliser ses canaux pour jouer certains ensembles et pas d'autres... J'espère que vous comprenez à peu près ce que j'essaie de faire au final

    Pour l'instant, je ne peux jouer qu'un seul son (et un à la fois donc) :

    Les attributs actuels de ma classe MySound sont les suivants (ça me parait déjà bizarre qu'il faille déclarer un objet FMOD_SOUND ET un objet FMOD_CHANNEL puisque je pensais que les deux étaient liés, à savoir que les canaux étaient une propriété d'un son...) :
    FMOD_RESULT _result;
    FMOD_SYSTEM *_fsystem;
    FMOD_SOUND *_sound;
    FMOD_CHANNEL *_channel;
    Merci d'avance pour votre aide

    Alex

  2. #2
    Membre actif Avatar de gamerome
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    265
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 265
    Points : 211
    Points
    211
    Par défaut
    C'est par le Channel (FMOD_CHANNEL) que transite le son.
    Il y a une fontion qui te renvoie le channel utilisé par ton son (FMOD_SOUND). Je crois que c'est quand tu le joue.

    L'api utile : http://www.fmod.org/docs/HTML/FSOUND_Stream_Play.html

  3. #3
    Rédacteur

    Avatar de khayyam90
    Homme Profil pro
    Architecte de système d’information
    Inscrit en
    Janvier 2004
    Messages
    10 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Architecte de système d’information

    Informations forums :
    Inscription : Janvier 2004
    Messages : 10 369
    Points : 40 164
    Points
    40 164
    Par défaut
    Bien le bonjour,

    pour pouvoir jouer plusieurs morceaux en même temps, il faut plusieurs canaux.
    Lorsque tu appelles le constructeur de FMOD_SYSTEM, tu dois spécifier le nombre de canaux que tu veux. C'est le nombre de morceaux que tu pourras jouer en même temps.

    Tu dois stocker un tableau de canaux et pas un seul canal.
    Et enfin, tu dois bien t'organiser pour ne pas t'emméler les pinceaux dans les canaux. Par exemple le premier canal pour tout ce qui est musique d'ambiance, le second pour les sons, le troisième pour les voix ....

  4. #4
    Membre actif Avatar de ttone
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    589
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 589
    Points : 203
    Points
    203
    Par défaut
    Bonjour tout le monde ,

    J'ai un petit souci dans mon projet de jeu 3D développé avec Ogre en C++. J'utilise l'API FMOD Ex (en fait je ne peux inclure que fmod.h pour des soucis que je n'évoquerais pas ici) pour gérer le son de mon jeu.
    alex6891 >>
    Ton petit soucis m'intéresse, je suis sur OSX en C++ et j'ai le même petit soucis qui petit à petit finit par devenir un gros truc lourd. Comment as tu fait ?

  5. #5
    Membre actif Avatar de ttone
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    589
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 589
    Points : 203
    Points
    203
    Par défaut
    c++ pas de fmod.h ==> fmod.hpp !!!

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 16
    Points : 15
    Points
    15
    Par défaut
    Salut tout le monde.

    Toujours pour un sujet du même style, donc je n'en n'ai pas recréé un nouveau.
    Voici ma question : comment gérer simultanément plusieurs sons, sachant qu'il s'agit du même répété. Je m'explique, prenons par exemple un son correspondant à un missile. Si vous envoyez, 1, 3, 12, 40 missiles, il faut que les sons suivent en conséquences, donc qu'ils soient joués simultanéments, ou que seuls le dernier joué soit joué, stoppant les autres.

    Pour mon exemple personnel, il s'agit d'un feu d'artifice, et donc lorsque toutes mes explosions se produisent, les sons sont joués les uns après les autres, à croire que FMOD garde en mémoire la suite des sons qui doivent être joués, et donc ils les enchaîne les uns après les autres, même s'il n'y a plus d'explosions par exemple.

    Bien évidemment, créer 10, 100, 1000,... channels me paraît un peu déjanté ! Donc, quelqu'un a-t-il une solution ou un idée ?

    Merci d'avance.

    Gourbish

  7. #7
    Membre actif Avatar de ttone
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    589
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 589
    Points : 203
    Points
    203
    Par défaut
    Ok, si les sons se jouent successivement, c'est surement que tu les as fais joué dans 1 channel, et dans le même système...

    Si tu ne veux pas créer un système pour ton feux d'artifices, et autant de channel que d'explosion, tu devrais créer un système par explosion...

    Ce n'est pas moins farfelu que de créer 10000 channel,

    à mon avis c'est même bien mieux, une fois le son joué tu delete le système.

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 16
    Points : 15
    Points
    15
    Par défaut [FMOD] Gérer plusieurs sons en même temps [RESOLU]
    Salut ttone !

    Merci, ça semble marcher plutôt pas mal désormais. J'ai juste quelques petits soucis à régler car la mémoire du programme n'est plus aussi stable qu'avant, il va falloir que je regarde comment bien supprimer ce qu'il faut.

    Merci bien, ce n'était finalement pas si complexe, mais je découvre FMOD alors...

    Bonne journée, a++

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 16
    Points : 15
    Points
    15
    Par défaut
    En fait, j'ai un problème désormais ; une erreur FMOD (42) :
    Not enough memory or resources.
    Suivit de plusieurs erreurs FMOD (36) :
    An invalid object handle was used.

    Cette erreur arrive à la création d'un système. Elle se produit lorsque j'ai un certain nombre de sons qui doivent être joués dans un lapse de temps réduit.

    Mes sons sont relativement petits (125ko et 40ko), et environ une quinzaine qui cherchent à être joués dans ce lapse de temps. Cela ferait donc une quinzaine de systèmes, et cela semble donc poser problème.

    Pourtant il me semble que tout ceci constitue un bien faible espace mémoire, car j'imagine qu'il ait bien possible de jouer des centaines de petits sons quasiment simultanément. Non ?

    Si tu as donc une petite idée, ou quelqu'un biensûr...
    Merci d'avance.

  10. #10
    Membre actif Avatar de ttone
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    589
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 589
    Points : 203
    Points
    203
    Par défaut
    Not enough memory or resources.
    C'était le risque. Pour la cause du crash, je pencherais plus pour un trop grand nombres d'allocation (systeme audio FMOD) que pour une question de taille/Ko des fichiers audio.

    il faut creuser la conception...

    En meme temps, es tu sûr(e) de faire le bon choix avec FMOD ?

    Une solution intermédiaire entre ton probleme de départ (les sons jouées en série) et ton nouveau probleme,
    ce serait de créer une sorte de buffer... mais la latence va être peut être exponentielle.

    Ou mieux... je m'égare.

    Essaie de Threader tes sons (un thread par system par exemple), chaque son sera traité en parallèle (un peu comme des channels) et détruit.

    Mais je ne pense pas que ca résoudra le probleme.

    1 Donc parallélise (thread) ou restreint la fréquence des sons émis.

    2 Sinon tu peux regarder du coté de la gestion mémoire, en soft ou en hard...

    3 Ou alors tu vas devoir mentir... créer une belle "illusion" qu'il y a 1 son pour 1 feu, ... c'est finalement une pratique peu rare dans les appli multimedia

    bon courage

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 16
    Points : 15
    Points
    15
    Par défaut
    Et bien à force d'essayer, finalement j'obtiens quelque chose qui ne crash plus mais qui n'est pas parfait :

    J'ai créé 2 systèmes globaux (puisque j'avais 2 sons différents : lancement du pétard puis explosion), ensuite, chaque élément possède un channel qu'il associe au système correspondant.

    Ainsi, je n'ai plus de message d'erreur, mais quand la fréquence est trop élevée, les sons semblent se décaler. Je trouvais cela à peu près correcte, mais j'ai montré ça à ma mère, qui n'y connais pas grand chose, pour tester et elle m'a direct fait la remarque ! :/

    J'avais pensé à la gestion soft ou hard de la mémoire, mais je n'ai pas réussi à trouver de détails ou comparatifs la dessus pour FMOD, alors peut-être que j'ai mal cherché.

    Je regarderai un peu ce que cela peut donner avec des threads, merci pour l'idée même s'il n'est pas dit qu'elle soit la plus efficace, au moins cela me redonne une piste à explorer.

    Enfin pour FMOD, et bien je ne connais que cette lib, et il me semblait avoir compris que c'était LA lib pour le son, mais peut-être cela dépend-t-il de l'utilisation que l'on veut en faire...

  12. #12
    Membre actif Avatar de ttone
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    589
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 589
    Points : 203
    Points
    203
    Par défaut
    FMOD m'a semblé (rapidement d'après les forums) être LA lib de son pour les jeux principalement, et en effet elle est véritablement cross plateforme (DS, PS, enfin bref les consoles)

    Mais pour le son en général, je ne sais pas.

    LE fait est que l'appli que tu crées, en général les gens seraient plutot passé par PureData ou MaxMSP.

    J'avais pensé à la gestion soft ou hard de la mémoire, mais je n'ai pas réussi à trouver de détails ou comparatifs la dessus pour FMOD, alors peut-être que j'ai mal cherché.
    La gestion mémoire c'est pour le C++/lanageUtilisé, ca ne concerne pas FMOD, mais la taille mémoire occupée par ton appli sur la machine.

    Faut donc que tu vois si :

    1 tu delete bien tous les objets créés et inutilisé (destructors)
    2 que tu t'informes un peu sur le "garbage collector"
    3 que tu repenses ta méthodes : formats de sons + compressés (fait du sale, genre mp2) ? synthétiser les sons en direct ? etc...

Discussions similaires

  1. Jouer plusieurs sons en même temps
    Par Nuclear88 dans le forum Débuter
    Réponses: 1
    Dernier message: 24/07/2013, 13h51
  2. Réponses: 9
    Dernier message: 20/01/2009, 12h29
  3. Jouer plusieurs sons en même temps
    Par Irydion dans le forum FMOD
    Réponses: 0
    Dernier message: 18/11/2008, 19h54
  4. Gérer plusieurs mouvements "en même temps"
    Par v4np13 dans le forum SDL
    Réponses: 15
    Dernier message: 08/04/2007, 15h21
  5. Lancer deux sons en même temps...
    Par Julien_riquelme dans le forum API, COM et SDKs
    Réponses: 1
    Dernier message: 03/05/2003, 17h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo