Rubrik: Audio & Multimedia | 09.05.01 |
auxGetVolume-Funktion Diese Funktion liefert die Lautstärke-Einstellung für ein auxiales Ausgabegerät. | ||
Betriebssystem: Win95, Win98, WinNT, Win2000, WinME | Views: 14.030 |
Beschreibung:
Diese Funktion liefert die Lautstärke-Einstellung für ein auxiales Ausgabegerät.
Achtung:
Hat das Gerät nur einen Monokanal so ist die Lautstärke nur der "Low order word" der lpdwVolume Variable. Um herauszufinden ob ein Audiogerät 2 Stereo Kanäle, nur einen Monokanal oder die Lautstärke-Einstellung überhaupt nicht besitzt, kann man die auxGetDevCaps-Funktion aufrufen. Der Gültigkeitbereich der Lautstärke eines Audiokanals ist von "0" (ganz leise) über "32767" (mittel) bis "-1" (ganz laut)
Beispiel:
Ganz leise = 0
etwas lauter = 11000
fast mittellaut = 32000
mehr als mittellaut = -32000
noch lauter = -11000
Ganz laut = -1
Deklaration:
Declare Function auxGetVolume Lib "winmm.dll" ( _ ByVal uDeviceID As Long, _ lpdwVolume As Long) As Long
Parameter:
uDeviceID | Geräte-Index. Ist ein Geräte-Index ungültig, wird "MMSYSERR_BADDEVICEID" zurückgegeben. Um die Geräte ID's zu ermitteln kann man die auxGetDevCaps-Funktion aufrufen. |
lpdwVolume | (Long). War der Funktionsaufruf erfolgreich, werden hier die Lautstärke-Einstellungen beider Kanäle zurückgegeben. |
Rückgabewert:
Die Funktion liefert "MMSYSERR_NOERROR" zurück, wenn der Funktionsaufruf erfolgreich war, andernfalls (z.B. ungültige DeviceID) wird "MMSYSERR_BADDEVICEID" zurückgegeben.
Rückgabekonstanten:
Const MMSYSERRR_NOERROR = 0 ' Kein Fehler Const MMSYSERR_BASE = 0 ' Basis Konstante Const MMSYSERR_BADDEVICEID = (MMSYSERR_BASE+ 2) ' Falscher Geräte ID
Beispiel:
Private Declare Function auxGetVolume Lib "winmm.dll" ( _ ByVal uDeviceID As Long, _ lpdwVolume As Long) As Long ' für das zweite Beispiel "CopyMemory" Private Declare Sub CopyMemory Lib "kernel32" _ Alias "RtlMoveMemory" ( _ Destination As Any, _ Source As Any, _ ByVal Length As Long) Const MMSYSERRR_NOERROR = 0 ' Kein Fehler Const MMSYSERR_BASE = 0 ' Basis Konstante Const MMSYSERR_BADDEVICEID = (MMSYSERR_BASE+ 2) ' Falscher Geräte ID
' Beispiel 1: Die Berechnung der Lautstärke des ersten Audiogerätes (Index 0) Private Sub Command1_Click () Dim Retval As Long, AuxReturn As Long Dim RightVol As Long, LeftVol As Long Retval = auxGetVolume(CLng(0), AuxReturn) ' Lautstärke beider Kanäle ermitteln If Retval = MMSYSERR_BADDEVICEID Then MsgBox "Das Audiogerät mit der DeviceID 0 existiert nicht", vbCritical, "Fehler" Exit Sub End If If Retval = MMSYSERR_NOERROR Then LeftVol = Val ("&H" & Hex(AuxReturn And (Not &HFFFF0000))) RightVol = (AuxReturn And &HFFFF0000) / &H10000 Debug.Print "Gerät : 0" If RightVol <> 0 Then ' Falls das Gerät nur einen Monokanal hat Debug.Print "Lautstärke Links: " & LeftVol Debug.Print "Lautstärke Rechts: " & RightVol Else Debug.Print "Lautstärke Links: " & LeftVol End If Debug.Print vbCrLf End If End Sub
' Beispiel 2: Die Berechnung der Lautstärke des ersten Audiogerätes (Index 0) Private Sub Command2_Click () Dim Retval As Long Dim Volume(1) As Integer, AuxReturn As Long Dim RightVol As Long, LeftVol As Long Retval = auxGetVolume(CLng(0), AuxReturn) ' Lautstärke beider Kanäle ermitteln If Retval = MMSYSERR_BADDEVICEID Then MsgBox "Das Audiogerät mit der DeviceID 0 existiert nicht", vbCritical, "Fehler" Exit Sub End If If Retval = MMSYSERR_NOERROR Then CopyMemory Volume(0), AuxReturn, Len(Volume(0)) * 2 LeftVol = Volume(0) RightVol = Volume(1) Debug.Print "Gerät : 0" If RightVol <> 0 Then ' Falls das Gerät nur einen Monokanal hat Debug.Print "Lautstärke Links: " & LeftVol Debug.Print "Lautstärke Rechts: " & RightVol Else Debug.Print "Laustärke: " & LeftVol End If Debug.Print vbCrLf End If End Sub