begin process at 2010 02 10 02:03:30
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Multimedia

 > REGLER LE VOLUME SONORE

REGLER LE VOLUME SONORE


 Information sur la source

Note :
5,5 / 10 - par 2 personnes
5,50 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Multimedia Niveau :Initié Date de création :30/07/2002 Date de mise à jour :30/07/2002 10:08:08 Vu :6 713

Auteur : Tilois

Ecrire un message privé
Site perso
Commentaire sur cette source (3)
Ajouter un commentaire et/ou une note

 Description

Permet simplement de régler le volume sonore de windows

Ti£oi$

Source

  • Const MMSYSERR_NOERROR = 0
  • Const MAXPNAMELEN = 32
  • Const MIXER_LONG_NAME_CHARS = 64
  • Const MIXER_SHORT_NAME_CHARS = 16
  • Const MIXER_GETLINEINFOF_COMPONENTTYPE = &H3&
  • Const MIXER_GETLINECONTROLSF_ONEBYTYPE = &H2&
  • Const MIXER_SETCONTROLDETAILSF_VALUE = &H0&
  • Const MIXERLINE_COMPONENTTYPE_DST_FIRST = &H0&
  • Const MIXERLINE_COMPONENTTYPE_DST_SPEAKERS = &H4
  • Const MIXERCONTROL_CONTROLTYPE_VOLUME = &H50030001
  • Private Declare Function mixerOpen Lib "winmm.dll" (phmx As Long, _
  • ByVal uMxId As Long, ByVal dwCallback As Long, ByVal dwInstance As Long, _
  • ByVal fdwOpen As Long) As Long
  • Private Declare Function mixerGetLineInfo Lib "winmm.dll" Alias _
  • "mixerGetLineInfoA" (ByVal hmxobj As Long, pmxl As MIXERLINE, _
  • ByVal fdwInfo As Long) As Long
  • Private Declare Function mixerGetLineControls Lib "winmm.dll" Alias _
  • "mixerGetLineControlsA" (ByVal hmxobj As Long, pmxlc As MIXERLINECONTROLS, _
  • ByVal fdwControls As Long) As Long
  • Private Declare Function mixerSetControlDetails Lib "winmm.dll" (ByVal hmxobj _
  • As Long, pmxcd As MIXERCONTROLDETAILS, ByVal fdwDetails As Long) As Long
  • Private Declare Function mixerClose Lib "winmm.dll" (ByVal hmx As Long) As Long
  • Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" _
  • (Destination As Any, Source As Any, ByVal Length As Long)
  • Private Declare Function GlobalAlloc Lib "kernel32" (ByVal wFlags As Long, _
  • ByVal dwBytes As Long) As Long
  • Private Declare Function GlobalLock Lib "kernel32" (ByVal hmem As Long) As Long
  • Private Declare Function GlobalFree Lib "kernel32" (ByVal hmem As Long) As Long
  • Private Type MIXERCONTROL
  • cbStruct As Long
  • dwControlID As Long
  • dwControlType As Long
  • fdwControl As Long
  • cMultipleItems As Long
  • szShortName As String * MIXER_SHORT_NAME_CHARS
  • szName As String * MIXER_LONG_NAME_CHARS
  • lMinimum As Long
  • lMaximum As Long
  • reserved(10) As Long
  • End Type
  • Private Type MIXERCONTROLDETAILS
  • cbStruct As Long
  • dwControlID As Long
  • cChannels As Long
  • item As Long
  • cbDetails As Long
  • paDetails As Long
  • End Type
  • Private Type MIXERCONTROLDETAILS_UNSIGNED
  • dwValue As Long
  • End Type
  • Private Type MIXERLINE
  • cbStruct As Long
  • dwDestination As Long
  • dwSource As Long
  • dwLineID As Long
  • fdwLine As Long
  • dwUser As Long
  • dwComponentType As Long
  • cChannels As Long
  • cConnections As Long
  • cControls As Long
  • szShortName As String * MIXER_SHORT_NAME_CHARS
  • szName As String * MIXER_LONG_NAME_CHARS
  • dwType As Long
  • dwDeviceID As Long
  • wMid As Integer
  • wPid As Integer
  • vDriverVersion As Long
  • szPname As String * MAXPNAMELEN
  • End Type
  • Private Type MIXERLINECONTROLS
  • cbStruct As Long
  • dwLineID As Long
  • dwControl As Long
  • cControls As Long
  • cbmxctrl As Long
  • pamxctrl As Long
  • End Type
  • 'Le volume est exprimé en pourcentage (entre 0 et 100)
  • 'la fonction returne true si ca a fonctionné
  • Function SetVolume(VolumeLevel As Long) As Boolean
  • Dim hmx As Long
  • Dim uMixerLine As MIXERLINE
  • Dim uMixerControl As MIXERCONTROL
  • Dim uMixerLineControls As MIXERLINECONTROLS
  • Dim uDetails As MIXERCONTROLDETAILS
  • Dim uUnsigned As MIXERCONTROLDETAILS_UNSIGNED
  • Dim RetValue As Long
  • Dim hmem As Long
  • If VolumeLevel < 0 Or VolumeLevel > 100 Then GoTo error
  • RetValue = mixerOpen(hmx, 0, 0, 0, 0)
  • If RetValue <> MMSYSERR_NOERROR Then GoTo error
  • uMixerLine.cbStruct = Len(uMixerLine)
  • uMixerLine.dwComponentType = MIXERLINE_COMPONENTTYPE_DST_SPEAKERS
  • RetValue = mixerGetLineInfo(hmx, uMixerLine, _
  • MIXER_GETLINEINFOF_COMPONENTTYPE)
  • If RetValue <> MMSYSERR_NOERROR Then GoTo error
  • uMixerLineControls.cbStruct = Len(uMixerLineControls)
  • uMixerLineControls.dwLineID = uMixerLine.dwLineID
  • uMixerLineControls.dwControl = MIXERCONTROL_CONTROLTYPE_VOLUME
  • uMixerLineControls.cControls = 1
  • uMixerLineControls.cbmxctrl = Len(uMixerControl)
  • hmem = GlobalAlloc(&H40, Len(uMixerControl))
  • uMixerLineControls.pamxctrl = GlobalLock(hmem)
  • uMixerControl.cbStruct = Len(uMixerControl)
  • RetValue = mixerGetLineControls(hmx, uMixerLineControls, _
  • MIXER_GETLINECONTROLSF_ONEBYTYPE)
  • If RetValue <> MMSYSERR_NOERROR Then GoTo error
  • CopyMemory uMixerControl, ByVal uMixerLineControls.pamxctrl, _
  • Len(uMixerControl)
  • GlobalFree hmem
  • hmem = 0
  • uDetails.item = 0
  • uDetails.dwControlID = uMixerControl.dwControlID
  • uDetails.cbStruct = Len(uDetails)
  • uDetails.cbDetails = Len(uUnsigned)
  • hmem = GlobalAlloc(&H40, Len(uUnsigned))
  • uDetails.paDetails = GlobalLock(hmem)
  • uDetails.cChannels = 1
  • uUnsigned.dwValue = CLng((VolumeLevel * uMixerControl.lMaximum) / 100)
  • CopyMemory ByVal uDetails.paDetails, uUnsigned, Len(uUnsigned)
  • RetValue = mixerSetControlDetails(hmx, uDetails, _
  • MIXER_SETCONTROLDETAILSF_VALUE)
  • GlobalFree hmem
  • hmem = 0
  • If RetValue <> MMSYSERR_NOERROR Then GoTo error
  • mixerClose hmx
  • SetVolume = True
  • Exit Function
  • error:
  • ' Une erreur s'est produite
  • If hmx <> 0 Then mixerClose hmx
  • If hmem Then GlobalFree hmem
  • SetVolume = False
  • End Function
