PDA

Voir la version complète : [PSP][Aide] Régler le volume d'un son [résolu]


galouboy
25/09/2006, 11h26
Bonjour à tous,

je suis sur un projet de shoot'em up, et j'ai prévu, dans l'écran d'options, de pouvoir régler le volume des musiques et des SFX.

L'interface est prête, mais reste un problème, comment faire pour modifier le volume d'un son ? :whst:

Dans oslib, j'ai trouvé en fouillant un peu la fonction oslSetChannelVolume, mais celle -ci ne semble pas active (j'ai essayé de passer différentes valeur de 0x0000 à 0x8000 et ça n'a aucun effet sur le volume)

j'ai aussi trouvé les fonctions pspAudioSetVolume et sceAudioChangeChannelVolume en fouillant dans pspsdk, mais toujours aucun effet sur le volume en utilisant ces fonctions.

Donc, je me demande: existe t'il un moyen de faire ce modifications de volume, et si oui, comment.

Merci d'avance pour vos réponses

Brunni
25/09/2006, 15h08
J'avais déjà répondu à quelqu'un en privé:
Avec oslSetChannelVolume, le channel c'est un n°, et non pas un son. Donc il faut en fait passer le n° de voie sur laquelle ton son est joué. Si tu fais oslPlaySound(son, 1) c'est 1 par exemple. Sinon tu peux connaître la voie d'un son avec oslGetSoundChannel ^^

galouboy
25/09/2006, 15h51
En fait, c'est justement ce que je fais...
pour faire mon test, j'ai lancé un son sur le channel 0 :
oslPlaySound(son, 0)

et j'utilise ensuite diverses variantes de oslSetChannelVolume dans différents test:
oslSetChannelVolume(0,0x8000,0x8000)
oslSetChannelVolume(0,0x4000,0x4000)
oslSetChannelVolume(0,0x0000,0x0000)

mais ça ne marche pas (je n'ai aucune différence de volume)

est ce qu'il y a un ordre dans lequel appeler ces fonctions ?
je m'explique:
Si je fais un appel à oslSetChannelVolume(0,0x4000,0x4000), est ce que tout son joué sur le canal 0 après cet appel sera avec un volume 0x4000, ou est ce qu'il faut forcément qu'un son soit en lecture dans le canal 0 avant d'appeler oslSetChannelVolume(0,0x4000,0x4000) ?

Brunni
25/09/2006, 16h08
Je ne sais plus (et je n'ai pas le code sous les yeux en ce moment), mais c'est possible, il faudrait tester ^^

galouboy
25/09/2006, 23h38
Merci de ton aide, j'ai finalement fait quelques test et trouvé la solution.

En fait, oslSetChannelVolume ne s'applique que si un son est en train d'être lu dans le canal.
Dans mon cas, ça ne marchait pas car j'appelais d'abord oslSetChannelVolume puis je lançais la lecture du son (en pensant que celui-ci serait joué avec le volume paramétré précédemment)

En fait, pour modifier le volume d'un son, il faut d'abord lire le son:
oslPlaySound(son, channel);
puis de suite après, faire:
oslSetChannelVolume(channel,left_volume, right_volume);

Petite astuce: pour ceux qui voudraient, comme moi, pouvoir gérer le volume de leur son et musique via un menu d'option, et que ce volume soit conservé tout au long du jeu, il suffit d'utiliser la petite fonction suivante à la place de oslPlaySound


void playSoundWithVolume(OSL_SOUND *My_Sound, int channel, int volumeLeft, int volumeRight)
{
oslPlaySound(My_Sound, channel);
oslSetChannelVolume(channel, volumeLeft, volumeRight);
}


volumeLeft et volumeRight sont paramétrés dans le menu d'option (sachant que ce sont des valeurs hexadécimales avec un maximum à 0x8000)

Voila, en esperant que ça puisse aider ou éviter à quelqu'un de bloquer sur ce problème ^^

Brunni
26/09/2006, 09h11
Ha ben voilà ^^ En fait je libère les voix non utilisées (une fois que le son est terminé d'être joué) et lorsque je les recrée, je réinitialise toute une série de paramètres... dont le volume.
Remarque ce n'est pas vraiment logique, c'est d'ailleurs pour ça que cette fonction n'est pas documentée à la base (sauf erreur) ;)
Enfin, merci, et ce sera peut être corrigé à l'avenir (je regarderai mon code) ^^
Si jamais le code source est disponible si tu as besoin d'informations supplémentaires:
http://forums.ps2dev.org/viewtopic.php?t=4990&start=121

galouboy
26/09/2006, 11h30
Super, merci pour le code source :D
j'avoue que ça me manquait un peu pour ce style de cas (lorsque j'ai butté sur ce problème, j'ai voulu chercher dans les sources voir comment la fonction marchait, mais comme j'avais pas les sources...:( )

En tous cas, felicitation pour cette petite librairie PSP bien pratique qui facilite grandement la création de jeu sur la PSP.
A quand le rajout des fonctions pour la gestion de la 3D ? c'est prévu ? ce serait génial :w00t: