Ich habe etwas bei google gesucht und habe rausgefunden dass es nicht möglich ist Aufnahmequellen zu muten, weiss jemand wie ich wenigstens die Aufnahmequelle vertausche:

von Mikrofon auf Stereo Mix zu switchen per WINAPI befehl?
Code: Alles auswählen
RunProgram("sndvol32.exe","/record",#NULL$)
Code: Alles auswählen
typedef struct {
DWORD cbStruct;
DWORD dwControlID;
DWORD dwControlType;
DWORD fdwControl;
DWORD cMultipleItems;
CHAR szShortName[MIXER_SHORT_NAME_CHARS];
CHAR szName[MIXER_LONG_NAME_CHARS];
union {
struct {
LONG lMinimum;
LONG lMaximum;
};
struct {
DWORD dwMinimum;
DWORD dwMaximum;
};
DWORD dwReserved[6];
} Bounds;
union {
DWORD cSteps;
DWORD cbCustomData;
DWORD dwReserved[6];
} Metrics;
} MIXERCONTROL,
Code: Alles auswählen
Structure MIXERCONTROL
cbStruct.l
dwControlID.l
dwControlType.l
fdwControl.l
cMultipleItems.l
szShortName.b[#MIXER_SHORT_NAME_CHARS]
szName.b[#MIXER_LONG_NAME_CHARS]
StructureUnion ;Bounds
lMinimum.l
lMaximum.l
dwMinimum.l
dwMaximum.l
Reserved.l[6]
EndStructureUnion
StructureUnion ; Metric
cSteps.l
cbCustomData.l;
dwReserved.l[6];
EndStructureUnion
EndStructure
Code: Alles auswählen
#MAXPNAMELEN = 32
Structure hMIXERLINE
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]
EndStructure
Structure helpMixerline Extends hMixerline
dwType.l
dwDeviceID.l
wMid.w
wPid.w
vDriverVersion.l
szPname.b[#MAXPNAMELEN]
EndStructure
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
Structure MIXERCONTROLDETAILSUNSIGNED
dwValue.l
EndStructure
Structure MIXERCONTROLDETAILS_LISTTEXT
dwParam1.l
dwParam2.l
szName.b[#MIXER_LONG_NAME_CHARS];
EndStructure
;******************************************************************************
Procedure ZeroMemory(adr,len)
For i=0 To len-1
PokeB(adr+i,0)
Next
EndProcedure
;******************************************************************************
Procedure ASL_ERR(err.l,source.s)
Select err
Case #MMSYSERR_NOERROR
ProcedureReturn 1
Case #MIXERR_INVALLINE
msg.s = "The audio line reference is invalid."
Case #MMSYSERR_BADDEVICEID
msg.s = "The hmxobj parameter specifies an invalid device identifier."
Case #MMSYSERR_INVALFLAG
msg.s = "One Or more flags are invalid."
Case #MMSYSERR_INVALHANDLE
msg.s = "The hmxobj parameter specifies an invalid handle."
Case #MMSYSERR_INVALPARAM
msg.s = "One Or more parameters are invalid."
Case #MMSYSERR_NODRIVER
msg.s = "No mixer device is available For the object specified by hmxobj."
Default
msg = "Unknown"
EndSelect
MessageRequester(source, msg, #PB_MessageRequester_Ok | #MB_ICONHAND)
ProcedureReturn 0
EndProcedure
;******************************************************************************
Procedure DebugMixerLine(*mxl.helpMIXERLINE)
Debug "--------MIXERLINE----------"
Debug "dwDestination: "+Str(*mxl\dwDestination )+ " Out Audiostreams 0 = 1"
Debug "dwSource: "+Str(*mxl\dwSource ) + " In Audiostreams 0 = 1"
Debug "dwLine: " + Str(*mxl\dwLineID ) + " use this ID for later Infos and Settings"
Debug "fdwLine: "+Str(*mxl\fdwLine )
Debug "dwUSer: "+ Str(*mxl\dwUser )
Debug "dwComponentType: "+Str(*mxl\dwComponentType )
Debug "cChannels: " + Str(*mxl\cChannels.l )
Debug "cConnections: "+ Str(*mxl\cConnections )
Debug "cControls: "+Str(*mxl\cControls )+ " = Faders, Pan, Mute And so on"
Debug "dwType: "+Str(*mxl\dwType)
Debug "dwDeviceID: "+Str(*mxl\dwDeviceID)
Debug "wMid: "+Str(*mxl\wMid)
Debug "wPid: "+Str(*mxl\wPid)
Debug "vDriverVersion: "+ Str(*mxl\vDriverVersion)
For i = 0 To #MIXER_SHORT_NAME_CHARS-1
s$ = s$+Chr(PeekB(@*mxl\szShortName[i]))
Next
Debug "szShortName: "+ s$
s$ = "";
For i = 0 To #MIXER_LONG_NAME_CHARS-1
s$ = s$+Chr(PeekB(@*mxl\szName[i]))
Next
Debug "szLongName: "+s$
Debug "-------End MIXERLINE---------"
Debug""
EndProcedure
;******************************************************************************
Procedure DebugMixerControl(*mxctrl.MIXERCONTROL)
Debug "--------MIXERCONTROL-----------"
Debug "dwControlID: " + Str(*mxctrl\dwControlID)
Debug "dwControlType: " + Str(*mxctrl\dwControlType)
Debug "cMultipleItems: " + Str(*mxctrl\cMultipleItems)
For i = 0 To #MIXER_SHORT_NAME_CHARS-1
s$ = s$+Chr(PeekB(@*mxctrl\szShortName[i]))
Next
Debug "szShortName: "+ s$
s$ = "";
For i = 0 To #MIXER_LONG_NAME_CHARS-1
s$ = s$+Chr(PeekB(@*mxctrl\szName[i]))
Next
Debug "szLongName: "+s$
Debug "lMinimum: " + Str(*mxctrl\lMinimum)
Debug "lMaximum: " + Str(*mxctrl\lMaximum)
Debug "dwMinimum: " + Str(*mxctrl\dwMinimum)
Debug "dwMaximum: " + Str(*mxctrl\dwMaximum)
Debug "cSteps: " + Str(*mxctrl\cSteps)
Debug "-------End MIXERCONTROL--------"
Debug ""
EndProcedure
;******************************************************************************
Procedure ASL_MixerGetRecordChannel(mixerID,*ChannelNumber.l)
ZeroMemory(mxl.MIXERLINE, SizeOf(MIXERLINE))
mxl\cbStruct = SizeOf(MIXERLINE)
mxl\dwComponentType = #MIXERLINE_COMPONENTTYPE_DST_WAVEIN
Result = mixerGetLineInfo_(mixerID,mxl,#MIXER_GETLINEINFOF_COMPONENTTYPE)
If Not ASL_ERR(Result,"API: MixerGetLineInfo")
ProcedureReturn = 0
EndIf
DebugMixerLine(mxl)
ZeroMemory(mxlctrls.MIXERLINECONTROLS, SizeOf(MIXERLINECONTROLS));
mxlctrls\cbStruct = SizeOf(MIXERLINECONTROLS);
mxlctrls\dwLineID = mxl\dwLineID;
mxlctrls\cControls = mxl\cControls;
mxlctrls\dwControlType = #MIXERCONTROL_CONTROLTYPE_MUX; #MIXERCONTROL_CONTROLTYPE_VOLUME,#MIXERCONTROL_CONTROLTYPE_PAN,#MIXERCONTROL_CONTROLTYPE_MUTE
mxlctrls\cbmxctrl = SizeOf(MIXERCONTROL);
Bytes = (SizeOf(MIXERCONTROL)* mxlctrls\cControls) ; Bytes(SizeOF Structur[X])
*control = AllocateMemory(Bytes) ; Allocate Memory for Structur Array
mxlctrls\pamxctrl = *control ; Pointer
;---- second... Call MixerGetLineControls -> mxlctrl.MixerLineControls
Result = mixerGetLineControls_(mixerID,mxlctrls,#MIXER_GETLINECONTROLSF_ONEBYTYPE)
If Not ASL_ERR(Result,"API: MixerGetLineControls")
ProcedureReturn = 0
EndIf
CopyMemory(*Control,ctrl.Mixercontrol,SizeOf(Mixercontrol))
For i = o To mxl\cControls -1
CopyMemory(*Control+(i*SizeOf(Mixercontrol)),ctrl.Mixercontrol,SizeOf(Mixercontrol))
DebugMixerControl(@ctrl)
Next
If ctrl\dwControlType = #MIXERCONTROL_CONTROLTYPE_MUX
ZeroMemory(mcd.MIXERCONTROLDETAILS, SizeOf(MIXERCONTROLDETAILS));
mcd\cbStruct = SizeOf(MIXERCONTROLDETAILS);
mcd\dwControlID = ctrl\dwControlID
mcd\cChannels = 1;
PokeL(mcd+12,ctrl\cMultipleItems)
mcd\cbDetails = SizeOf(MIXERCONTROLDETAILS_BOOLEAN)
*lv = AllocateMemory(mcd\cChannels * ctrl\cMultipleItems * mcd\cbDetails )
mcd\paDetails = *lv
ZeroMemory(*lv, MemorySize(*lv));
Result = mixerGetControlDetails_(mixer,mcd,#MIXER_GETCONTROLDETAILSF_VALUE)
If Not ASL_ERR(Result,"API: MixerGetControlDetails")
ProcedureReturn = 0
EndIf
For i = 0 To ctrl\cMultipleItems-1
If PeekL(*lv+i*4) = 1
NumberSelect = i
EndIf
Next
ZeroMemory(mcd.MIXERCONTROLDETAILS, SizeOf(MIXERCONTROLDETAILS));
mcd\cbStruct = SizeOf(MIXERCONTROLDETAILS);
mcd\dwControlID = ctrl\dwControlID
mcd\cChannels = 1;
PokeL(mcd+12,ctrl\cMultipleItems)
mcd\cbDetails = SizeOf(MIXERCONTROLDETAILS_LISTTEXT)
*fl = AllocateMemory(SizeOf(MIXERCONTROLDETAILS_LISTTEXT)*mcd\cChannels * ctrl\cMultipleItems * mcd\cbDetails)
mcd\paDetails = *fl
Result = mixerGetControlDetails_(mixer,mcd,#MIXER_GETCONTROLDETAILSF_LISTTEXT)
If Not ASL_ERR(Result,"API: MixerGetControlDetails")
ProcedureReturn = 0
EndIf
*Text = AllocateMemory(#MIXER_LONG_NAME_CHARS)
For i = 0 To ctrl\cMultipleItems -1
CopyMemory(*fl+(i*SizeOf(MIXERCONTROLDETAILS_LISTTEXT)+8),*Text,64)
s$ = "";
For y = 0 To #MIXER_LONG_NAME_CHARS-1
s$ = s$+Chr(PeekB(*Text+y))
Next
Debug "Channels = "+s$
If NumberSelect = i
NameSelect.s = s$
EndIf
Next
PokeL(*ChannelNumber,NumberSelect)
Debug "*****************************"
Debug "Number: "+Str(NumberSelect)+" "+NameSelect +" selected"
Debug "*****************************"
ProcedureReturn 1
EndIf ; If ctrl\dwControlType = #MIXERCONTROL_CONTROLTYPE_MUX
ProcedureReturn 0
EndProcedure
;******************************************************************************
mixerID = 0
ASL_MixerGetRecordChannel(mixerID,@ChannelNumber.l)
Debug ChannelNumber