Const MMSYSERR_NOERROR = 0
Const MAXPNAMELEN = 32
Const MIXER_LONG_NAME_CHARS = 64
Const MIXER_SHORT_NAME_CHARS = 16
Const MIXER_GETLINEINFOF_COMPONENTTYPE = &H3&
Const MIXER_GETLINECONTROLSF_ONEBYTYPE = &H2&
Const MIXER_SETCONTROLDETAILSF_VALUE = &H0&
Const MIXERLINE_COMPONENTTYPE_DST_FIRST = &H0&
Const MIXERLINE_COMPONENTTYPE_DST_SPEAKERS = &H4
Const MIXERCONTROL_CONTROLTYPE_VOLUME = &H50030001

Private Declare Function mixerOpen Lib "winmm.dll" (phmx As Long, _
    ByVal uMxId As Long, ByVal dwCallback As Long, ByVal dwInstance As Long, _
    ByVal fdwOpen As Long) As Long
Private Declare Function mixerGetLineInfo Lib "winmm.dll" Alias _
    "mixerGetLineInfoA" (ByVal hmxobj As Long, pmxl As MIXERLINE, _
    ByVal fdwInfo As Long) As Long
Private Declare Function mixerGetLineControls Lib "winmm.dll" Alias _
    "mixerGetLineControlsA" (ByVal hmxobj As Long, pmxlc As MIXERLINECONTROLS, _
    ByVal fdwControls As Long) As Long
