Mixer Informationen

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
Deluxe0321
Beiträge: 336
Registriert: 19.05.2006 00:31
Kontaktdaten:

Mixer Informationen

Beitrag von Deluxe0321 »

Hey,
diesen Code habe ich geschrieben um erstmal den Aufbau der Mixerabfragen zu verstehen.
Die Ausgabe beinhaltet eigentlich alle Wichtigen Informationen wie Lautstärke Name, usw..

KEIN VISTA! Außer ihr stellt den Kompatibiltätsmodus (ist ja logisch) auf XP...

viel spaß damit

PS:über diverse verbesserungen würde ich mich freuen ^^

Code: Alles auswählen

EnableExplicit

Define err.l;
Define HMIXER.l;
Define iNumDevs.l, i.l,mixerhandle.l,mixerID.l,numSRC.l,n;

Define mixcaps.MIXERCAPS     ;
Define mixerline.MIXERLINE     ;
Define mixerLineControls.MIXERLINECONTROLS;
Define value.MIXERCONTROLDETAILS_UNSIGNED;
Define mixerControlDetails.MIXERCONTROLDETAILS


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 

Dim mixcont.mixercontrol(0)

Declare.s GetType(Value)

err = mixerOpen_(@HMIXER, 0, 0, 0, 0);
If err
  Debug "ERROR: Can't open Mixer Device! -- "+Str(err)
