Gestion du volume avec FMOD

cowboybebop95 Messages postés 2 Date d'inscription lundi 6 juin 2005 Statut Membre Dernière intervention 13 mai 2006 - 13 mai 2006 à 02:15
cs_M07 Messages postés 1 Date d'inscription dimanche 8 octobre 2006 Statut Membre Dernière intervention 30 mars 2010 - 30 mars 2010 à 21:40
"Bonjour à tous,

Voila dans le cadre d'un projet de fin d'année je suis ammené a utiliser la librairie Fmod pour la gestion des audios
Pour faire la distinction entre les bruits et les musiques :
- les bruits sont gérés avec :
FSOUND_SAMPLE * sample = FSOUND_Sample_Load(FSOUND_FREE,path.c_str(),FSOUND_NORMAL,0,0);
et lu avec :
ch = FSOUND_Stream_Play( 0 ,i->second); (ou ch retourne le chanel, et i une map pour gerer tout mes sons)
- les musiques de la facon suivante :
sample = FSOUND_Sample_Load(FSOUND_FREE,path.c_str(),FSOUND_NORMAL,0,0);
et lu avec :
ch = FSOUND_Stream_Play(1,i->second); (ou 1 est le chanel et i une map aussi)
- et fmod est initialisé avec : FSOUND_Init(44100, 2, 1);

Soit en toute logique j'initialise 2 canaux 1 pour les musiques et l'autre pour les sons. Or si je vais un cout<<ch; je me retrouve avec des "4097", "8193", ... ; de ce fait si je veux faire un FSOUND_SetVolume(1 ou 0,0 a 255) (1 ou 0 est le canal et 0 a 255 le niveau sonore), bien je n'arrive pas a reguler le son pour les sons d'un coté et les musiques de l'autre, je ne sais pas trop comment faire, je ne peut faire que FSOUND_SetVolumeSFXMaster(0 a 255) pour régler ca.

4 réponses

yoyo269 Messages postés 1403 Date d'inscription lundi 23 février 2004 Statut Membre Dernière intervention 11 janvier 2009 2
13 mai 2006 à 09:17
Tu as essayé avec un truc du genre :
FSOUND_SetVolumeAbsolute(ch, 127);
Et perso pour charger un fichier son, je fais :
sample = FSOUND_Stream_Open(path.c_str(), FSOUND_NORMAL, 0, 0);

YOYO, @+.
"L'intelligence c'est comme un parachute, quand on en n'a pas...on s'écrase !"
0
cowboybebop95 Messages postés 2 Date d'inscription lundi 6 juin 2005 Statut Membre Dernière intervention 13 mai 2006
13 mai 2006 à 10:11
Le FSOUND_SetVolumeAbsolute(ch, 127); marche parfaitemeent mais il agit sur les streams et les samples a la fois, or moi ce que je souhaitais en pensant rediriger dans des canaux, c'est maitriser le volume par canal mais comme apparement j'ai pas du bien comprendre la chose, mais je crois avoir trouvé une "bidouille" pour contourner, j'ai tester un grand nombre de fois et les sample on tjs un numero de chanel impaire et les stream un pair, pour l'instant je peux régler de le son de cette facon.
0
yoyo269 Messages postés 1403 Date d'inscription lundi 23 février 2004 Statut Membre Dernière intervention 11 janvier 2009 2
13 mai 2006 à 10:55
Essaie peut-être ça pour avoir un channel par fichier son :

ch1 = FSOUND_Stream_Play(FSOUND_FREE, sample1);
ch2 = FSOUND_Stream_Play(FSOUND_FREE, sample2);

Comme ça après tu pourrais régler le volume de chaque channel facilement avec FSOUND_SetVolumeAbsolute(...);

YOYO, @+.

"L'intelligence c'est comme un parachute, quand on en n'a pas...on s'écrase !"
0
cs_M07 Messages postés 1 Date d'inscription dimanche 8 octobre 2006 Statut Membre Dernière intervention 30 mars 2010
30 mars 2010 à 21:40
Dsl de répondre à ce vieux poste, mais comme j'ai la solution, j'en fais profiter à tous le monde.

FSOUND_SAMPLE* monSon= SOUND_Sample_Load(FSOUND_FREE, "boom.mp3", 0, 0, 0);
//classique pour l'instant :)

//Puis on lance le son sur le canal 2
FSOUND_PlaySound(2, monSon);
//puis on modifie le volume sur ce canal
FSOUND_SetVolume(2, 20);


Le truc important, c'est l'emplacement de la fonction FSOUND_SetVolume.
En effet, une fois appelé cette fct modifie le volume de tous les sons sur le canal spécifié (dans mon cas le n°2), mais si l'on joue un autre son sur ce canal, ce dernier ne sera pas affecter par la modification du volume.
J'espère avoir été clair .
0
Rejoignez-nous