Private Declare Function mixerSetControlDetails Lib "winmm.dll" (ByVal hmxobj _
    As Long, pmxcd As MIXERCONTROLDETAILS, ByVal fdwDetails As Long) As Long
Private Declare Function mixerClose Lib "winmm.dll" (ByVal hmx As Long) As Long
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" _
    (Destination As Any, Source As Any, ByVal Length As Long)
Private Declare Function GlobalAlloc Lib "kernel32" (ByVal wFlags As Long, _
    ByVal dwBytes As Long) As Long
Private Declare Function GlobalLock Lib "kernel32" (ByVal hmem As Long) As Long
Private Declare Function GlobalFree Lib "kernel32" (ByVal hmem As Long) As Long

Private Type MIXERCONTROL
    cbStruct As Long
    dwControlID As Long
    dwControlType As Long
    fdwControl As Long
    cMultipleItems As Long
    szShortName As String * MIXER_SHORT_NAME_CHARS
    szName As String * MIXER_LONG_NAME_CHARS
    lMinimum As Long
    lMaximum As Long
    reserved(10) As Long
End Type

Private Type MIXERCONTROLDETAILS
    cbStruct As Long
    dwControlID As Long
    cChannels As Long
    item As Long
    cbDetails As Long
    paDetails As Long
End Type

Private Type MIXERCONTROLDETAILS_UNSIGNED
    dwValue As Long
End Type

Private Type MIXERLINE
    cbStruct As Long
    dwDestination As Long
    dwSource As Long
    dwLineID As Long
    fdwLine As Long
    dwUser As Long
    dwComponentType As Long
    cChannels As Long
    cConnections As Long
    cControls As Long
    szShortName As String * MIXER_SHORT_NAME_CHARS
    szName As String * MIXER_LONG_NAME_CHARS
    dwType As Long
    dwDeviceID As Long
    wMid  As Integer
    wPid As Integer
    vDriverVersion As Long
    szPname As String * MAXPNAMELEN
End Type

Private Type MIXERLINECONTROLS
    cbStruct As Long
    dwLineID As Long
    dwControl As Long
    cControls As Long
    cbmxctrl As Long
    pamxctrl As Long
End Type

'Le volume est exprimé en pourcentage (entre 0 et 100)
'la fonction returne true si ca a fonctionné

Function SetVolume(VolumeLevel As Long) As Boolean
    Dim hmx As Long
    Dim uMixerLine As MIXERLINE
    Dim uMixerControl As MIXERCONTROL
    Dim uMixerLineControls As MIXERLINECONTROLS
    Dim uDetails As MIXERCONTROLDETAILS
    Dim uUnsigned As MIXERCONTROLDETAILS_UNSIGNED
    Dim RetValue As Long
    Dim hmem As Long

    If VolumeLevel < 0 Or VolumeLevel > 100 Then GoTo error

    RetValue = mixerOpen(hmx, 0, 0, 0, 0)
    If RetValue <> MMSYSERR_NOERROR Then GoTo error

    uMixerLine.cbStruct = Len(uMixerLine)
    uMixerLine.dwComponentType = MIXERLINE_COMPONENTTYPE_DST_SPEAKERS
    RetValue = mixerGetLineInfo(hmx, uMixerLine, _
        MIXER_GETLINEINFOF_COMPONENTTYPE)
    If RetValue <> MMSYSERR_NOERROR Then GoTo error

    uMixerLineControls.cbStruct = Len(uMixerLineControls)
    uMixerLineControls.dwLineID = uMixerLine.dwLineID
    uMixerLineControls.dwControl = MIXERCONTROL_CONTROLTYPE_VOLUME
    uMixerLineControls.cControls = 1
    uMixerLineControls.cbmxctrl = Len(uMixerControl)
    

    hmem = GlobalAlloc(&H40, Len(uMixerControl))
    uMixerLineControls.pamxctrl = GlobalLock(hmem)
    uMixerControl.cbStruct = Len(uMixerControl)
    RetValue = mixerGetLineControls(hmx, uMixerLineControls, _
        MIXER_GETLINECONTROLSF_ONEBYTYPE)
    If RetValue <> MMSYSERR_NOERROR Then GoTo error
    CopyMemory uMixerControl, ByVal uMixerLineControls.pamxctrl, _
        Len(uMixerControl)
    GlobalFree hmem
    hmem = 0

    uDetails.item = 0
    uDetails.dwControlID = uMixerControl.dwControlID
    uDetails.cbStruct = Len(uDetails)
    uDetails.cbDetails = Len(uUnsigned)
    hmem = GlobalAlloc(&H40, Len(uUnsigned))
    uDetails.paDetails = GlobalLock(hmem)
    uDetails.cChannels = 1
    uUnsigned.dwValue = CLng((VolumeLevel * uMixerControl.lMaximum) / 100)
    CopyMemory ByVal uDetails.paDetails, uUnsigned, Len(uUnsigned)
    RetValue = mixerSetControlDetails(hmx, uDetails, _
        MIXER_SETCONTROLDETAILSF_VALUE)
    GlobalFree hmem
    hmem = 0
    If RetValue <> MMSYSERR_NOERROR Then GoTo error
    
    mixerClose hmx
    SetVolume = True
    Exit Function
    
