Reglage du volume sonore avec waveOutSetVolume [Résolu]

Signaler
Messages postés
24
Date d'inscription
mercredi 28 avril 2010
Statut
Membre
Dernière intervention
18 mai 2012
-
cs_vincent303
Messages postés
24
Date d'inscription
mercredi 28 avril 2010
Statut
Membre
Dernière intervention
18 mai 2012
-
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.

6 réponses

Messages postés
24
Date d'inscription
mercredi 28 avril 2010
Statut
Membre
Dernière intervention
18 mai 2012

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.

Merci beaucoup racpp.
Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
10
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);
Messages postés
24
Date d'inscription
mercredi 28 avril 2010
Statut
Membre
Dernière intervention
18 mai 2012

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
Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
10
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:
waveOutSetVolume(NULL,MAKEWPARAM(vol*wPas,vol*wPas)); 
Messages postés
24
Date d'inscription
mercredi 28 avril 2010
Statut
Membre
Dernière intervention
18 mai 2012

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).
Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
10
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.