Reglage du volume sonore avec waveOutSetVolume [Résolu]

cs_vincent303 25 Messages postés mercredi 28 avril 2010Date d'inscription 18 mai 2012 Dernière intervention - 25 mai 2010 à 14:57 - Dernière réponse : cs_vincent303 25 Messages postés mercredi 28 avril 2010Date d'inscription 18 mai 2012 Dernière intervention
- 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.
Afficher la suite 

6 réponses

Répondre au sujet
cs_vincent303 25 Messages postés mercredi 28 avril 2010Date d'inscription 18 mai 2012 Dernière intervention - 26 mai 2010 à 18:31
+3
Utile
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.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_vincent303
racpp 1910 Messages postés vendredi 18 juin 2004Date d'inscription 14 novembre 2014 Dernière intervention - 25 mai 2010 à 17:37
0
Utile
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);
Commenter la réponse de racpp
cs_vincent303 25 Messages postés mercredi 28 avril 2010Date d'inscription 18 mai 2012 Dernière intervention - 25 mai 2010 à 18:43
0
Utile
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
Commenter la réponse de cs_vincent303
racpp 1910 Messages postés vendredi 18 juin 2004Date d'inscription 14 novembre 2014 Dernière intervention - 25 mai 2010 à 21:01
0
Utile
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)); 
Commenter la réponse de racpp
cs_vincent303 25 Messages postés mercredi 28 avril 2010Date d'inscription 18 mai 2012 Dernière intervention - 26 mai 2010 à 11:07
0
Utile
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).
Commenter la réponse de cs_vincent303
racpp 1910 Messages postés vendredi 18 juin 2004Date d'inscription 14 novembre 2014 Dernière intervention - 26 mai 2010 à 18:12
0
Utile
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.
Commenter la réponse de racpp

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.