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






