Set/Get Master Volume/Mute
Posted: Tue Apr 08, 2003 8:41 pm
Restored from previous forum. Originally posted by GPI.
After a LONG (VERY VERY VERY LONG) time of seariching a function Example, i found a Delphi-Example.
So, here it is:
PII 333, 256MB, Asus TNT2Ultra 32MB, AWE Gold 64 4MB
After a LONG (VERY VERY VERY LONG) time of seariching a function Example, i found a Delphi-Example.
So, here it is:
Code: Select all
;-MIXERLINE
Structure MIXERLINE
cbStruct.l
dwDestination.l
dwSource.l
dwLineID.l
fdwLine.l
dwUser.l
dwComponentType.l
cChannels.l
cConnections.l
cControls.l
szShortName.b[#MIXER_SHORT_NAME_CHARS]
szName.b[#MIXER_LONG_NAME_CHARS]
;target
dwType.l
dwDeviceID.l
wMid.w
wPid.w
vDriverVersion.l
szPname.b[#MAXPNAMELEN]
EndStructure
;-MIXERCONTROL
Structure MIXERCONTROL
cbStruct.l
dwControlID.l
dwControlType.l
fdwControl.l
cMultipleItems.l
szShortName.b[#MIXER_SHORT_NAME_CHARS]
szName.b[#MIXER_LONG_NAME_CHARS];
lMinimum.l
lMaximum.l
dwMinimum.l
dwMaximum.l
Reserved.l[6];
cSteps.l
cbCustomData.l;
dwReserved.l[6];
EndStructure
;-MIXERCONTROLDETAILSUNSIGNED
Structure MIXERCONTROLDETAILSUNSIGNED
dwValue.l
EndStructure
Procedure ZeroMemory(adr,len)
For i=0 To len-1
PokeB(adr+i,0)
Next
EndProcedure
Procedure GetMasterVolumeControl(mixer,*control.MIXERCONTROL)
line.mixerline
controls.mixerlinecontrols
ZeroMemory(Line, SizeOf(mixerline))
Line\cbStruct = SizeOf(mixerline)
Line\dwComponentType = #MIXERLINE_COMPONENTTYPE_DST_SPEAKERS;
Result = mixerGetLineInfo_(Mixer,Line,#MIXER_GETLINEINFOF_COMPONENTTYPE)
If Result = #MMSYSERR_NOERROR
ZeroMemory(Controls, SizeOf(mixerlinecontrols));
Controls\cbStruct = SizeOf(mixerlinecontrols);
Controls\dwLineID = Line\dwLineID;
Controls\cControls = 1;
Controls\dwControlType = #MIXERCONTROL_CONTROLTYPE_VOLUME;
Controls\cbmxctrl = SizeOf(MIXERCONTROL);
Controls\pamxctrl = *Control;
Result = mixerGetLineControls_(Mixer,Controls,#MIXER_GETLINECONTROLSF_ONEBYTYPE)
EndIf
ProcedureReturn result
EndProcedure
Procedure GetMasterMuteControl(mixer,*control.MIXERCONTROL)
line.mixerline
controls.mixerlinecontrols
ZeroMemory(Line, SizeOf(mixerline))
Line\cbStruct = SizeOf(mixerline)
Line\dwComponentType = #MIXERLINE_COMPONENTTYPE_DST_SPEAKERS;
Result = mixerGetLineInfo_(Mixer,Line,#MIXER_GETLINEINFOF_COMPONENTTYPE)
If Result = #MMSYSERR_NOERROR
ZeroMemory(Controls, SizeOf(mixerlinecontrols));
Controls\cbStruct = SizeOf(mixerlinecontrols);
Controls\dwLineID = Line\dwLineID;
Controls\cControls = 1;
Controls\dwControlType = #MIXERCONTROL_CONTROLTYPE_MUTE;
Controls\cbmxctrl = SizeOf(MIXERCONTROL);
Controls\pamxctrl = *Control;
Result = mixerGetLineControls_(Mixer,Controls,#MIXER_GETLINECONTROLSF_ONEBYTYPE)
EndIf
ProcedureReturn result
EndProcedure
Procedure SetMasterVolume(mixer,value)
MasterVolume.MIXERCONTROL
Details.MIXERCONTROLDETAILS
UnsignedDetails.MIXERCONTROLDETAILSUNSIGNED
code.l
code=GetMasterVolumeControl(Mixer,MasterVolume)
If code=#MMSYSERR_NOERROR
Details\cbStruct = SizeOf(MIXERCONTROLDETAILS);
Details\dwControlID = MasterVolume\dwControlID;
Details\cChannels = 1; // set all channels
Details\Item = 0;
Details\cbDetails = SizeOf(MIXERCONTROLDETAILSUNSIGNED);
Details\paDetails = @UnsignedDetails;
UnsignedDetails\dwValue=Value
code=mixerSetControlDetails_(Mixer,Details, #MIXER_SETCONTROLDETAILSF_VALUE);
EndIf
ProcedureReturn code
EndProcedure
Procedure SetMasterMute(mixer,value)
MasterVolume.MIXERCONTROL
Details.MIXERCONTROLDETAILS
UnsignedDetails.MIXERCONTROLDETAILSUNSIGNED
code.l
code=GetMasterMuteControl(Mixer,MasterVolume)
If code=#MMSYSERR_NOERROR
Details\cbStruct = SizeOf(MIXERCONTROLDETAILS);
Details\dwControlID = MasterVolume\dwControlID;
Details\cChannels = 1; // set all channels
Details\Item = 0;
Details\cbDetails = SizeOf(MIXERCONTROLDETAILSUNSIGNED);
Details\paDetails = @UnsignedDetails;
UnsignedDetails\dwValue=Value
code=mixerSetControlDetails_(Mixer,Details, #MIXER_SETCONTROLDETAILSF_VALUE);
EndIf
ProcedureReturn code
EndProcedure
Procedure GetMasterVolume(mixer)
MasterVolume.MIXERCONTROL
Details.MIXERCONTROLDETAILS
UnsignedDetails.MIXERCONTROLDETAILSUNSIGNED
code.l
code=GetMasterVolumeControl(Mixer,MasterVolume)
If code=#MMSYSERR_NOERROR
Details\cbStruct = SizeOf(MIXERCONTROLDETAILS);
Details\dwControlID = MasterVolume\dwControlID;
Details\cChannels = 1; // set all channels
Details\Item = 0;
Details\cbDetails = SizeOf(MIXERCONTROLDETAILSUNSIGNED);
Details\paDetails = @UnsignedDetails;
code=mixerGetControlDetails_(Mixer,Details, #MIXER_SETCONTROLDETAILSF_VALUE);
EndIf
ProcedureReturn UnsignedDetails\dwValue
EndProcedure
Procedure GetMasterMute(mixer)
MasterVolume.MIXERCONTROL
Details.MIXERCONTROLDETAILS
UnsignedDetails.MIXERCONTROLDETAILSUNSIGNED
code.l
code=GetMasterMuteControl(Mixer,MasterVolume)
If code=#MMSYSERR_NOERROR
Details\cbStruct = SizeOf(MIXERCONTROLDETAILS);
Details\dwControlID = MasterVolume\dwControlID;
Details\cChannels = 1; // set all channels
Details\Item = 0;
Details\cbDetails = SizeOf(MIXERCONTROLDETAILSUNSIGNED);
Details\paDetails = @UnsignedDetails;
code=mixerGetControlDetails_(Mixer,Details, #MIXER_SETCONTROLDETAILSF_VALUE);
EndIf
ProcedureReturn UnsignedDetails\dwValue
EndProcedure
Procedure GetMasterVolumeMinimum(mixer)
Volume.MIXERCONTROL
GetMasterVolumeControl(mixer,Volume)
ProcedureReturn volume\lMinimum
EndProcedure
Procedure GetMasterVolumeMaximum(mixer)
Volume.MIXERCONTROL
GetMasterVolumeControl(mixer,Volume)
ProcedureReturn volume\lMaximum
EndProcedure
;little example
;Debug Hex(getMasterVolume(0))
;normal mixer 0 is the default soundcard
Debug mixerGetNumDevs_(); -Numbers of Soundcards
; mixer can be 0 to (mixerGetNumDevs()-1)
For i=0 To $ff00 Step $100
setMasterVolume(0,i)
Delay(100)
Next
For i=0 To 3
Debug "mute"
setmastermute(0,1)
Delay(1000)
Debug "sound"
setmastermute(0,0)
Delay(1000)
Next
PII 333, 256MB, Asus TNT2Ultra 32MB, AWE Gold 64 4MB