cs_vincent303
Messages postés24Date d'inscriptionmercredi 28 avril 2010StatutMembreDernière intervention18 mai 2012
-
25 mai 2010 à 14:57
cs_vincent303
Messages postés24Date d'inscriptionmercredi 28 avril 2010StatutMembreDernière intervention18 mai 2012
-
26 mai 2010 à 18:31
Bonjour bonsoir,
Voila j'ai un petit souci et je lutte vraiment dessus.
je possède un entier compris entre 0 et 99 (int vol)
et je voudrais modifié le volume de mon son en fonction de vol.
En gros faire :
waveOutSetVolume(hWaveOut,vol);
Ce qui est bien entendu impossible puisque sa prend pas un entier^^
Donc je sais pas comment faire sachant que je ne souhaite pas forcément utilisé toute la bande sonore : une solution comme faire 0xH+vol+FF peut être envisagé (de ce faite on monte jusqu'à 0xH99FF) seulement j'y arrive pas.
cs_vincent303
Messages postés24Date d'inscriptionmercredi 28 avril 2010StatutMembreDernière intervention18 mai 2012 26 mai 2010 à 18:31
ah j'avais pas vu ton message pour le mono. Sa a marché.
Voici le code réusltant:
void classe::setVolume(int volume)
{
WORD wPas=65535/100;
DWORD vol=MAKEWPARAM(volume*wPas,volume*wPas);
waveOutSetVolume(hWaveOut,vol);
}
avec volume varaint de 0 à 100.
racpp
Messages postés1909Date d'inscriptionvendredi 18 juin 2004StatutModérateurDernière intervention14 novembre 201417 25 mai 2010 à 17:37
Salut,
waveOutSetVolume() prend un DWORD dont les 16 bits de poids fort correspondent au volume du canal droit et les 16 bits de poids faible à celui du canal gauche. La valeur maximale pour chaque canal étant 65535 tu peux utiliser le centième de cette valeur pour incrémenter/décrémenter le volume exprimé en pourcentage.
Le pas sera donc 65535/100=655. Tu peux utiliser un float pour plus de précision. Ensuite, on utilise une macro du genre MAKEWPARAM() pour former le DWORD à partir des valeurs 16 bits. Le code ressemblerait à ceci:
WORD wVolumegauche=50;//0-99
WORD wVolumedroite=50;//0-99
WORD wPas=65535/100;
DWORD vol=MAKEWPARAM(wVolumegauche*wPas,wVolumedroite*wPas);
waveOutSetVolume(hWaveOut,vol);
cs_vincent303
Messages postés24Date d'inscriptionmercredi 28 avril 2010StatutMembreDernière intervention18 mai 2012 25 mai 2010 à 18:43
J'ai essayé différent truc et j'obtiens toujours un signal avec le même volume.
Si j'ai bien compris (se qu'est pas le cas sinon sa marcherais^^). J'ai fais sa:
WORD wPas=65535/100;
DWORD vol=MAKEWPARAM(wVolumegauche*(volume*wPas),wVolumedroite*(volume*wPas));
au quelle volume est compris entre 0 et 100
pour information j'ouvre mon canal audio au mono et non en stéréo
racpp
Messages postés1909Date d'inscriptionvendredi 18 juin 2004StatutModérateurDernière intervention14 novembre 201417 25 mai 2010 à 21:01
Si tu veux agir sur le volume général du PC met NULL en premier paramètre de waveOutSetVolume().
Pour avoir la valeur courante du volume utilise waveOutGetVolume(). En mono tu peux faire:
cs_vincent303
Messages postés24Date d'inscriptionmercredi 28 avril 2010StatutMembreDernière intervention18 mai 2012 26 mai 2010 à 11:07
Merci mais je cherche pas a agir sur la volume général et je ne cherche pas non plus a savoir la valeur actuelle.
C'est principalement que j'ai une méthode qui me récupère un chiffre entre 0 et 100 et je voudrais à partir de se chiffre changer la volume de mon canal (hWaveOut).
racpp
Messages postés1909Date d'inscriptionvendredi 18 juin 2004StatutModérateurDernière intervention14 novembre 201417 26 mai 2010 à 18:12
En agissant sur le volume général tu testeras les bonnes valeurs à passer à waveOutSetVolume(). waveOutGetVolume() te permettra de vérifier si le changement de volume a été pris en compte ou non. Il faudra aussi t'assurer que ton périphérique audio supporte les valeurs de volumes voulues. Il y a une fonction pour ça. Bref, sans voir le code il est difficile de deviner la source du problème.