none
winmm.dll et les haut-parleurs RRS feed

  • Discussion générale

  • Bonjour

    Cela fait un mois que je cherche comment régler le volume de mes haut-parleurs avec Winmm.dll et les fonctions OutGetVolume et OutSetVolume.

    Comment indiquer dans ces fonctions qu'il s'agit de mes haut-parleurs car je n'ai pas d'erreurs signalées mais aucune action sur ces derniers.

    Claude Azoulai

    • Type modifié Ciprian Duduiala mercredi 19 octobre 2011 16:06 pas de solution acceptée
    jeudi 13 octobre 2011 14:14

Toutes les réponses

  • Bonjour,

    Pourriez vous nous donnés le code que vous avez fais ?

     

    A bientôt

     


    Cordialement,
    Xavier TALOUR
    Alias Troxsa SendMail
    Voir le profil de Xavier TALOUR sur LinkedIn
    jeudi 13 octobre 2011 14:40
    Auteur de réponse
  • Merci  Xavier de me répondre

    Dans une Form j'ai un VScrollBar  nommé VS1 qui fourni une valeur comprise entre 0 et 10
    Un bouton BtLire et un bouton BtEcrire
    Voici ce petit programme :
    ---------------------------------------------------------------------
    Imports System.Collections.Generic
    Imports System.ComponentModel
    Imports System.Data
    Imports System.Drawing
    Imports System.Text
    Imports System.Windows.Forms
    Imports System.Runtime.InteropServices

    Public Class Form1
        Public VolNiv As Integer
        Public ValVol As ULong

        Public Declare Function waveOutGetVolume Lib "winmm.dll" (ByVal hwo As IntPtr, ByVal dwVolume As UInteger) As Integer
        Public Declare Function waveOutSetVolume Lib "winmm.dll" (ByVal hwo As IntPtr, ByVal dwVolume As UInteger) As Integer


        Private Sub BtLire_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtLire.Click
            waveOutGetVolume(IntPtr.Zero, ValVol)
            Dim CalcVol As UShort = CUShort(ValVol And &HFFFF)
            ' Get the volume on a scale of 1 to 10 (to fit the trackbar)
            VS1.Value = CalcVol \ (UShort.MaxValue \ 10)
        End Sub

        Private Sub BtEcrire_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtEcrire.Click
            ' Calculate the volume that's being set
            Dim NewVolume As Integer = ((UShort.MaxValue \ 10) * VS1.Value)
            ' Set the same volume for both the left and the right channels
            Dim NewVolumeAllChannels As UInteger = ((CUInt(NewVolume) And &HFFFF) Or (CUInt(NewVolume) << 16))
            ' Set the volume
            waveOutSetVolume(IntPtr.Zero, NewVolumeAllChannels)
        End Sub
    End Class
    ---------------------------------------------------------------------


    Claude Azoulai
    jeudi 13 octobre 2011 16:34
  • Bonjour,

    Donc normalement votre code est sensé prendre le contrôle du volume avec ce code ?
    (pour moi, cela n'a pas fonctionner aussi)

    J'ai trouvé de la documentation sur pinvoke.net il renvois sur le site microsoft je n'ai pas encore essayer les exemples qui ce trouve sur le site je ne pourrais pas vous dire, pour l'instant, ce qui fonctionne ou pas.

     

    A bientot

     

     


    Cordialement,
    Xavier TALOUR
    Alias Troxsa SendMail
    Voir le profil de Xavier TALOUR sur LinkedIn
    vendredi 14 octobre 2011 10:44
    Auteur de réponse
  • Bonjour,

    C'est sur quel OS ? D'après un commentaire de http://stackoverflow.com/questions/6097666/adjusting-windows-speaker-volume-vb-net, cela ne fonctionne pas pour Vista et plus et il faudrait utiliser une autre API (IAudioEndpointVolume).

    En cherchant IAudioEndPoint dans Google on trouve assez facilement du code pour déclarer cette interface en C# (par exemple http://context-macosx.googlecode.com/svn/trunk/Scratch/SensorDetection/SensorDetection/EndpointVolume.cs).

    A voir si le plus rapide est de le porter vers VB ou peut-être de compiler ce code avec C# Express pour vérifier avant que cela fonctionne effectivement (puis soit de porter effectivement le code en VB, soit d'utiliser le code C# sous forme d'une DLL).


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".
    vendredi 14 octobre 2011 11:08
    Modérateur
  • Je vous remercie à tous les deux

    Je suis allé voir ce que vous me proposiez et même utilisé un traducteur en ligne pour convertir le programme C# en VB.NET.

    Primo, étant donné mon peu d'expérience en VB.Net, je ne vois pas comment l'utiliser.

    Secondo, ce programme est deux fois plus long que mon programme pour seulement exécuter ce qui à mon gout aurait du être de quelques lignes pour seulement régler le volume de mes haut-parleurs.

    Je renonce donc et vous remercie encore.

    Claude Azoulai

     


    Claude Azoulai
    samedi 15 octobre 2011 08:25