error:
    ' Une erreur s'est produite
    
    If hmx <> 0 Then mixerClose hmx
    If hmem Then GlobalFree hmem
    SetVolume = False

End Function



 Sources du même auteur

Source avec Zip RESOLUTION DE L'ECRAN (HAUTEUR, LARGEUR, NOMBRE DE COULEURS,...
Source avec Zip AFFICHER LES PROCESSUS ACTIFS AVEC LA MEM. UTILISÉE
SUPPRIMER LES FICHIERS RÉCEMMENT OUVERTS
ASSOCIER UNE EXTENSION A UN FICHIER (SANS API)
DESSINER SUR L'ÉCRAN

 Sources de la même categorie

Source avec Zip Source avec une capture EASYSAMPLE : JOUER DES SONS (MP3, WAVE) DEPUIS UN CLAVIER MI... par bierman
Source avec Zip Source avec une capture Source .NET (Dotnet) EXTRACT' SOUND MP3 par dheroux
Source avec Zip Source avec une capture Source .NET (Dotnet) CAPTURE ET ENREGISTREMENT D'UNE IMAGE DEPUIS UNE WEBCAM par RENAUD34
Source avec Zip Source avec une capture FLVPLAYER+XML+TXT DYNAMIQUE+TILELIST+UILOADER par tranber78
Source avec Zip Source avec une capture LECTEUR AUDIO AVEC JAVAFX par puccino1er

Commentaires et avis

Commentaire de Patrice99 le 31/07/2002 15:58:28

Simplement ? :-)

Commentaire de SoniqExnihilo le 07/02/2003 19:08:57

puré !! c'est genial, maintenant j'essais de trouver comment conaitre la valeur vous auriez pas une idee
car j'aimerai pouvoir faire + ou -, donc il fauut drait que je sache si le son est a , par exemple 50%, pour le passer a 60...

a priori ca serai mixerGetControlDetails mais alors je trouve la doc imboufable et completement incomprehensible.. alors si qq1 peut m'aider..

merci

Commentaire de Papy67 le 14/02/2003 07:16:20

SoniqExnilhilo
un ptit ex pour mixerGetControlDetails je l'ai trouvé sur le net.
'This project needs a module and a form
'The form must contain two labels, two progressbars, a timer and a checkbox

Dim hmixer As Long                  ' mixer handle
Dim inputVolCtrl As MIXERCONTROL    ' waveout volume control
Dim outputVolCtrl As MIXERCONTROL   ' microphone volume control
Dim rc As Long                      ' return code
Dim ok As Boolean                   ' boolean return code

