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 :

Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
 
m_result = (it->second)->isPlaying(&IsPlaying);
err_check(m_result);
Il m'affiche

fmod error 11 - The specified channel has been reused to play another sound
Sachant, que je charge un fichier son, et que je test de le jouer deux fois.
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 :

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);
                }
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.

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 :

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++ ;
}
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
 
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 ;
	}
}
je fais finir par poster la classe enti�re � force de bouts m'enfin...

Probl�me r�solu : CreateStream au lieu de CreateSound :/