Bonjour � tous,
Je suis en train de me servir de fmod pour faire un petit SoundManager basic.
Tout se passe � peu pr�s bien, sauf une erreur que je ne m'explique pas :
A chaque frame, je regarde si un des caneaux de sons qui jouait n'aurait pas arr�ter de le faire ( synonyme d'un mp3 dont la lecture serait termin�e par exemple) , pour ensuite garder en m�moire le fait que tel canau est libre.
Le probl�me est qu'il me renvoie une erreur lors de la v�rification de si un canau est en train de jouer :
Il m'affiche
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3 m_result = (it->second)->isPlaying(&IsPlaying); err_check(m_result);
Sachant, que je charge un fichier son, et que je test de le jouer deux fois.fmod error 11 - The specified channel has been reused to play another sound
Un affichage de mes canaux utilis�s donne "0 et 1", donc rien d'anormal, il ne s'agit pas du m�me.
Je me demande si ce n'est pas un message d'erreur "normal", �tant donn� que dans la doc un des exemples comporte ceci :
Ils semblent n'affichent les erreurs que si la canneau ne joue pas, n'est pas "vol�" ( ce qui correspond � mon msg d'erreur) et n'a pas de handle invalide.
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6 result = channel->isPlaying(&playing); if ((result != FMOD_OK) && (result != FMOD_ERR_INVALID_HANDLE) && (result != FMOD_ERR_CHANNEL_STOLEN)) { ERRCHECK(result); }
Bref, je suis un peu perlexe quand � la signification de mon message d'erreur.
EDIT : petit compl�ment d'information car c'est surement li� :
Si je charge deux son diff�rents, je n'ai pas pu de message d'erreur, et si je charge un son, que je "play" deux fois, il semble que le second son charg�, empeche le premier de jouer totalement (ma variable IsPlaying se retrouve a false pour le premier son, d�s que le second commence � jouer ).
Ma fonction de lecture est faites de la sorte :
Celle de chargement est comme ceci :
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 unsigned int SoundManager::PlaySound(std::string SoundName) { m_Ids[m_MAX_ID] = SoundName ; FMOD::Channel * c = 0; m_result = m_system->playSound(FMOD_CHANNEL_FREE, m_Sounds[SoundName], false, &c); err_check(m_result); m_Channels[m_MAX_ID] = c; m_Numbers[SoundName]++ ; return m_MAX_ID++ ; }
je fais finir par poster la classe enti�re � force de bouts m'enfin...
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11 void SoundManager::LoadSound(std::string SoundName, std::string SoundPath) { if ( m_Numbers.find(SoundName) == m_Numbers.end() ) { FMOD::Sound * s ; m_result = m_system->createStream(SoundPath.c_str(), FMOD_HARDWARE | FMOD_LOOP_OFF | FMOD_2D, 0, &s); err_check(m_result); m_Sounds[SoundName] = s ; } }
Probl�me r�solu : CreateStream au lieu de CreateSound :/
Partager