Dim mxcd As MIXERCONTROLDETAILS         ' control info
Dim vol As MIXERCONTROLDETAILS_SIGNED   ' control's signed value
Dim volume As Long                      ' volume value
Dim volHmem As Long                     ' handle to volume memory
Private Sub Form_Load()
  Me.ScaleMode = vbTwips
   Me.Caption = "Volume meter"
   Label1.Move 0, 0
   Label1.AutoSize = True
   Label1.Caption = "Input level"
   Label2.Move 0, 4 * Label1.Height
   Label2.AutoSize = True
   Label2.Caption = "Output level"
   ProgressBar1.Move Label1.Width * 2, 0, 3375
   ProgressBar2.Move Label1.Width * 2, Label2.Top, 3375
   Check1.Move ProgressBar1.Left, ProgressBar1.Height
   Check1.Caption = "Get Input"
   Me.Move Me.Left, Me.Top, ProgressBar1.Width + ProgressBar1.Left + 10 * Screen.TwipsPerPixelX, ProgressBar2.Top + ProgressBar2.Height + 30 * Screen.TwipsPerPixelY
   Timer1.Interval = 50
   Timer1.Enabled = True

   ' Open the mixer specified by DEVICEID
   rc = mixerOpen(hmixer, DEVICEID, 0, 0, 0)

   If ((MMSYSERR_NOERROR &lt;&gt; rc)) Then
       MsgBox "Couldn't open the mixer."
       Exit Sub
   End If

   ' Get the input volume meter
   ok = GetControl(hmixer, MIXERLINE_COMPONENTTYPE_DST_WAVEIN, MIXERCONTROL_CONTROLTYPE_PEAKMETER, inputVolCtrl)

   If (ok &lt;&gt; True) Then
       ok = GetControl(hmixer, MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE, MIXERCONTROL_CONTROLTYPE_PEAKMETER, inputVolCtrl)
   End If

   If (ok = True) Then
      ProgressBar1.Min = 0
      ProgressBar1.Max = inputVolCtrl.lMaximum
   Else
      ProgressBar1.Enabled = False
      MsgBox "Couldn't get wavein meter"
   End If

   ' Get the output volume meter
   ok = GetControl(hmixer, MIXERLINE_COMPONENTTYPE_SRC_WAVEOUT, MIXERCONTROL_CONTROLTYPE_PEAKMETER, outputVolCtrl)

   If (ok = True) Then
      ProgressBar2.Min = 0
      ProgressBar2.Max = outputVolCtrl.lMaximum
   Else
      ProgressBar2.Enabled = False
      MsgBox "Couldn't get waveout meter"
   End If

   ' Initialize mixercontrol structure
   mxcd.cbStruct = Len(mxcd)
   volHmem = GlobalAlloc(&H0, Len(volume))  ' Allocate a buffer for the volume value
   mxcd.paDetails = GlobalLock(volHmem)
   mxcd.cbDetails = Len(volume)
   mxcd.cChannels = 1

End Sub
Private Sub Check1_Click()
   If (Check1.Value = 1) Then
      StartInput  ' Start receiving audio input
   Else
      StopInput   ' Stop receiving audio input
   End If
End Sub
Private Sub Timer1_Timer()

   On Error Resume Next

   ' Process sound buffer if recording
   If (fRecording) Then
      For i = 0 To (NUM_BUFFERS - 1)
         If inHdr(i).dwFlags And WHDR_DONE Then
            rc = waveInAddBuffer(hWaveIn, inHdr(i), Len(inHdr(i)))
         End If
      Next
   End If

   ' Get the current input level
   If (ProgressBar1.Enabled = True) Then
      mxcd.dwControlID = inputVolCtrl.dwControlID
      mxcd.item = inputVolCtrl.cMultipleItems
      rc = mixerGetControlDetails(hmixer, mxcd, MIXER_GETCONTROLDETAILSF_VALUE)
      CopyStructFromPtr volume, mxcd.paDetails, Len(volume)
      If (volume &lt; 0) Then
         volume = -volume
         End If
      ProgressBar1.Value = volume
   End If

   ' Get the current output level
   If (ProgressBar2.Enabled = True) Then
      mxcd.dwControlID = outputVolCtrl.dwControlID
      mxcd.item = outputVolCtrl.cMultipleItems
      rc = mixerGetControlDetails(hmixer, mxcd, MIXER_GETCONTROLDETAILSF_VALUE)
      CopyStructFromPtr volume, mxcd.paDetails, Len(volume)

      If (volume &lt; 0) Then volume = -volume

      ProgressBar2.Value = volume
   End If
End Sub
Private Sub Form_Unload(Cancel As Integer)
   If (fRecording = True) Then
       StopInput
   End If
   GlobalFree volHmem
End Sub

'Paste this code into the module
Public Const CALLBACK_FUNCTION = &H30000
Public Const MM_WIM_DATA = &H3C0
Public Const WHDR_DONE = &H1         '  done bit
Public Const GMEM_FIXED = &H0         ' Global Memory Flag used by GlobalAlloc functin

Type WAVEHDR
   lpData As Long
   dwBufferLength As Long
   dwBytesRecorded As Long
   dwUser As Long
   dwFlags As Long
   dwLoops As Long
   lpNext As Long
   Reserved As Long
End Type
Type WAVEINCAPS
   wMid As Integer
   wPid As Integer
   vDriverVersion As Long
   szPname As String * 32
   dwFormats As Long
   wChannels As Integer
End Type
Type WAVEFORMAT
   wFormatTag As Integer
   nChannels As Integer
   nSamplesPerSec As Long
   nAvgBytesPerSec As Long
   nBlockAlign As Integer
   wBitsPerSample As Integer
   cbSize As Integer
End Type

Declare Function waveInOpen Lib "winmm.dll" (lphWaveIn As Long, ByVal uDeviceID As Long, lpFormat As WAVEFORMAT, ByVal dwCallback As Long, ByVal dwInstance As Long, ByVal dwFlags As Long) As Long
Declare Function waveInPrepareHeader Lib "winmm.dll" (ByVal hWaveIn As Long, lpWaveInHdr As WAVEHDR, ByVal uSize As Long) As Long
Declare Function waveInReset Lib "winmm.dll" (ByVal hWaveIn As Long) As Long
Declare Function waveInStart Lib "winmm.dll" (ByVal hWaveIn As Long) As Long
Declare Function waveInStop Lib "winmm.dll" (ByVal hWaveIn As Long) As Long
Declare Function waveInUnprepareHeader Lib "winmm.dll" (ByVal hWaveIn As Long, lpWaveInHdr As WAVEHDR, ByVal uSize As Long) As Long
Declare Function waveInClose Lib "winmm.dll" (ByVal hWaveIn As Long) As Long
Declare Function waveInGetDevCaps Lib "winmm.dll" Alias "waveInGetDevCapsA" (ByVal uDeviceID As Long, lpCaps As WAVEINCAPS, ByVal uSize As Long) As Long
Declare Function waveInGetNumDevs Lib "winmm.dll" () As Long
Declare Function waveInGetErrorText Lib "winmm.dll" Alias "waveInGetErrorTextA" (ByVal err As Long, ByVal lpText As String, ByVal uSize As Long) As Long
Declare Function waveInAddBuffer Lib "winmm.dll" (ByVal hWaveIn As Long, lpWaveInHdr As WAVEHDR, ByVal uSize As Long) As Long

Public Const MMSYSERR_NOERROR = 0
Public Const MAXPNAMELEN = 32

Public Const MIXER_LONG_NAME_CHARS = 64
Public Const MIXER_SHORT_NAME_CHARS = 16
Public Const MIXER_GETLINEINFOF_COMPONENTTYPE = &H3&
Public Const MIXER_GETCONTROLDETAILSF_VALUE = &H0&
Public Const MIXER_GETLINECONTROLSF_ONEBYTYPE = &H2&

Public Const MIXERLINE_COMPONENTTYPE_DST_FIRST = &H0&
Public Const MIXERLINE_COMPONENTTYPE_SRC_FIRST = &H1000&
Public Const MIXERLINE_COMPONENTTYPE_DST_SPEAKERS = (MIXERLINE_COMPONENTTYPE_DST_FIRST + 4)
Public Const MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE = (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 3)
Public Const MIXERLINE_COMPONENTTYPE_SRC_LINE = (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 2)

Public Const MIXERCONTROL_CT_CLASS_FADER = &H50000000
Public Const MIXERCONTROL_CT_UNITS_UNSIGNED = &H30000
Public Const MIXERCONTROL_CT_UNITS_SIGNED = &H20000
Public Const MIXERCONTROL_CT_CLASS_METER = &H10000000
Public Const MIXERCONTROL_CT_SC_METER_POLLED = &H0&
Public Const MIXERCONTROL_CONTROLTYPE_FADER = (MIXERCONTROL_CT_CLASS_FADER Or MIXERCONTROL_CT_UNITS_UNSIGNED)
Public Const MIXERCONTROL_CONTROLTYPE_VOLUME = (MIXERCONTROL_CONTROLTYPE_FADER + 1)
Public Const MIXERLINE_COMPONENTTYPE_DST_WAVEIN = (MIXERLINE_COMPONENTTYPE_DST_FIRST + 7)
Public Const MIXERLINE_COMPONENTTYPE_SRC_WAVEOUT = (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 8)
Public Const MIXERCONTROL_CONTROLTYPE_SIGNEDMETER = (MIXERCONTROL_CT_CLASS_METER Or MIXERCONTROL_CT_SC_METER_POLLED Or MIXERCONTROL_CT_UNITS_SIGNED)
Public Const MIXERCONTROL_CONTROLTYPE_PEAKMETER = (MIXERCONTROL_CONTROLTYPE_SIGNEDMETER + 1)

