Gestion du volume avec FMOD

Signaler
Messages postés
2
Date d'inscription
lundi 6 juin 2005
Statut
Membre
Dernière intervention
13 mai 2006
-
Messages postés
1
Date d'inscription
dimanche 8 octobre 2006
Statut
Membre
Dernière intervention
30 mars 2010
-
"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

Messages postés
1403
Date d'inscription
lundi 23 février 2004
Statut
Membre
Dernière intervention
11 janvier 2009
3
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 !"
Messages postés
2
Date d'inscription
lundi 6 juin 2005
Statut
Membre
Dernière intervention
13 mai 2006

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.
Messages postés
1403
Date d'inscription
lundi 23 février 2004
Statut
Membre
Dernière intervention
11 janvier 2009
3
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 !"
Messages postés
1
Date d'inscription
dimanche 8 octobre 2006
Statut
Membre
Dernière intervention
30 mars 2010

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 .