|
PROFESSIONAL NEWSGROUPS WINDEV, WEBDEV and WINDEV Mobile |
| | | | | |
Pb audio: Comment régler le volume sonore général? |
Started by nico_rob1, Apr., 12 2006 10:11 AM - 13 replies |
| |
| | | |
|
| |
Posted on April, 12 2006 - 10:11 AM |
Bonjour,
j'ai un petit soucis avec Windev. Je souhaite effectuer un réglage du volume général et gérer le passage en muet telle la popup Windows qui apparrait quand on clic sur le haut parleur de la barre des tâches.
Voila un code trouvé sur le forum dont j'essaie de m'inspirer:
* vol est un entier long = volume que tu veux * appeldll32("winmm.dll","auxSetVolume",0,vol) * (sur mon poste... à vérifier) * // 0 - son * // 1 - midi * // 2 - cd audio * // 3 - entrée ligne * // 4 - micro * // 5 - Volume général * // 6 - haut-parleur pc
En fait la variable vol doit être un entier long SANS SIGNE, car PoidsFort(vol) correspond au volume de droite, et PoidsFaible(vol) à celui de gauche (ces 2 volumes "au détail" sont donc des entiers SANS SIGNE)
Par ailleurs, la fonction inverse (auxGetVolume), me permet de prépositionner mes potentiomètres, dans leur code d'initialisation.
post de: Jacinto LOPEZ ______________________________________________ ______________________________________________
Actuellement, j'ai un potentiomètre, une case à cocher et une jauge pour gérer tout çà. Leur traitememnt fonctionne. Le seul petit hic, c'est que j'ai beau les bouger dans tous les sens , rien ne se passe. cela n'agit en aucun cas sur le volume général du PC.
Pour cela, j'utilise < MoiMême=AppelDLL32("winmm.dll","auxGetVolume",5,"") > à l'initialisation du potentiomètre pour récupérer le niveau sonore actuel du volume général.
Voici le code de la case à cocher: ____
SI MoiMême[1] ALORS volume_précédent = Abs(POTAR_VOLUME) AppelDLL32("winmm.dll","auxSetVolume",5,0) POTAR_VOLUME = 0 JVOLUME=0 SINON POTAR_VOLUME = volume_précédent * -1 AppelDLL32("winmm.dll","auxSetVolume",5,volume_précédent) JVOLUME = volume_précédent FIN ____
Comment puis-je faire pour que mon application influe sur le volume général du PC?
Pour ceux qui sont intéressés par les applications multimédia, vous pouvez consulter http://www.zapsolution.com/windev/fr/PAGE_wTunes.htm . Il y a une application très bien faites en télécharchement libre. Mais manque de chance pour moi: tout n'a pas été entièrement développé avec Windev.
Merci d'avance pour vos renseignements.
Nicolas |
| |
| |
| | | |
|
| | |
| |
Posted on April, 12 2006 - 11:03 AM |
Nicolas ROBIN
Bonjour,
j'ai un petit soucis avec Windev. Je souhaite effectuer un réglage du volume général et gérer le passage en muet telle la popup Windows qui apparrait quand on clic sur le haut parleur de la barre des tâches.
Voila un code trouvé sur le forum dont j'essaie de m'inspirer:
* vol est un entier long = volume que tu veux * appeldll32("winmm.dll","auxSetVolume",0,vol) * (sur mon poste... à vérifier) * // 0 - son * // 1 - midi * // 2 - cd audio * // 3 - entrée ligne * // 4 - micro * // 5 - Volume général * // 6 - haut-parleur pc
Bonjour, Est tu sûr que sur ton PC, le canal 5 est le volume général ? Il faut vérifier avec la fonction "auxGetDevCaps". @+ Vincent Barré |
| |
| |
| | | |
|
| | |
| |
Posted on April, 12 2006 - 11:24 AM |
//PROCEDURE RegleSon(xxVolume) //// le paramètre xxVolume est un entier court et doit être comprise entre 1 et 100 // //Res est un entier long //SonStereo est composé de // CoteGauche est un entier sans signe // CoteDroit est un entier sans signe //FIN //SonStereo.CoteGauche = 65535*VOLUME/100 //SonStereo.CoteDroit = SonStereo.CoteGauche //Transfert(&Res,&SonStereo,4) //MCIVolume("WAV",Res) |
| |
| |
| | | |
|
| | |
| |
Posted on April, 12 2006 - 12:02 PM |
Nicolas--
Pour contrôler le volume général, vous devez utiliser l'API "MixerOpen". et utiliser les bonnes déclarations pour les structures (voir ci-dessous).
Ce qui à première vu pourrait sembler à un problème simple, est en réalité assez complexe à programmer car le Mixer est une ressource partagée.
En outre pour ce genre de chose il est préférable de passer par une DLL car il n'est pas facile de faire de la programmation bas niveau avec un L5G.
TYPE MIXERLINE cbStruct AS DWORD 'size of MIXERLINE structure dwDestination AS DWORD 'zero based destination index dwSource AS DWORD 'zero based source index (if source) dwLineID AS DWORD 'unique line id for mixer device fdwLine AS DWORD 'state/information about line dwUser AS DWORD 'driver specific information dwComponentType AS DWORD 'component type line connects to cChannels AS DWORD 'number of channels line supports cConnections AS DWORD 'number of connections (possible) cControls AS DWORD 'number of controls at this line szShortName AS ASCIIZ * %MIXER_SHORT_NAME_CHARS szName AS ASCIIZ * %MIXER_LONG_NAME_CHARS 'lpTarget AS Target ' Patrice dwType AS DWORD ' Patrice dwDeviceID AS DWORD ' Patrice wMid AS INTEGER ' Patrice wPid AS INTEGER ' Patrice vDriverVersion AS DWORD ' Patrice szPname As ASCIIZ * %MAXPNAMELEN ' Patrice END TYPE
TYPE MIXERCONTROL cbStruct AS DWORD 'size in Byte of MIXERCONTROL dwControlID AS DWORD 'unique control id for mixer device dwControlType AS DWORD 'MIXERCONTROL_CONTROLTYPE_xxx fdwControl AS DWORD 'MIXERCONTROL_CONTROLF_xxx cMultipleItems AS DWORD 'if MIXERCONTROL_CONTROLF_MULTIPLE set szShortName AS ASCIIZ * %MIXER_SHORT_NAME_CHARS szName AS ASCIIZ * %MIXER_LONG_NAME_CHARS 'Bounds AS pbBounds 'Metrics AS pbMetrics lMinimum AS LONG ' Patrice Minimum value lMaximum AS LONG ' Patrice Maximum value reserved(10) AS LONG ' Patrice reserved structure space END TYPE
TYPE MIXERLINECONTROLS cbStruct AS DWORD 'size in Byte of MIXERLINECONTROLS dwLineID AS DWORD 'line id (from MIXERLINE.dwLineID) 'item AS DWORD 'dwControlID or dwControlType dwControl AS DWORD 'Patrice dwControlID or dwControlType cControls AS DWORD 'count of controls pmxctrl points to cbmxctrl AS DWORD 'size in Byte of _one_ MIXERCONTROL pamxctrl AS MIXERCONTROL PTR 'pointer to first MIXERCONTROL array END TYPE
TYPE MIXERCONTROLDETAILS cbStruct AS DWORD ' size in Byte of MIXERCONTROLDETAILS dwControlID AS DWORD ' control id to get/set details on cChannels AS DWORD ' number of channels in paDetails array item AS DWORD ' hwndOwner or cMultipleItems cbDetails AS DWORD ' size of _one_ details_XX struct paDetails AS LONG ' pointer to array of details_XX structs END TYPE
TYPE MIXERCONTROLDETAILS_UNSIGNED dwValue AS DWORD END TYPE |
| |
| |
| | | |
|
| | |
| |
Posted on April, 12 2006 - 12:03 PM |
Nicolas--
Concernant les ressource partagées, vous pouvez voir ce qe je veux dire en ouvrant en même temps wtp.exe et le mixer de Windows.
Modifiez le volume sonore général dans l'une des deux applications et regardez ce qui se passe dans l'autre, les deux applications sont parfaitement synchrones. |
| |
| |
| | | |
|
| | |
| |
Posted on April, 12 2006 - 12:34 PM |
merci pour tous ces renseignements. Je vais me plonger là-dedans mais çà me rassure guerre. Moi qui pensait que ce serait tout simple. Parfois WinDev ne peut pas toujours tout faire à notre place non plus. :o)
Concernant les resssources partagées, j'avais effectivement remarqué. C'est comme ceci que je vérifiait que mon programme fonctionnait ou non (dans le cas présent, c'est plutôt "ou non").
PS: la fonction MCIVolume ne gère pas le volume général pour ceux qui l'auraient cru |
| |
| |
| | | |
|
| | |
| |
Posted on April, 12 2006 - 12:34 PM |
Justement, je ne suis pas sûr du tout de cela. Comment dois-je utiliser la fonction "auxGetDevCaps" pour vérifier à quoi coresspond chacun des canaux? |
| |
| |
| | | |
|
| | |
| |
Posted on April, 12 2006 - 12:54 PM |
Bonjour, ce type de déclaration, çà ne se fait pas dansWinDev n'est-ce pas? çà ressemble fortement à du code sous visual basic. Mais je ne dispose pas de Visual basic. Voici les outils de programmation dont je dispose: WinDev 10 et éventuellement le BlocNote :o) Fracnhement, je suis un peu perdu. Vous me fournissez plein d'informations (et je vous remercie grandement) mais je ne comprends pas grand chose à tout ceci. Je crois que je vais avoir besoin de quelques explications supplémentaires. |
| |
| |
| | | |
|
| | |
| |
Posted on April, 12 2006 - 1:41 PM |
Les commandes MCI sont très limitées. Elles ne permettent pas de faire de la programmation multimédia bas niveau.
Concernant les structures vous pouvez parfaitement les utiliser avec WinDev mais vous devez utiliser des entiers de type avancés, comme en C ou en PowerBASIC.
VB est limité, il ne permet pas d'utiliser des DWORD ni des pointeurs, ni des chaines ASCIIZ.
WORD = entier non signé sur 2 octets DWORD = entier non signé sur 4 octets LONG = entier sur 4 octets INT = entier sur 2 octets BYTE = entier non signé sur 1 octet |
| |
| |
| | | |
|
| | |
| |
Posted on April, 12 2006 - 3:28 PM |
Nicolas--
Encore un chose, vous êtes étudiant, n'est-ce pas ?
Alors, je vous conseille de mettre la main sur l'ouvrage : "Programmer sous Windows" de Charles Petzold, édité par "Microsoft PRESS". lequel explique les principes de la programmation bas niveau de type SDK.
çà vous aidera à comprendre ce qui se passe sous le capot. |
| |
| |
| | | |
|
| | |
| |
Posted on April, 12 2006 - 3:45 PM |
Voici la solution la plus simple :
il te faut une variable globale déclarée comme ceci :
Son_Vol est un entier ) 65535
et fixer les limites de ton ptentiomètre comme ceci : "Valeur Initiale" = 65536 "Valeur Minimale" = 0 "Valeur Maximale" = 65535
Dans le code "initialisation" de ton potentiomètre :
MoiMême = MCIVolume("WAV",Son_Vol) * 1 Son_Vol = Abs(MoiMême)
Dans le code "A chaque modification..." :
Son_Vol = Abs(MoiMême) MCIVolume("WAV",Abs(MoiMême))
Si tu veux en savoir plus, télécharge sur le site www.radionet.fr le logiciel Radio Net Gold qui gère intensivement ce type de paramètre
Cette routine agit au niveau du volume général sonore...
Cordialement,
Alain Duglas |
| |
| |
| | | |
|
| | |
| |
Posted on April, 12 2006 - 5:06 PM |
Alain--
La question de Nicolas est :
Je souhaite effectuer un réglage du VOLUME GENERAL et gérer le passage en muet telle la popup Windows qui apparaît quand on clic sur le HAUT PARLEUR DE LA BARRE des tâches.
Le code que vous proposez permet de modifier le volume de sortie WAV, mais pas le volume général ce qui n'est pas la même chose.
Je persiste à dire que le seul moyen de modifier le volume général est de passer par l'API "openMixer".
Quand j'aurai le temps je ferai un exemple WinDev. |
| |
| |
| | | |
|
| | |
| |
Posted on April, 12 2006 - 5:08 PM |
Alain--
RADIO-NET, tien tien, mais c'est du code WD9 .
Bravo ! |
| |
| |
| | | |
|
| | |
| |
Posted on April, 13 2006 - 5:58 PM |
Bonjour, Voici des infos sur auxGetDevCaps :
AUXCAPS est une structure wMid est un entier sur 2 octets wPid est un entier sur 2 octets vDriverVersion est entier szPname est une chaîne asciiz sur 32 wTechnology est un entier sur 2 octets wReserved1 est un entier sur 2 octets dwSupport est un entier Fin // wMid : Identifiant du fabricant. // wPid : Identifiant du produit. // vDriverVersion : Numéro de version du pilote. L'octet de poids fort contient le numéro de version majeur et l'octet de poids faible, le numéro de version mineur. // szPname : Chaîne à terminateur nul contenant le nom du dispositif. // wTechnology : Un des sémaphores suivant : // AUXCAPS_AUXIN = 0x2Dispositif audio d'entrée (line input). // AUXCAPS_CDAUDIO = 0x1Dispositif audio CD. // AUXCAPS_MASTER = 0x8Dispositif audio Master. // AUXCAPS_MIC = 0x4Dispositif audio microphone. // AUXCAPS_MIDI = 0x40Dispositif audio MIDI. // AUXCAPS_PCSPEAKER = 0x10Dispositif audio PC Speaker. // AUXCAPS_WAVE = 0x20Dispositif audio au format Wave. //wReserved1 : Réservé, doit être à zéro. //dwSupport : Une combinaison de zéro ou l'un des sémaphores suivants : // AUXCAPS_LRVOLUME = 2Supporte le contrôle du volume avec séparation des canaux gauche et droit. // AUXCAPS_VOLUME = 1Supporte le contrôle du volume.
ac est un AUXCAPS numdevs est entier uSize est entier sur 2 octets i, retval sont des entiers uSize = Dimension(ac) numdevs = AppelDLL32("winmm", "auxGetNumDevs") Pour i = 0 à (numdevs - 1) retval = AppelDLL32("winmm","auxGetDevCapsA", i, &ac, uSize) fin
@+ Vincent Barré |
| |
| |
| | | |
|
| | | | |
| | |
| | |
| |
|
|
|