Declare Function mixerClose Lib "winmm.dll" (ByVal hmx As Long) As Long
Declare Function mixerGetControlDetails Lib "winmm.dll" Alias "mixerGetControlDetailsA" (ByVal hmxobj As Long, pmxcd As MIXERCONTROLDETAILS, ByVal fdwDetails As Long) As Long
Declare Function mixerGetDevCaps Lib "winmm.dll" Alias "mixerGetDevCapsA" (ByVal uMxId As Long, ByVal pmxcaps As MIXERCAPS, ByVal cbmxcaps As Long) As Long
Declare Function mixerGetID Lib "winmm.dll" (ByVal hmxobj As Long, pumxID As Long, ByVal fdwId As Long) As Long
Declare Function mixerGetLineInfo Lib "winmm.dll" Alias "mixerGetLineInfoA" (ByVal hmxobj As Long, pmxl As MIXERLINE, ByVal fdwInfo As Long) As Long
Declare Function mixerGetLineControls Lib "winmm.dll" Alias "mixerGetLineControlsA" (ByVal hmxobj As Long, pmxlc As MIXERLINECONTROLS, ByVal fdwControls As Long) As Long
Declare Function mixerGetNumDevs Lib "winmm.dll" () As Long
Declare Function mixerMessage Lib "winmm.dll" (ByVal hmx As Long, ByVal uMsg As Long, ByVal dwParam1 As Long, ByVal dwParam2 As Long) As Long
Declare Function mixerOpen Lib "winmm.dll" (phmx As Long, ByVal uMxId As Long, ByVal dwCallback As Long, ByVal dwInstance As Long, ByVal fdwOpen As Long) As Long
Declare Function mixerSetControlDetails Lib "winmm.dll" (ByVal hmxobj As Long, pmxcd As MIXERCONTROLDETAILS, ByVal fdwDetails As Long) As Long

Declare Sub CopyStructFromPtr Lib "kernel32" Alias "RtlMoveMemory" (struct As Any, ByVal ptr As Long, ByVal cb As Long)
Declare Sub CopyPtrFromStruct Lib "kernel32" Alias "RtlMoveMemory" (ByVal ptr As Long, struct As Any, ByVal cb As Long)
Declare Function GlobalAlloc Lib "kernel32" (ByVal wFlags As Long, ByVal dwBytes As Long) As Long
Declare Function GlobalLock Lib "kernel32" (ByVal hmem As Long) As Long
Declare Function GlobalFree Lib "kernel32" (ByVal hmem As Long) As Long

Type MIXERCAPS
   wMid As Integer
   wPid As Integer
   vDriverVersion As Long
   szPname As String * MAXPNAMELEN
   fdwSupport As Long
   cDestinations As Long
End Type
Type MIXERCONTROL
   cbStruct As Long
   dwControlID As Long
   dwControlType As Long
   fdwControl As Long
   cMultipleItems As Long
   szShortName As String * MIXER_SHORT_NAME_CHARS
   szName As String * MIXER_LONG_NAME_CHARS
   lMinimum As Long
   lMaximum As Long
   Reserved(10) As Long
End Type
Type MIXERCONTROLDETAILS
   cbStruct As Long
   dwControlID As Long
   cChannels As Long
   item As Long
   cbDetails As Long
   paDetails As Long
End Type
Type MIXERCONTROLDETAILS_SIGNED
   lValue As Long
End Type
Type MIXERLINE
   cbStruct As Long
   dwDestination As Long
   dwSource As Long
   dwLineID As Long
   fdwLine As Long
   dwUser As Long
   dwComponentType As Long
   cChannels As Long
   cConnections As Long
   cControls As Long
   szShortName As String * MIXER_SHORT_NAME_CHARS
   szName As String * MIXER_LONG_NAME_CHARS
   dwType As Long
   dwDeviceID As Long
   wMid  As Integer
   wPid As Integer
   vDriverVersion As Long
   szPname As String * MAXPNAMELEN
End Type
Type MIXERLINECONTROLS
   cbStruct As Long
   dwLineID As Long
   dwControl As Long
   cControls As Long
   cbmxctrl As Long
   pamxctrl As Long
End Type

Public i As Integer, j As Integer, rc As Long, msg As String * 200, hWaveIn As Long
Public Const NUM_BUFFERS = 2
Public format As WAVEFORMAT, hmem(NUM_BUFFERS) As Long, inHdr(NUM_BUFFERS) As WAVEHDR
Public Const BUFFER_SIZE = 8192
Public Const DEVICEID = 0
Public fRecording As Boolean
Function GetControl(ByVal hmixer As Long, ByVal componentType As Long, ByVal ctrlType As Long, ByRef mxc As MIXERCONTROL) As Boolean
' This function attempts to obtain a mixer control. Returns True if successful.

   Dim mxlc As MIXERLINECONTROLS
   Dim mxl As MIXERLINE
   Dim hmem As Long
   Dim rc As Long

   mxl.cbStruct = Len(mxl)
   mxl.dwComponentType = componentType

   ' Obtain a line corresponding to the component type
   rc = mixerGetLineInfo(hmixer, mxl, MIXER_GETLINEINFOF_COMPONENTTYPE)

   If (MMSYSERR_NOERROR = rc) Then
      mxlc.cbStruct = Len(mxlc)
      mxlc.dwLineID = mxl.dwLineID
      mxlc.dwControl = ctrlType
      mxlc.cControls = 1
      mxlc.cbmxctrl = Len(mxc)

      ' Allocate a buffer for the control
      'hmem = GlobalAlloc(&H40, Len(mxc))
      hmem = GlobalAlloc(GMEM_FIXED, Len(mxc))
      mxlc.pamxctrl = GlobalLock(hmem)
      mxc.cbStruct = Len(mxc)

      ' Get the control
      rc = mixerGetLineControls(hmixer, mxlc, MIXER_GETLINECONTROLSF_ONEBYTYPE)

      If (MMSYSERR_NOERROR = rc) Then
         GetControl = True

         ' Copy the control into the destination structure
         CopyStructFromPtr mxc, mxlc.pamxctrl, Len(mxc)
      Else
         GetControl = False
      End If
      GlobalFree (hmem)
      Exit Function
   End If

   GetControl = False
End Function
' Function to process the wave recording notifications.
Sub waveInProc(ByVal hwi As Long, ByVal uMsg As Long, ByVal dwInstance As Long, ByRef hdr As WAVEHDR, ByVal dwParam2 As Long)
   If (uMsg = MM_WIM_DATA) Then
      If fRecording Then
         rc = waveInAddBuffer(hwi, hdr, Len(hdr))
      End If
   End If
End Sub
' This function starts recording from the soundcard. The soundcard must be recording in order to
' monitor the input level. Without starting the recording from this application, input level
' can still be monitored if another application is recording audio
Function StartInput() As Boolean

    If fRecording Then
        StartInput = True
        Exit Function
    End If

    format.wFormatTag = 1
    format.nChannels = 1
    format.wBitsPerSample = 8
    format.nSamplesPerSec = 8000
    format.nBlockAlign = format.nChannels * format.wBitsPerSample / 8
    format.nAvgBytesPerSec = format.nSamplesPerSec * format.nBlockAlign
    format.cbSize = 0

    For i = 0 To NUM_BUFFERS - 1
        hmem(i) = GlobalAlloc(&H40, BUFFER_SIZE)
        inHdr(i).lpData = GlobalLock(hmem(i))
        inHdr(i).dwBufferLength = BUFFER_SIZE
        inHdr(i).dwFlags = 0
        inHdr(i).dwLoops = 0
    Next

    rc = waveInOpen(hWaveIn, DEVICEID, format, 0, 0, 0)
    If rc &lt;&gt; 0 Then
        waveInGetErrorText rc, msg, Len(msg)
        MsgBox msg
        StartInput = False
        Exit Function
    End If

    For i = 0 To NUM_BUFFERS - 1
        rc = waveInPrepareHeader(hWaveIn, inHdr(i), Len(inHdr(i)))
        If (rc &lt;&gt; 0) Then
            waveInGetErrorText rc, msg, Len(msg)
            MsgBox msg
        End If
    Next

    For i = 0 To NUM_BUFFERS - 1
        rc = waveInAddBuffer(hWaveIn, inHdr(i), Len(inHdr(i)))
        If (rc &lt;&gt; 0) Then
            waveInGetErrorText rc, msg, Len(msg)
            MsgBox msg
        End If
    Next

    fRecording = True
    rc = waveInStart(hWaveIn)
    StartInput = True
End Function
' Stop receiving audio input on the soundcard
Sub StopInput()

    fRecording = False
    waveInReset hWaveIn
    waveInStop hWaveIn
    For i = 0 To NUM_BUFFERS - 1
        waveInUnprepareHeader hWaveIn, inHdr(i), Len(inHdr(i))
        GlobalFree hmem(i)
    Next
    waveInClose hWaveIn
End Sub

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix


HTC Hero

Entre 550€ et 550€

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,577 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales