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

C++ Discussion :

Gestion des sons dans un SoundManager


Sujet :

C++

  1. #1
    Membre du Club Avatar de trecks
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    91
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 91
    Points : 58
    Points
    58
    Par défaut Gestion des sons dans un SoundManager
    Bonjour à tous

    Je code actuellement un SoundManager avec la lib FMOD et j'aurai besoin de votre avis. Ma classe SoundManager, de type singleton, possède en propriété privée un conteneur map pour la gestion des sons :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    typedef std::map<const std::string&, FSOUND_STREAM*> m_StreamMap;
     
    //Conteneur des sons
    m_StreamMap m_Stream;
     
    //Itérateur pour le parcours du conteneur
    m_StreamMap::iterator m_StreamIter;
    Donc ma classe possède différentes méthodes pour gérer les sons
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    void RegisterSound(const std::string &strSoundPath, const std::string strName);
     
    void PlaySound(const std::string &strName);
     
    ...
    Donc comme vous pouvez le voir l'utilisateur enregistre les sons et les appelle grâce à un nom de son, comme par exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    pSoundManager->RegisterSound("Data/Sound/Stream/Hold On.mp3", "Hold On");
     
    pSoundManager->PlaySound("Hold On");
    L'utilisateur peut donc stocker autant de fichier sons qu'il veut (en étant quand même raisonnable^^)
    Voici donc mes 2 questions :
    - est-il judicieux d'utiliser un conteneur map pour la gestion des son ou me conseillez-vous un autre type de conteneur ?
    - est ce que rechercher un élément d'un conteneur map grâce à une clé de type std::string est efficace ou au contraire est-elle source de baisse de performance ? (j'ai lui sur un forum que pour accéder aux éléments d'un conteneur map par une clé de type std::string, on doit comparer chaque lettre de la chaine passée en paramètre avec celle du conteneur) Ainsi dans l'exemple précédent :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pSoundManager->PlaySound("Hol On");
    le programme devra comparer chaque lettre de "Hold On" avec la clé cible pour lire le son

    Voila j'espère avoir été assez clair et précis.
    Merci d'avance

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    - est-il judicieux d'utiliser un conteneur map pour la gestion des son ou me conseillez-vous un autre type de conteneur ?
    Ce conteneur répond parfaitement à tes besoins (associer une chaîne à un son), pourquoi te poses-tu la question ?

    - est ce que rechercher un élément d'un conteneur map grâce à une clé de type std::string est efficace ou au contraire est-elle source de baisse de performance ?
    Des comparaisons de chaînes c'est vraiment pas la mort, surtout quand derrière tu vas solliciter ton driver audio qui mettra bien plus de temps à s'éxecuter. Pose toi cette question plus tard si tu vois que tu as des problèmes de performances (mais tu n'en auras pas à cause de ça).

    Si vraiment ça t'embête, tu peux utiliser des identifiants plus directs : un indice de tableau (qui serait renvoyé par la fonction RegisterSound), ou encore un accès direct au FSOUND_STREAM*, ou à quelque chose qui l'encapsule.

    Mais bon ta solution est la meilleure, ne te pose pas tant de questions existencielles et concentre toi à faire du code propre pour le moment.

  3. #3
    Membre du Club Avatar de trecks
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    91
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 91
    Points : 58
    Points
    58
    Par défaut
    Merci au grand maitre Gomila^^
    Je vais donc suivre tes conseils à la lettre
    Et puis tant que j'y suis je tiens à féliciter toutes les personnes qui contribuent à la vie et au développement de ce site (modérateurs, rédacteurs, administrateurs et bien sûr les membres ainsi que tous les autres) que je trouve vraiment génial
    Merci encore @+

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Référencement] Gestion des "includes" dans Google
    Par odelayen dans le forum Référencement
    Réponses: 5
    Dernier message: 20/04/2005, 17h07
  2. [Sécurité]Gestion des accès dans plusieurs bases
    Par vincentj dans le forum Débuter
    Réponses: 1
    Dernier message: 05/01/2005, 14h19
  3. Gestion des headers dans un Makefile
    Par Weren dans le forum Autres éditeurs
    Réponses: 1
    Dernier message: 09/11/2004, 10h44
  4. [VB6] Gestion des erreurs dans une dll
    Par zimba-tm dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 02/08/2004, 11h20
  5. [VB6] Mettre des sons dans un dll
    Par Mr Meuble dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 17/07/2004, 19h50

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