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 :

Paramètres PlaySound


Sujet :

FMOD

  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Juin 2012
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2012
    Messages : 257
    Points : 321
    Points
    321
    Par défaut Paramètres PlaySound
    Bonjour,

    J'aimerais savoir comment déterminer "channel" dans FMOD avec la fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int F_API FSOUND_PlaySound(
        int channel,
        FSOUND_SAMPLE *sptr
    );
    Dans la doc:
    The absolute channel number in the channel pool.
    Remember software channels come first, followed by hardware channels.
    You cannot play a software sample on a hardware channel and vice versa.
    FSOUND_FREE
    Chooses a free channel to play in. If all channels are used then it
    selects a channel with a sample playing that has an EQUAL or LOWER priority
    than the sample to be played.
    FSOUND_ALL
    Passing this will cause ALL channels to play. (note this will make things
    VERY noisy!)
    If FSOUND_ALL is used the last channel success flag will be returned.
    Avec "0" ou "1" ou "FSOUND_FREE" le son est très faible.

    Avec "FSOUND_ALL" le son est bruité.

    Comment faire ?

    Merci pour des informations sur le sujet.

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 859
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 859
    Points : 218 579
    Points
    218 579
    Billets dans le blog
    120
    Par défaut
    Bonjour,

    Je pense qu'il faille utiliser FSOUND_FREE, puis, augmenter le volume avec setVolume().
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Membre actif
    Profil pro
    Programmeur Audio
    Inscrit en
    Décembre 2010
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Programmeur Audio
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2010
    Messages : 127
    Points : 221
    Points
    221
    Par défaut
    Salut

    Comme expliqué dans la doc FSOUND_ALL fait jouer ton son sur tout les canaux d'où le volume plus fort !
    De plus tu n'auras plus de canal de libre et donc tu ne pourras plus jouer d'autres sons (en générale on a entre 32 et 64 canaux).

    Pour le déterminer il faudrait que tu es un manager de channel si il n'existe pas dans de base dans FMOD.
    Tu pourrais partir sur un pool de 32. Par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
    class ChannelManager
    {
        public:
            static const int InvalidChannel = -1;
     
            ChannelManager(int maxChannels)
               :  m_usedChannels(maxChannels)
            {
                  for(int i = 0; i < maxChannels; ++i)
                  {
                         m_freeChannels.push(i);
                  }
            }
     
            int GetFreeChannel()
            {
                  if(m_freeChannels.empty())
                  {
                        return InvalidChannel;
                  }
     
                  int newChannel = m_freeChannels.top();
                  m_freeChannels.pop();
     
                  m_usedChannels.push_back(newChannel);
                  return newChannel;              
            }
     
            void ReleaseChannel(int oldChannel)
            {
                  m_freeChannel.push(oldChannel);          
                  m_usedChannels.remove(oldChannel);    
            }
        private:
            stack<int> m_freeChannels;
            list<int> m_usedChannels;
    };
    Quelques choses comme ça je dirais

  4. #4
    Membre averti
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Juin 2012
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2012
    Messages : 257
    Points : 321
    Points
    321
    Par défaut
    Salut,

    Merci, j'ai pris la solution de LittleWhite. Cela marche mais j'ai l'impression que je n'ai pas le même relief que le son d'origine.
    J'ai une routine d'enregistrement selon la séquence ci-dessous :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    // Init
    FSOUND_Init(44100,32,0); //   FMOD
    sptr = FSOUND_Sample_Alloc(0,44100*5, FSOUND_NORMAL , 44100, 255, 0, 1);
    FSOUND_Record_SetDriver(2);
    // ...
    FSOUND_Record_StartSample(sptr, 0);
    // ...
    FSOUND_Record_Stop();
    // ...
    FSOUND_SetVolume(FSOUND_ALL,255);
    FSOUND_PlaySound(FSOUND_FREE,sptr);
    Vous ne voyez pas de problème ou des initialisations absentes ?

  5. #5
    Membre averti
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Juin 2012
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2012
    Messages : 257
    Points : 321
    Points
    321
    Par défaut
    J'ai trouvé l'explication :
    Les drivers d'enregistrement (que ce soit "Stereo Mix" ou "Pilote de capture audio principal" ) dépendent du volume et donc la résolution du sample en dépend aussi.

    Je n'ai pas de solution satisfaisante du coup

Discussions similaires

  1. créer un noeuds avec des paramétres
    Par Toxine77 dans le forum XMLRAD
    Réponses: 5
    Dernier message: 21/01/2003, 16h11
  2. [xmlrad] Pb de paramètre ?
    Par Pm dans le forum XMLRAD
    Réponses: 7
    Dernier message: 07/01/2003, 14h37
  3. [SWT] Problème de paramètre GridData
    Par yolepro dans le forum SWT/JFace
    Réponses: 4
    Dernier message: 06/12/2002, 10h37
  4. passage en paramètre d'un array dynamique 2D
    Par Guigui_ dans le forum Langage
    Réponses: 4
    Dernier message: 27/11/2002, 19h47
  5. Paramètre requete SQL (ADOQuery)
    Par GaL dans le forum C++Builder
    Réponses: 3
    Dernier message: 30/07/2002, 11h24

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