Else
  mixerhandle = err
  err = mixerGetID_(mixerhandle, @mixerID, #MIXER_OBJECTF_HMIXER);
  If err
    Debug "ERROR: Can't get Mixer Device ID! -- "+Str(err)
  Else
    
    iNumDevs = mixerGetNumDevs_()
    For i = 0 To iNumDevs
      If Not mixerGetDevCaps_(i, @mixcaps, SizeOf(MIXERCAPS))
        Debug "Device ID "+Str(i)
        Debug "Name: "+PeekS(@mixcaps\szPname,mixcaps\szPname)   
        Debug "----------------------------"
        
        For i = 0 To  mixcaps\cDestinations
    
          mixerline\cbStruct = SizeOf(MIXERLINE)
          mixerline\dwDestination = i;

          err = mixerGetLineInfo_(mixerHandle, @mixerline, #MIXER_GETLINEINFOF_DESTINATION)
          If Not err
            
            Debug "|--Destination "+Str(i)+" = "+PeekS(@mixerline\szName)
            
            numSrc = mixerline\cConnections;
            ReDim mixcont.mixercontrol(numSrc)
            
            For n = 0 To numSrc
            
              mixerline\cbStruct = SizeOf(MIXERLINE);
              mixerline\dwDestination = i;
              mixerline\dwSource = n;

              err = mixerGetLineInfo_(mixerHandle, @mixerline, #MIXER_GETLINEINFOF_SOURCE)
              If Not err
                
                Debug "    |-- "+PeekS(@mixerline\szName)
                Debug "         |-- Source "+Str(n)
                Debug "         |-- LineID: "+Str(mixerline\dwlineID.l)
                Debug "         |-- Controls: "+Str(mixerline\cControls)
                Debug "         |-- SRC_Type: "+GetType(mixerline\dwComponentType)   
                
                ReDim mixcont.mixercontrol(mixerline\cControls)
                
                mixerLineControls\cbStruct = SizeOf(MIXERLINECONTROLS)
                mixerLineControls\cControls = mixerline\cControls
                mixerLineControls\dwLineID = mixerline\dwlineID.l
                mixerLineControls\pamxctrl = @mixcont(0)
                mixerLineControls\cbmxctrl = SizeOf(MIXERCONTROL)
            
                err = mixerGetLineControls_(mixerHandle, @mixerLineControls, #MIXER_GETLINECONTROLSF_ALL)
                
                If Not err
                  
                  Debug "         |-- ControlID:"+Str(mixcont(0)\dwControlID)
  
                  mixerControlDetails\cbStruct = SizeOf(MIXERCONTROLDETAILS)
                  mixerControlDetails\dwControlID = mixcont(0)\dwControlID
                  mixerControlDetails\cChannels = 1
                  mixerControlDetails\paDetails = @value
                  mixerControlDetails\cbDetails = SizeOf(MIXERCONTROLDETAILS_UNSIGNED);              
  
                  err = mixerGetControlDetails_(mixerHandle, @mixerControlDetails, #MIXER_GETCONTROLDETAILSF_VALUE)
                  If err
                    Debug "         |-- Error #%d calling mixerGetControlDetails() "+Str(err)
                  Else
                    If Not value\dwValue < 31
                      Debug "         |-- Volume: "+Str( (value\dwValue/31) / (mixcont(0)\lMaximum.l/31/100))+"%"
                    Else
                      Debug "         |-- Volume: 0%"
                    EndIf
                  EndIf                  
          
                Else  
                  Debug "         |-- Error calling mixerGetLineControls() "+Str(err)
                EndIf
              EndIf 
            Next
              Debug ""
          EndIf
        Next
       
      EndIf
    Next
    
  EndIf
EndIf

Procedure.s GetType(Value)
  Select Value
    Case #MIXERLINE_COMPONENTTYPE_SRC_DIGITAL	
      ProcedureReturn "#MIXERLINE_COMPONENTTYPE_SRC_DIGITAL"
    Case #MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE	
      ProcedureReturn "#MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE"	
    Case #MIXERLINE_COMPONENTTYPE_SRC_SYNTHESIZER	
      ProcedureReturn "#MIXERLINE_COMPONENTTYPE_SRC_SYNTHESIZER"
    Case #MIXERLINE_COMPONENTTYPE_SRC_COMPACTDISC	
      ProcedureReturn "#MIXERLINE_COMPONENTTYPE_SRC_COMPACTDISC"
    Case #MIXERLINE_COMPONENTTYPE_SRC_TELEPHONE	
      ProcedureReturn "#MIXERLINE_COMPONENTTYPE_SRC_TELEPHONE"
    Case #MIXERLINE_COMPONENTTYPE_SRC_PCSPEAKER	
      ProcedureReturn "#MIXERLINE_COMPONENTTYPE_SRC_PCSPEAKER"	
    Case #MIXERLINE_COMPONENTTYPE_SRC_WAVEOUT	
      ProcedureReturn "#MIXERLINE_COMPONENTTYPE_SRC_WAVEOUT"
    Case #MIXERLINE_COMPONENTTYPE_SRC_AUXILIARY
      ProcedureReturn "#MIXERLINE_COMPONENTTYPE_SRC_AUXILIARY"
    Case #MIXERLINE_COMPONENTTYPE_SRC_ANALOG
      ProcedureReturn "#MIXERLINE_COMPONENTTYPE_SRC_ANALOG"
    Case #MIXERLINE_COMPONENTTYPE_SRC_UNDEFINED
      ProcedureReturn "#MIXERLINE_COMPONENTTYPE_SRC_UNDEFINED"
    Case #MIXERLINE_COMPONENTTYPE_DST_DIGITAL	
      ProcedureReturn "MIXERLINE_COMPONENTTYPE_DST_DIGITAL"	
    Case #MIXERLINE_COMPONENTTYPE_DST_LINE	
      ProcedureReturn "MIXERLINE_COMPONENTTYPE_DST_LINE"	
    Case #MIXERLINE_COMPONENTTYPE_DST_MONITOR	
      ProcedureReturn "MIXERLINE_COMPONENTTYPE_DST_MONITOR"	
    Case #MIXERLINE_COMPONENTTYPE_DST_SPEAKERS	
      ProcedureReturn "MIXERLINE_COMPONENTTYPE_DST_SPEAKERS"	
    Case #MIXERLINE_COMPONENTTYPE_DST_HEADPHONES	
      ProcedureReturn "MIXERLINE_COMPONENTTYPE_DST_HEADPHONES"	
    Case #MIXERLINE_COMPONENTTYPE_DST_TELEPHONE	
      ProcedureReturn "MIXERLINE_COMPONENTTYPE_DST_TELEPHONE"	
    Case #MIXERLINE_COMPONENTTYPE_DST_WAVEIN	
      ProcedureReturn "MIXERLINE_COMPONENTTYPE_DST_WAVEIN"	
    Case #MIXERLINE_COMPONENTTYPE_DST_VOICEIN
      ProcedureReturn "MIXERLINE_COMPONENTTYPE_DST_VOICEIN"
    Case #MIXERLINE_COMPONENTTYPE_DST_UNDEFINED
      ProcedureReturn "MIXERLINE_COMPONENTTYPE_DST_UNDEFINED"
    Default
      ProcedureReturn "?"    
  EndSelect  
EndProcedure