IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Contribuez Discussion :

Réglage général du volume audio.


Sujet :

Contribuez

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    486
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 486
    Points : 875
    Points
    875
    Par défaut Réglage général du volume audio.
    A la demande de Fred2355,
    voici un projet qui permet d'ajuster le volume audio global d'un PC.

    Le projet est compatible WD17+,
    IL DOIT ETRE COMPILE OBLIGATOIREMENT EN MODE 64-BIT

    Il utilise GVolume.dll, dont le code source est écrit en C++ avec Visual Studio 2019.
    (le source de la DLL est disponible sur demande).

    L'API ultra simple, utilise 2 procédures

    PROCEDURE GetGlobalVolume(nVolume is int)
    et
    PROCEDURE SetGlobalVolume(nVolume is int)

    Les valeurs sont exprimées en pourcentage (0 à 100)
    0 = pas de son, 100 = volume maximum.
    Fichiers attachés Fichiers attachés

  2. #2
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2012
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2012
    Messages : 22
    Points : 38
    Points
    38
    Par défaut
    Bonjour

    Merci pour ce partage. Je suppose que les fonctions font des appels api windows.
    Plutôt que d'avoir une dll, est-ce possible d'avoir le code Windev correspondant ?

    Merci et bonne continuation

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    486
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 486
    Points : 875
    Points
    875
    Par défaut
    L'avantage d'une DLL, c'est que çà fonctionne avec TOUS les langages et pas uniquement WinDev.

    Pour votre information, voici le code C++

    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    const int VolumeGet = 0;
    const int VolumeSet = 1;
     
    const int CLSCTX_INPROC_SERVER = 1;
     
    HRESULT ChangeVolume(OUT long &nVolume, IN long SetGet) {
     
        nVolume = min(max(nVolume, 0), 100);
     
        float rVolume = nVolume / 100.0f;
     
        HRESULT hr = 0;
     
        hr = CoInitialize(NULL);
     
        GUID lpMMDeviceEnumerator;
        // MMDeviceEnumerator
        hr = CLSIDFromString(L"{BCDE0395-E52F-467C-8E3D-C4579291692E}", &lpMMDeviceEnumerator);
     
        GUID lpIMMDeviceEnumerator;
        hr = CLSIDFromString(L"{A95664D2-9614-4F35-A746-DE8DB63617E6}", &lpIMMDeviceEnumerator);
     
        IMMDeviceEnumerator *denum = NULL;
        hr = CoCreateInstance(lpMMDeviceEnumerator, NULL, CLSCTX_INPROC_SERVER, lpIMMDeviceEnumerator, (LPVOID *)&denum);
     
        IMMDevice *defaultDevice = NULL;
        hr = denum->GetDefaultAudioEndpoint(eRender, eConsole, &defaultDevice);
        denum->Release();
        denum = NULL;
     
        GUID lpIAudioEndpointVolume;
        hr = CLSIDFromString(L"{5CDF2C82-841E-4546-9722-0CF74078229A}", &lpIAudioEndpointVolume);
     
        IAudioEndpointVolume *epv = NULL;
        hr = defaultDevice->Activate(lpIAudioEndpointVolume, CLSCTX_INPROC_SERVER, NULL, (LPVOID *)&epv);
        defaultDevice->Release();
        defaultDevice = NULL;
     
        if (SetGet == VolumeGet) {
    //zTrace(L"VolumeGet");
            float rV = 0.0f;
            hr = epv->GetMasterVolumeLevelScalar(&rV);
            nVolume =  (long)(rV * 100);
    //zTrace(STRL(nVolume));
        } else {
    //zTrace(L"VolumeSet");
            hr = epv->SetMasterVolumeLevelScalar(rVolume, NULL);
        }
     
        epv->Release();
     
        CoUninitialize();
     
        return hr;
    }

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2012
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2012
    Messages : 22
    Points : 38
    Points
    38
    Par défaut
    Merci pour le code.

    Je fais mes tests en WD23 qui permet d'ajouter nativement du code c# : https://doc.pcsoft.fr/fr-FR/?2012008&name=typing_code

    N'étant pas familier avec ce langage, comment faire fonctionner le code de la dll directement dans une procédure globale WD ? (ça devrait créer une autre dll dans le projet non ?)

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    486
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 486
    Points : 875
    Points
    875
    Par défaut
    La problématique c'est de pouvoir traduire mmdeviceapi.h pour l'utiliser dans WinDev.

    En outre le code C# et C++ ne sont pas identiques et l'implantation de C# dans WinDev est très limitée.
    La manipulation des pointeurs n'est pas non plus le point fort du code managé.

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2012
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2012
    Messages : 22
    Points : 38
    Points
    38
    Par défaut
    En effet, ça ne semble pas gagné.

    C'est une appli indépendante dans laquelle j'ai n'ai pas de contrainte d'utiliser GVolume version 32/64 bits. Zéro problème, j'ai atteint mon objectif.
    J'aurai juste aimé amener cette fonctionnalité dans Betula qui, lui, doit avoir le moins de dépendance possible.

    Merci et bonne continuation !

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    486
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 486
    Points : 875
    Points
    875
    Par défaut
    Betula, je ne sais pas ce que c'est, mais en matière de dépendances, ce n'est pas le point fort de WinDev.

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2012
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2012
    Messages : 22
    Points : 38
    Points
    38
    Par défaut
    Betula est un framework open-source : https://wlplus.org/fr/betula/start/
    L'idée principale est de faciliter l'utilisation de la POO et de centraliser le plus de fonctions (manquantes) du WLangage.

Discussions similaires

  1. Réponses: 4
    Dernier message: 20/05/2013, 17h51
  2. [WD17] Définir a une jauge de regler le volume audio
    Par magicien33 dans le forum WinDev
    Réponses: 1
    Dernier message: 05/02/2013, 07h50
  3. Volume audio C#
    Par Tchweizz dans le forum C#
    Réponses: 1
    Dernier message: 31/07/2012, 17h49
  4. Problème d'initialisation du volume audio
    Par BnA dans le forum Flash
    Réponses: 1
    Dernier message: 17/04/2007, 10h33
  5. []Volume audio
    Par fourgeaud dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 05/09/2005, 21h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo