Salut
je cherche le moyen d'acceder directement au volume du micro qui se config normalement via le panneau de configuration.
y a -til un moyen ?si oui comment ?
a+
scaraber
volume du micro
Code : Tout sélectionner
; Code : KarLKoX
#MMSYSERR_NOERROR = 0
#MIXER_SHORT_NAME_CHARS = 16
#MIXER_LONG_NAME_CHARS = 64
Structure MIXERCONTROL
cbStruct.l
dwControlID.l
dwControlType.l
fdwControl.l
cMultipleItems.l
szShortName.s[#MIXER_SHORT_NAME_CHARS]
szName.s[#MIXER_LONG_NAME_CHARS]
lMinimum.l
lMaximum.l
reserved.l[10]
EndStructure
; retourne -1 si erreur
; 0 à 65535 en cas de succes
Procedure.l MIXER_getVolume(Type.l)
Protected dwVolume.l, result.l, hMixer
Protected ml.MIXERLINE, mlc.MIXERLINECONTROLS,mc.MIXERCONTROL,mcd.MIXERCONTROLDETAILS,mcdu.MIXERCONTROLDETAILS_UNSIGNED
RtlZeroMemory_(ml,SizeOf(MIXERLINE))
RtlZeroMemory_(mlc,SizeOf(MIXERLINECONTROLS))
RtlZeroMemory_(mcd,SizeOf(MIXERCONTROLDETAILS))
RtlZeroMemory_(mcdu,SizeOf(MIXERCONTROLDETAILS_UNSIGNED))
dwVolume = -1
result = mixerOpen_(@hMixer, 0, 0, 0, #MIXER_OBJECTF_HMIXER)
If result = #MMSYSERR_NOERROR
ml\cbStruct = SizeOf(MIXERLINE)
ml\dwComponentType = Type
result = mixerGetLineInfo_(hMixer, @ml, #MIXER_GETLINEINFOF_COMPONENTTYPE)
If result = #MMSYSERR_NOERROR
mlc\cbStruct = SizeOf(MIXERLINECONTROLS)
mlc\dwLineID = ml\dwLineID
mlc\dwControlType = #MIXERCONTROL_CONTROLTYPE_VOLUME
mlc\cControls = 1
mlc\pamxctrl = @mc
mlc\cbmxctrl = SizeOf(MIXERCONTROL)
result = mixerGetLineControls_(hMixer, @mlc, #MIXER_GETLINECONTROLSF_ONEBYTYPE)
If result = #MMSYSERR_NOERROR
mcd\cbStruct = SizeOf(MIXERCONTROLDETAILS)
mcd\dwControlID = mc\dwControlID
mcd\paDetails = @mcdu
mcd\cbDetails = SizeOf(MIXERCONTROLDETAILS_UNSIGNED)
mcd\cChannels = 1
result = mixerGetControlDetails_(hMixer, @mcd, #MIXER_SETCONTROLDETAILSF_VALUE)
If result = #MMSYSERR_NOERROR
dwVolume = mcdu\dwValue
EndIf
EndIf
EndIf
EndIf
ProcedureReturn dwVolume
EndProcedure
; newvolume va de 0 = 65535
; retourne #true ou #false
Procedure MIXER_setVolume(Type.l, newvolume.l)
Protected ml.MIXERLINE, mlc.MIXERLINECONTROLS,mc.MIXERCONTROL,mcd.MIXERCONTROLDETAILS,mcdu.MIXERCONTROLDETAILS_UNSIGNED
RtlZeroMemory_(ml,SizeOf(MIXERLINE))
RtlZeroMemory_(mlc,SizeOf(MIXERLINECONTROLS))
RtlZeroMemory_(mcd,SizeOf(MIXERCONTROLDETAILS))
RtlZeroMemory_(mcdu,SizeOf(MIXERCONTROLDETAILS_UNSIGNED))
result = mixerOpen_(@hMixer, 0, 0, 0, #MIXER_OBJECTF_HMIXER)
If result = #MMSYSERR_NOERROR
ml\cbStruct = SizeOf(MIXERLINE)
ml\dwComponentType = Type
result = mixerGetLineInfo_(hMixer, @ml, #MIXER_GETLINEINFOF_COMPONENTTYPE)
If result = #MMSYSERR_NOERROR
mlc\cbStruct = SizeOf(MIXERLINECONTROLS)
mlc\dwLineID = ml\dwLineID
mlc\dwControlType = #MIXERCONTROL_CONTROLTYPE_VOLUME
mlc\cControls = 1
mlc\pamxctrl = @mc
mlc\cbmxctrl = SizeOf(MIXERCONTROL)
result = mixerGetLineControls_(hMixer, @mlc, #MIXER_GETLINECONTROLSF_ONEBYTYPE)
If result = #MMSYSERR_NOERROR
mcdu\dwValue = newvolume
mcd\cbStruct = SizeOf(MIXERCONTROLDETAILS)
mcd\dwControlID = mc\dwControlID
mcd\paDetails = @mcdu
mcd\cbDetails = SizeOf(MIXERCONTROLDETAILS_UNSIGNED)
mcd\cChannels = 1
result = mixerSetControlDetails_(hMixer, @mcd, #MIXER_SETCONTROLDETAILSF_VALUE)
If result = #MMSYSERR_NOERROR
ProcedureReturn #True
Else
ProcedureReturn #False
EndIf
EndIf
EndIf
EndIf
EndProcedure
Debug "Volume du micro : " + Str(MIXER_getVolume(#MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE))
Dernière modification par KarLKoX le mar. 09/mai/2006 20:34, modifié 1 fois.
"Qui baise trop bouffe un poil." P. Desproges