hi,
ich wollte immer mal bei TS2 einfache lustige Sounds senden und habe natürlich sofort erfolglos nach guten Programmen gegoogelt. Das ist auch der Grund warum ich dieses Programm hier geschrieben habe.
Man kann in der GUI Hotkeys mit Soundfiles hinzufügen und löschen und diese dann setzen. Es muss TS2 nicht gestartet sein oder auf dem Rechner man kann auch einfach dann per hotkey sounds abspielen.
Um aber bei TS2 zu senden habe ich im eng. Forum gesucht und eine nützliche Funktionsammelung gefunden, die ich auch verwende. Jedoch war diese nicht mit der Soundkarte eines Freundes kompatibel und mit eines anderen schon -.- o.O.
Was fehlt:
mehrere Presets mit eigener Dateiendung zum laden etc.
Optimierung und Fehlerabfänge -.-
Naja hier mal ein Bild:
[Blockierte Grafik: http://leviathan-design.de/~upload1/ss143240.jpg]
Als erstes auf View-> Config und Mikrofon und Input einstellen
Download (ist a weng größer da schon ca. 60 sounds dabei sind):
Klick
Source:
Spoiler anzeigen
;// made by Leviathan
#include <GUIConstants.au3>
#Include <GuiListView.au3>
#include <MXSelectInputSrc.au3>
#Include <Misc.au3>
#NoTrayIcon
;----------Main-GUI-----------------
$main_gui = GUICreate("TS2- Soundinjector", 458, 310, 193, 115)
$list = GUICtrlCreateListView("HotKey | Sound", 0, 0, 345, 257)
_GUICtrlListViewSetColumnWidth($list, 0, 100)
_GUICtrlListViewSetColumnWidth($list, 1, 225)
$add_button = GUICtrlCreateButton("Add", 8, 264, 65, 17, 0)
$delete_button = GUICtrlCreateButton("Delete",80, 264, 65, 17, 0)
$edit_button = GUICtrlCreateButton("Activate Hks", 152, 264, 65, 17, 0)
$refreshbutton = GUICtrlCreateButton("Refresh", 224, 264, 65, 17, 0)
$sendbutton = GUICtrlCreateButton("Send", 368, 64, 73, 17, 0)
$testbutton = GUICtrlCreateButton("Test", 368, 88, 73, 17, 0)
$infolabel = GUICtrlCreateLabel("", 352, 0, 100, 52)
$ts2key_label = GUICtrlCreateLabel("Key: ", 360, 120, 40, 17)
GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
$activedevice_label = GUICtrlCreateLabel("active device:", 360, 168, 85, 17)
GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
$activedevice = GUICtrlCreateInput("", 352, 184, 105, 21)
$switch_button = GUICtrlCreateButton("Switch", 376, 208, 65, 17, 0)
$MenuFile = GUICtrlCreateMenu("File")
$Menuopenini = GUICtrlCreateMenuItem("Open Ini", $MenuFile)
$Menuclose = GUICtrlCreateMenuItem("Close", $MenuFile)
$MenuEdit = GUICtrlCreateMenu("View")
$Menuconfig = GUICtrlCreateMenuItem("Config", $MenuEdit)
$Menuquestion = GUICtrlCreateMenu("?")
$Menuabout = GUICtrlCreateMenuItem("About", $Menuquestion)
$Menuhelp = GUICtrlCreateMenuItem("Help", $Menuquestion)
$Menureportbug = GUICtrlCreateMenuItem("Report Bug", $Menuquestion)
GUISetState(@SW_SHOW)
;----------Config-GUI-----------------
$config_gui = GUICreate("Configuration", 206, 141, 192, 112, -1, $WS_EX_TOOLWINDOW)
$micro_combo = GUICtrlCreateCombo("", 56, 72, 145, 25)
$input_combo = GUICtrlCreateCombo("", 56, 96, 145, 25)
$micro_label = GUICtrlCreateLabel("Microphone", 0, 72, 60, 17)
$input_label = GUICtrlCreateLabel("Input:", 0, 96, 31, 17)
$save_button = GUICtrlCreateButton("Save", 64, 120, 89, 17, 0)
$key_label = GUICtrlCreateLabel("Send Key: ", 16, 8, 168, 17)
$set_button = GUICtrlCreateButton("Set", 16, 40, 75, 17, 0)
;$clear_button = GUICtrlCreateButton("Clear", 104, 40, 75, 17, 0)
GUISetState(@SW_HIDE)
;-------------------------------------
;----------Presskey-GUI-----------------
$presskey_gui = GUICreate("Push-To-Talk Key", 140, 44, 216, 212, -1, $WS_EX_TOOLWINDOW)
$presskey_label = GUICtrlCreateLabel("Press the key", 24, 8, 98, 20)
GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")
GUISetState(@SW_HIDE)
;-------------------------------------
;----------Hotkey-Setup-GUI-----------------
$hksetup_gui = GUICreate("Hotkey-Setup", 174, 95, 194, 112, -1, $WS_EX_TOOLWINDOW)
$hotkeyinput = GUICtrlCreateInput("", 128, 8, 41, 21)
$hotkeyinput_combo = GUICtrlCreateCombo("STRG+", 0, 8, 121, 25)
GUICtrlSetData(-1, "STRG+|STRG+SHIFT+|STRG+ALT+|ALT+SHIFT+")
$ok_button = GUICtrlCreateButton("OK", 0, 72, 81, 17, 0)
$newsoundfile_input = GUICtrlCreateInput("", 0, 40, 121, 21)
$browse_button = GUICtrlCreateButton("...", 128, 40, 41, 17, 0)
$cancel_button = GUICtrlCreateButton("Cancel", 96, 72, 73, 17, 0)
GUISetState(@SW_HIDE)
;-------------------------------------
_refresh()
[/autoit] [autoit][/autoit] [autoit]While 1
$msg = GUIGetMsg(1)
If $msg[0] = $GUI_EVENT_CLOSE AND $msg[1] = $main_gui Then Exit
If $msg[0] = $testbutton AND $msg[1] = $main_gui Then _test()
If $msg[0] = $refreshbutton AND $msg[1] = $main_gui Then _refresh()
If $msg[0] = $sendbutton AND $msg[1] = $main_gui Then _send()
If $msg[0] = $GUI_EVENT_CLOSE AND $msg[1] = $config_gui Then GUISetState(@SW_HIDE, $config_gui)
If $msg[0] = $Menuclose AND $msg[1] = $main_gui Then Exit
If $msg[0] = $Menuconfig AND $msg[1] = $main_gui Then
$gui1 = WinGetPos("TS2- Soundinjector")
WinMove("Configuration", "", $gui1[0]+$gui1[2]+5, $gui1[1]+5)
GUISetState(@SW_SHOW, $config_gui)
EndIf
If $msg[0] = $set_button AND $msg[1] = $config_gui Then _setkey()
If $msg[0] = $save_button AND $msg[1] = $config_gui Then _configsave()
If $msg[0] = $Menuopenini AND $msg[1] = $main_gui Then ShellExecute(@ScriptDir&"\haschs.ini")
If $msg[0] = $switch_button AND $msg[1] = $main_gui Then _switch()
If $msg[0] = $add_button AND $msg[1] = $main_gui Then _addasound()
If $msg[0] = $delete_button AND $msg[1] = $main_gui Then _deleteasound()
If $msg[0] = $edit_button AND $msg[1] = $main_gui Then _hks()
If $msg[0] = $ok_button AND $msg[1] = $hksetup_gui Then _addsound()
If $msg[0] = $browse_button AND $msg[1] = $hksetup_gui Then _browse()
WEnd
Func _addsounds()
$soundkey = IniReadSection(@ScriptDir&"\haschs.ini", "sounds")
If @Error Then
Else
Dim $item1[$soundkey[0][0]+1]
For $i = 1 To $soundkey[0][0]
$itemcontent = StringSplit($soundkey[$i][1], "|")
If IsArray($itemcontent) = 1 Then
$item1[$i] = GuiCtrlCreateListViewItem($itemcontent[2]&"|"&$itemcontent[1], $list)
EndIf
Next
EndIf
EndFunc ;==> _addsounds()
Func _editsound()
$sound = _GUICtrlListViewGetItemText($list, -1, 1)
EndFunc ;==> _editsound()
Func _addsound()
If $edit = 1 Then
$hkprefix = GUICtrlRead($hotkeyinput_combo)
$hkk = GUICtrlRead($hotkeyinput)
If StringLen($hkk )=1 Then $valid = 1
$soundfilenew = GUICtrlRead($newsoundfile_input)
If $soundfilenew = "" Then $valid=0
If $valid = 1 Then
$hotkeynew = $hkprefix&$hkk
IniWrite(@ScriptDir&"\haschs.ini", "sounds", "s"&_GUICtrlListViewGetCurSel($list), $soundfilenew&"|"&$hotkeynew)
Else
ToolTip("Hotkey has more than 1 char"&@CRlf&"or soundfile isnt in sounds folder!")
sleep(500)
ToolTip("")
EndIf
_refresh()
GUISetState(@SW_HIDE, $hksetup_gui)
Else
$valid = 0
$itemcount = _GUICtrlListViewGetItemCount($list)
;----------------------------------------------------------------------------------;
$hkprefix = GUICtrlRead($hotkeyinput_combo)
$hkk = GUICtrlRead($hotkeyinput)
If StringLen($hkk )=1 Then $valid = 1
$soundfilenew = GUICtrlRead($newsoundfile_input)
If $soundfilenew = "" Then $valid=0
If $valid = 1 Then
$hotkeynew = $hkprefix&$hkk
$itemcount = $itemcount+1
IniWrite(@ScriptDir&"\haschs.ini", "sounds", "s"&$itemcount, $soundfilenew&"|"&$hotkeynew)
Else
ToolTip("Hotkey has more than 1 char"&@CRlf&"or soundfile isnt in sounds folder!")
sleep(500)
ToolTip("")
EndIf
_refresh()
GUISetState(@SW_HIDE, $hksetup_gui)
EndIf
EndFunc ;==> _addsound()
Func _addasound()
GUISetState(@SW_SHOW, $hksetup_gui)
EndFunc
Func _deleteasound()
$sound = _GUICtrlListViewGetItemText($list, -1, 1)
If $sound <> "" Then
_GUICtrlListViewDeleteItem ($list, _GUICtrlListViewGetCurSel($list))
$count = _GUICtrlListViewGetItemCount ($list)
;MsgBox(0,"", $count)
If $count > 1 Then
;----SavingSoundstoarray---
Dim $listview[$count+1][$count+1]
For $i = 0 To $count
$listview[$i][0] = _GUICtrlListViewGetItemText($list, $i, 0)
$listview[$i][1] = _GUICtrlListViewGetItemText($list, $i, 1)
Next
;-----Iniclearing-------
$ini = IniReadSection(@ScriptDir&"\haschs.ini", "sounds")
For $i = 0 To $ini[0][0]
IniDelete (@ScriptDir&"\haschs.ini", "sounds", "s"&$i)
Next
If IsArray($listview) = 1 Then
For $i = 0 To $count
$sound = $listview[$i][1]
$key = $listview[$i][0]
If $sound <> "" AND $key <> "" Then
IniWrite(@ScriptDir&"\haschs.ini", "sounds", "s"&$i+1, $sound&"|"&$key)
EndIf
Next
EndIf
Else
_GUICtrlListViewDeleteItem ($list, $count)
IniDelete (@ScriptDir&"\haschs.ini", "sounds", "s"&$count+1)
EndIf
_refresh()
Else
ToolTip("nothing selected")
sleep(500)
ToolTip("")
EndIf
EndFunc
Func _editasound()
GUISetState(@SW_SHOW, $hksetup_gui)
Global $edit=1
$sound = _GUICtrlListViewGetItemText($list, -1, 1)
$key = _GUICtrlListViewGetItemText($list, -1, 0)
If StringInStr($key, "STRG+") >= 1 Then
GUICtrlSetData($hotkeyinput_combo, "STRG+|STRG+SHIFT+|STRG+ALT+|ALT+SHIFT+", "STRG+")
$key = StringSplit($key, "+")
$key = $key[$key[0]]
GUICtrlSetData($hotkeyinput, $key)
EndIf
If StringInStr($key, "STRG+SHIFT+") >= 1 Then
GUICtrlSetData($hotkeyinput_combo, "STRG+|STRG+SHIFT+|STRG+ALT+|ALT+SHIFT+", "STRG+SHIFT+")
$key = StringSplit($key, "+")
$key = $key[$key[0]]
GUICtrlSetData($hotkeyinput, $key)
EndIf
If StringInStr($key, "STRG+ALT+") >= 1 Then
GUICtrlSetData($hotkeyinput_combo, "STRG+|STRG+SHIFT+|STRG+ALT+|ALT+SHIFT+", "STRG+ALT+")
$key = StringSplit($key, "+")
$key = $key[$key[0]]
GUICtrlSetData($hotkeyinput, $key)
EndIf
If StringInStr($key, "ALT+SHIFT+") >= 1 Then
GUICtrlSetData($hotkeyinput_combo, "STRG+|STRG+SHIFT+|STRG+ALT+|ALT+SHIFT+", "ALT+SHIFT+")
$key = StringSplit($key, "+")
$key = $key[$key[0]]
GUICtrlSetData($hotkeyinput, $key)
EndIf
$sound = _GUICtrlListViewGetItemText($list, -1, 1)
GUICtrlSetData($newsoundfile_input, $sound)
EndFunc
Func _browse()
Do
$valid = 1
Global $soundfilenew = FileOpenDialog("Select Soundfile", @ScriptDir&"\sounds\", "Audio (*.*)")
If StringinStr($soundfilenew, "\sounds\") = 0 Then $valid = 0
If $valid = 1 Then
$soundfilenew = StringSplit($soundfilenew, "\")
If IsArray($soundfilenew) Then $soundfilenew = $soundfilenew[$soundfilenew[0]]
EndIf
Until $valid=1
GUICtrlSetData($newsoundfile_input, $soundfilenew)
EndFunc
Func _test()
$sound = _GUICtrlListViewGetItemText($list, -1, 1)
If $sound <> "" Then
SoundPlay(@ScriptDir&"\sounds\"&$sound, 1)
Else
ToolTip("nothing selected")
sleep(500)
ToolTip("")
EndIf
EndFunc ;==> _test()
Func _send()
If $mixernumber <> "" AND $micronumber <> "" Then
$sound = _GUICtrlListViewGetItemText($list, -1, 1)
If $sound <> "" Then
GetSetLineSrc($mixers,$curmixer,$mixernumber)
;-----Current Mixxer-----
$currentinputdevice=GetSetLineSrc($mixers,$index,0,0)
GUICtrlSetData($activedevice, $mxInList[$currentinputdevice][$lst_destname])
;---------------------------
sleep(100)
_sendkey("down", "u")
SoundPlay(@ScriptDir&"\sounds\"&$sound, 1)
_sendkey("up", "u")
sleep(100)
GetSetLineSrc($mixers,$curmixer,$micronumber)
sleep(100)
;-----Current Mixxer-----
$currentinputdevice=GetSetLineSrc($mixers,$index,0,0)
GUICtrlSetData($activedevice, $mxInList[$currentinputdevice][$lst_destname])
;---------------------------
Else
ToolTip("nothing selected")
sleep(500)
ToolTip("")
EndIf
Else
ToolTip("Error while detecting Mixer")
sleep(500)
ToolTip("")
EndIf
EndFunc
Func _sendhk()
$sound = ""
$hk = @HotKeyPressed
;MsgBox(0,"", $hk)
$ini = IniReadSection(@ScriptDir&"\active.lev", "hk")
If IsArray($ini) Then
For $i = 1 To $ini[0][0]
$hk1 = StringSplit($ini[$i][1],"|")
If $hk1[1] = $hk Then
$sound = StringSplit($ini[$i][1],"|")
$sound = $sound[$sound[0]]
;MsgBox(0,"", $sound)
EndIf
Next
If $mixernumber <> "" AND $micronumber <> "" Then
If $sound <> "" Then
GetSetLineSrc($mixers,$curmixer,$mixernumber)
;-----Current Mixxer-----
$currentinputdevice=GetSetLineSrc($mixers,$index,0,0)
GUICtrlSetData($activedevice, $mxInList[$currentinputdevice][$lst_destname])
;---------------------------
sleep(100)
_sendkey("down", "u")
SoundPlay(@ScriptDir&"\sounds\"&$sound, 1)
_sendkey("up", "u")
sleep(100)
GetSetLineSrc($mixers,$curmixer,$micronumber)
sleep(100)
;-----Current Mixxer-----
$currentinputdevice=GetSetLineSrc($mixers,$index,0,0)
GUICtrlSetData($activedevice, $mxInList[$currentinputdevice][$lst_destname])
;---------------------------
Else
EndIf
Else
EndIf
EndIf
EndFunc
Func _hks()
Global $active = 0
FileDelete(@ScriptDir&"\active.lev")
$hotkey1 = 0
$count = _GUICtrlListViewGetItemCount ($list)
;MsgBox(0,"", $count)
For $i = 0 To $count
$hotkey = _GUICtrlListViewGetItemText($list, $i, 0)
;MsgBox(0,"", $hotkey)
If StringInStr($hotkey, "STRG+") <> 0 Then
$key = StringSplit($hotkey, "+")
$key = $key[$key[0]]
$hotkey1 = "^"&$key
EndIf
If StringInStr($hotkey, "STRG+SHIFT+") <> 0 Then
$key = StringSplit($hotkey, "+")
$key = $key[$key[0]]
$hotkey1 = "^+"&$key
EndIf
If StringInStr($hotkey, "STRG+ALT+") <> 0 Then
$key = StringSplit($hotkey, "+")
$key = $key[$key[0]]
$hotkey1 = "^!"&$key
EndIf
If StringInStr($hotkey, "ALT+SHIFT+") <> 0 Then
$key = StringSplit($hotkey, "+")
$key = $key[$key[0]]
$hotkey1 = "!+"&$key
EndIf
If _GUICtrlListViewGetItemText($list, $i, 1) <> "" Then
HotKeySet($hotkey1, "_sendhk")
IniWrite(@ScriptDir&"\active.lev", "hk", "s"&$i+1, $hotkey1&"|"&_GUICtrlListViewGetItemText($list, $i, 1))
EndIf
Next
EndFunc
Func _sendkey($state, $key)
If $state = "down" Then
If $key = "middle" Then MouseDown("middle")
If $key <> "middle" Then send("{"&$key&" down}")
EndIf
If $state = "up" Then
If $key = "middle" Then MouseUp("middle")
If $key <> "middle" Then send("{"&$key&" up}")
EndIf
EndFunc
Func _refresh()
_GUICtrlListViewDeleteAllItems ($list)
_addsounds()
Global $key = IniRead(@ScriptDir&"\haschs.ini", "main", "ts2sendkey", "")
GUICtrlSetData($key_label, "Send Key: "&$key)
Global $edit=0
;------Combo-Box-content------------
Global $mixernames=""
Global $FormSelectInput =0
Global $TV_SelectInput = 0
Global $CMB_DevName=0
Global $CKB_EnableLinefocus =0
Global $lastlinesrc=-1
Global $curmixer= 0
Global $Index = 0
If GetAllRecordDevs($mixers,$mxline) Then GetLineConnectionsNames($mixers,$mxInList,$curmixer)
$combo = ""
For $i=0 To UBound($mxInList)-1
If $mxInList[$i][$lst_destname] <> "" Then
$combo = $combo&"|"&$mxInList[$i][$lst_destname]
EndIf
Next
;-----Current Mixxer-----
$currentinputdevice=GetSetLineSrc($mixers,$index,0,0)
GUICtrlSetData($activedevice, $mxInList[$currentinputdevice][$lst_destname])
;---------------------------
GUICtrlSetData($ts2key_label, "Key: "&IniRead(@ScriptDir&"\haschs.ini", "main", "ts2sendkey", "notset"))
GUICtrlSetData($micro_combo, $combo, IniRead(@ScriptDir&"\haschs.ini", "main", "microphone", ""))
GUICtrlSetData($input_combo, $combo, IniRead(@ScriptDir&"\haschs.ini", "main", "input", ""))
;------Combo-Box-content------------
If GetAllRecordDevs($mixers,$mxline) Then GetLineConnectionsNames($mixers,$mxInList,$curmixer)
For $i=0 To UBound($mxInList)-1
If $mxInList[$i][$lst_destname] = IniRead(@ScriptDir&"\haschs.ini", "main", "input", "") Then
$mixer=$mxInList[$i][$lst_destname]
Global $mixernumber=$i
EndIf
Next
For $i=0 To UBound($mxInList)-1
If $mxInList[$i][$lst_destname] = IniRead(@ScriptDir&"\haschs.ini", "main", "microphone", "") Then
$micro=$mxInList[$i][$lst_destname]
Global $micronumber=$i
EndIf
Next
EndFunc ;==> _refresh()
Func _setkey()
$gui1 = WinGetPos("Configuration")
WinMove("Push-To-Talk Key", "", $gui1[0]+($gui1[2]/2)-70, $gui1[1]+($gui1[3]/2)-22)
GUISetState(@SW_SHOW, $presskey_gui)
sleep(500)
While 1
$key = _GetKeyPressed()
If ($key <> -1) Then Exitloop
If _IsPressed("04") = 1 Then
$key = "middle"
Exitloop
EndIf
WEnd
;MsgBox(0,"",$key)
GUICtrlSetData($key_label, "Send Key: "&StringLower($key))
GUISetState(@SW_Hide, $presskey_gui)
EndFunc
Func _configsave()
IniWrite(@ScriptDir&"\haschs.ini", "main", "microphone", GUICtrlRead($micro_combo))
IniWrite(@ScriptDir&"\haschs.ini", "main", "input", GUICtrlRead($input_combo))
$key = StringReplace(GUICtrlRead($key_label), "Send Key: ", "")
IniWrite(@ScriptDir&"\haschs.ini", "main", "ts2sendkey", $key)
EndFunc
Func _switch()
;-----Current Mixxer-----
$currentinputdevice=GetSetLineSrc($mixers,$index,0,0)
GUICtrlSetData($activedevice, $mxInList[$currentinputdevice][$lst_destname])
;---------------------------
If GetAllRecordDevs($mixers,$mxline) Then GetLineConnectionsNames($mixers,$mxInList,$curmixer)
For $i=0 To UBound($mxInList)-1
If $mxInList[$i][$lst_destname] = IniRead(@ScriptDir&"\haschs.ini", "main", "input", "") Then
$mixer=$mxInList[$i][$lst_destname]
Global $mixernumber=$i
EndIf
Next
For $i=0 To UBound($mxInList)-1
If $mxInList[$i][$lst_destname] = IniRead(@ScriptDir&"\haschs.ini", "main", "microphone", "") Then
$micro=$mxInList[$i][$lst_destname]
Global $micronumber=$i
EndIf
Next
$device = GUICtrlRead($activedevice)
If $device = IniRead(@ScriptDir&"\haschs.ini", "main", "input", "") Then
GetSetLineSrc($mixers,$curmixer,$micronumber)
sleep(100)
;-----Current Mixxer-----
$currentinputdevice=GetSetLineSrc($mixers,$index,0,0)
GUICtrlSetData($activedevice, $mxInList[$currentinputdevice][$lst_destname])
;---------------------------
EndIf
If $device = IniRead(@ScriptDir&"\haschs.ini", "main", "microphone", "") Then
GetSetLineSrc($mixers,$curmixer,$mixernumber)
sleep(100)
;-----Current Mixxer-----
$currentinputdevice=GetSetLineSrc($mixers,$index,0,0)
GUICtrlSetData($activedevice, $mxInList[$currentinputdevice][$lst_destname])
;---------------------------
EndIf
EndFunc
;===============================================================================
; Function: _GetKeyPressed($iOption)
; Description: Returns the keyboard key that was pressed.
; Parameter(s): $iOption = 1: Returns ASCII value for the key pressed.
; $iOption = 0: Returns Hex value for the key pressed.
; $iOption = 2: Returns the character for the key pressed.
; Requirement(s): Must include <misc.au3>
; Return Value(s): On Success - Returns a character corresponding the keyboard button pressed.
; On Failure - -1(No key was pressed) and Set
; @ERROR to: 1 - No key was pressed.
; Author(s): Chris95219 and The Author of _IsPressed()
; Note(s):
;
;===============================================================================
Func _GetKeyPressed($iOption = 2)
For $i = 0 to 255
if (_IsPressed(Hex($i, 2))) Then
Select
Case $iOption = 0
Return Hex($i)
Case $iOption = 1
Return $i
Case $iOption = 2
Return Chr($i)
EndSelect
EndIf
Next
SetError(1)
Return -1
EndFunc
benötigte Datein um Source laufen zu lassen:
Spoiler anzeigen
;by wiredbits
;Selects inputline to record off of
;my system has two sounds cards and all went well with both
;need to clean up a few things and add comments....well maybe..Grin
#include <GUIConstants.au3>
#include <MXSelectInputSrc_include.au3>
$trayicon="start.ico"
$mixernames=""
$FormSelectInput =0
$TV_SelectInput = 0
$CMB_DevName=0
$CKB_EnableLinefocus =0
$test=0
;default mixer is always 0 (so far) which is last audio device installed or prefered deviced selected by user
$defaultmixer=0
$lastlinesrc=-1
$curmixer=$defaultmixer
If GetAllRecordDevs($mixers,$mxline) Then GetLineConnectionsNames($mixers,$mxInList,$curmixer)
;OpenSelectInputSrcWND()
;While 1
; $admsg = GuiGetMsg(1)
; $msg=$admsg[0]
; Select
; Case $FormSelectInput<>0 And $admsg[1]=$FormSelectInput And $msg = $GUI_EVENT_CLOSE
; GUIDelete($FormSelectInput)
; $FormSelectInput=0
; ExitLoop
; Case $admsg[1]=$FormSelectInput
; FormSelectInputMsgs($msg)
; EndSelect
;WEnd
;CloseAllMixers($mixers)
Func FormSelectInputMsgs($msg)
Local $cnt,$i,$x,$id,$src,$tmp,$state
$cnt=$mxInList[0][0]
If $cnt Then
Select
Case $msg=$CMB_DevName
$tmp=GUICtrlRead($CMB_DevName)
$x=-1
For $i=0 To $mixers[0][0]-1
If $tmp=$mixers[$i][$MIX_DEVNAME] Then
$x=$i
ExitLoop
EndIf
Next ;$i
If $x<>-1 and $x<>$curmixer Then
$curmixer=$x
GUICtrlDelete($TV_SelectInput)
$TV_SelectInput = GUICtrlCreateTreeView(32, 104, 241, 273,BitOR($TVS_HASBUTTONS, $TVS_DISABLEDRAGDROP, $TVS_SHOWSELALWAYS,$TVS_CHECKBOXES),$WS_EX_CLIENTEDGE)
GetLineConnectionsNames($mixers,$mxInList,$curmixer)
SetupTreeivew($x)
EndIf
Case $msg>=$mxInList[0][$lst_ctrid] And $msg<=$mxInList[$cnt-1][$lst_ctrid]
$id=GUICtrlRead($TV_SelectInput)
For $i=0 To $cnt-1
If $id=$mxInList[$i][$lst_ctrid] Then $src=$i
GUICtrlSetState($mxInList[$i][$lst_ctrid],$GUI_UNCHECKED)
Next ;i
GUICtrlSetState($id,$GUI_CHECKED)
$i=GetSetLineSrc($mixers,$curmixer,0,0)
If $i<>$src Then $lastlinesrc=GetSetLineSrc($mixers,$curmixer,$src)
EndSelect
EndIf
EndFunc
Func OpenSelectInputSrcWND()
If $FormSelectInput=0 Then
;Generated with Form Designer preview
$FormSelectInput = GUICreate("Please Select Input Line", 304, 432, 286, 157)
GUISetFont(10, 400, 0, "MS Sans Serif")
GUISetIcon (@ScriptDir & "\"& $trayicon,0)
$CMB_DevName=GUICtrlCreateCombo("", 32, 64, 241, 24)
GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif")
GUICtrlCreateLabel("Available Input lines", 76, 29, 170, 20)
GUICtrlSetFont(-1, 10, 800, 2, "MS Sans Serif")
GUICtrlSetColor(-1, 0x000080)
$TV_SelectInput = GUICtrlCreateTreeView(32, 104, 241, 273,BitOR($TVS_HASBUTTONS, $TVS_DISABLEDRAGDROP, $TVS_SHOWSELALWAYS,$TVS_CHECKBOXES),$WS_EX_CLIENTEDGE)
GUICtrlSetData($CMB_DevName,$mixernames)
GUICtrlSetData($CMB_DevName,$mixers[$curmixer][$MIX_DEVNAME])
SetupTreeivew($curmixer)
GUISetState(@SW_SHOW,$FormSelectInput)
EndIf
EndFunc
Func SetupTreeivew($index)
local $i,$id
If $mxInList[0][0] Then
For $i=0 To $mxInList[0][0]-1
$mxInList[$i][$lst_ctrid]=GUICtrlCreateTreeViewItem($mxInList[$i][$lst_destname],$TV_SelectInput)
Next ;i
$i=GetSetLineSrc($mixers,$index,0,0) ;get current input line
GUICtrlSetState($mxInList[$i][$lst_ctrid],BitOR($GUI_CHECKED,$GUI_FOCUS))
EndIf
EndFunc
Func GetLineConnectionsNames(ByRef $mixers,ByRef $mxInList,$index)
Local $i,$x,$n,$hmxobj,$ret
If $mixers[0][0] Then
$hmxobj=$mixers[$index][$MIX_HMXOBJ]
$x=0
For $n=0 To $mixers[$index][$MIX_CCONNECTIONS]-1
zeroline($mxline)
$mxline[$dwDestination]=$mixers[$index][$MIX_DWLINEID]
$mxline[$dwSource]=$n
$ret=MixerGetLineInfo($hmxobj,$mxline,BitOR($MIXER_OBJECTF_HMIXER,$MIXER_GETLINEINFOF_SOURCE)) ;ask for source lines
If NOT @error Then
$mxInList[$x][$lst_destname]=$mxline[$szName]
$mxInList[$x][$lst_dwComponentType]=$mxline[$dwComponentType]
$x=$x+1
If UBound($mxInList)<$x+1 Then ReDim $mxInList[$x+2][UBound($mxInList,2)]
Else
SetError(1)
Return False
EndIf
Next ;n
$mxInList[0][0]=$x
Return True
Else
SetError(1)
Return False
EndIf
EndFunc
Func GetSetLineSrc($mixers,$index,$srcindex,$doset=1)
Local $i,$x,$arraysize,$channels,$mtiems
CONST $MIXERCONTROLDETAILS_BOOLEAN_SIZEOF=4
Local $mixercontroldetails=DllStructCreate( _
"dword;" & _ ;DWORD cbStruct
"dword;" & _ ;DWORD dwControlID
"dword;" & _ ;DWORD cChannels;
"dword;" & _ ;HWND hwndOwner DWORD cMultipleItems;
"dword;" & _ ;DWORD cbDetails;
"dword") ;LPVOID paDetails;
Local CONST $dwControlID=1
If @error Then Return False
$mitems=$mixers[$index][$MIX_INMULTIITEMS]
$channels=$mixers[$index][$MIX_INCHANNELS]
$arraysize=$channels*$mixers[$index][$MIX_INMULTIITEMS]
$srcindex=$mitems-$srcindex ;reverse array index
If $mitems=0 Then Return False;if no items then no need to display
;the folowing =array of values, array order is reverse of itmes displayed in treeview
Local $plistbool=DllStructCreate("dword["&$arraysize+1 &"]") ;give me one mroe than needed
If @error Then Return False
$hmxobj=$mixers[$index][$MIX_HMXOBJ]
DllStructSetData($mixercontroldetails,$cbStruct,DllStructGetSize($mixercontroldetails))
DllStructSetData($mixercontroldetails,2,$mixers[$index][$MIX_INCTRLID])
DllStructSetData($mixercontroldetails,3,$mixers[$index][$MIX_INCHANNELS])
DllStructSetData($mixercontroldetails,4,$mixers[$index][$MIX_INMULTIITEMS])
DllStructSetData($mixercontroldetails,5,$MIXERCONTROLDETAILS_BOOLEAN_SIZEOF) ;cbDetails to sizeof one bool struct
DllStructSetData($mixercontroldetails,6,DllStructGetPtr($plistbool)) ;paDetails set ptr
$ret = DLLCall("winmm.dll","long","mixerGetControlDetails","hwnd",$hmxobj,"ptr",DllStructGetPtr($mixercontroldetails),"long",BitOR($MIXER_OBJECTF_HMIXER,$MIXER_GETCONTROLDETAILSF_VALUE))
If NOT @error Then
If $ret[0]=$MMSYSERR_NOERROR Then
For $i= 1 To $mitems Step $channels ;
If DllStructGetData($plistbool,1,$i+$channels-1)<>0 then $x=$i
DllStructSetData($plistbool,1,0,$i+$channels-1)
Next ;i
DllStructSetData($plistbool,1,1,$srcindex+$channels-1)
If $doset Then $ret = DLLCall("winmm.dll","long","mixerSetControlDetails","hwnd",$hmxobj,"ptr",DllStructGetPtr($mixercontroldetails),"long",BitOR($MIXER_OBJECTF_HMIXER,$MIXER_SETCONTROLDETAILSF_VALUE))
If NOT @error Then
If $ret[0] =$MMSYSERR_NOERROR Then return $mixers[$index][$MIX_INMULTIITEMS]- $x
EndIf
EndIf
EndIf
Return False
EndFunc
Func GetAllRecordDevs(ByRef $mixers,ByRef $line)
Local $i,$hmxobj,$name
OpenAllMixers($mixers)
If $mixers[0][0]=0 Then Return False
For $i=0 To $mixers[0][0]-1
$hmxobj=$mixers[$i][$MIX_HMXOBJ]
zeroline($line)
$line[$dwLineID]=BitOR($i,0xFFFF0000)
$line[$dwComponentType]=$MIXERLINE_COMPONENTTYPE_DST_WAVEIN
MixerGetLineInfo($hmxobj,$line,$MIXER_GETLINEINFOF_COMPONENTTYPE)
If @error Then Return False
$mixers[$i][$MIX_RECNAME]=$line[$szName] ;wave in ccontrol name
$mixers[$i][$MIX_CCONNECTIONS]=$line[$cConnections] ;number of destination lines
$mixers[$i][$MIX_INCCONTROLS]=$line[$cControls]
$mixers[$i][$MIX_DWLINEID]=$line[$dwLineID] ;line id
$mixers[$i][$MIX_INCHANNELS]=$line[$cChannels]
If NOT GetMxCtrlDetails($mixers,$i) Then Return False
$name=MixerGetDevName($mixers[$i][$MIX_HMXOBJ])
If @error Then Return False
$mixers[$i][$MIX_DEVNAME]=$name
If $mixernames="" Then
$mixernames=$name
Else
$mixernames=$mixernames&"|"&$name
EndIf
Next ;i
Return True
EndFunc
Func GetMxCtrlDetails(ByRef $mixers,$index)
Local $mitems,$chans,$hmxobj,$x,$ret
;local structures are nuked on exit...so i have read..LOL
Local $mixercontrol=DllStructCreate( _
"dword;" & _ ; DWORD cbStruct;
"dword;" & _ ; DWORD dwControlID;
"dword;" & _ ; DWORD dwControlType;
"dword;" & _ ; DWORD fdwControl;
"dword;" & _ ; DWORD cMultipleItems;
"char[16];" & _ ;szShortName[MIXER_SHORT_NAME_CHARS];
"char[64];" & _ ;szName[MIXER_LONG_NAME_CHARS];
"dword[6];" & _ ; DWORD dwReserved[6];
"dword[6]") ; DWORD dwReserved[6];
If @error Then return False
Local $mixerlinecontrols=DllStructCreate( _
"dword;"& _ ; cbStruct;
"dword;" & _ ; DWORD dwLineID;
"dword;" & _ ; DWORD dwControlID DWORD dwControlType;
"dword;" & _ ; DWORD cControls;
"dword;" & _ ; DWORD cbmxctrl;
"ptr") ; LPMIXERCONTROL pamxctrl;
If @error Then return False
$hmxobj=$mixers[$index][$MIX_HMXOBJ]
DllStructSetData($mixerlinecontrols,$cbStruct,DllStructGetSize($mixerlinecontrols))
DllStructSetData($mixerlinecontrols,2,$mixers[$index][$MIX_DWLINEID])
DllStructSetData($mixerlinecontrols,3,$MIXERCONTROL_CONTROLTYPE_MUX)
DllStructSetData($mixerlinecontrols,4,0)
DllStructSetData($mixerlinecontrols,5,DllStructGetSize($mixercontrol))
DllStructSetData($mixerlinecontrols,6,DllStructGetPtr($mixercontrol))
$ret = DLLCall("winmm.dll","long","mixerGetLineControls","hwnd",$hmxobj,"ptr",DllStructGetPtr($mixerlinecontrols),"long",BitOR($MIXER_OBJECTF_HMIXER,$MIXER_GETLINECONTROLSF_ONEBYTYPE ))
If @error Then return False
If $ret[0]<>$MMSYSERR_NOERROR Then
DllStructSetData($mixerlinecontrols,3,$MIXERCONTROL_CONTROLTYPE_SINGLESELECT)
$ret = DLLCall("winmm.dll","long","mixerGetLineControls","hwnd",$hmxobj,"ptr",DllStructGetPtr($mixerlinecontrols),"long",BitOR($MIXER_OBJECTF_HMIXER,$MIXER_GETLINECONTROLSF_ONEBYTYPE ))
If @error Then return False
EndIf
If $ret[0]<>$MMSYSERR_NOERROR Then Return False
$x=DllStructGetData($mixercontrol,3) ;dwControlType get type of control
If BitAND($x,$MIXERCONTROL_CT_CLASS_MASK)=$MIXERCONTROL_CT_CLASS_LIST Then
$chans=$mixers[$index][$MIX_INCHANNELS]
$x=DllStructGetData($mixercontrol,4) ;fwControl
If BitAND($x,$MIXERCONTROL_CONTROLF_UNIFORM) Then $chans=1
$mixers[$index][$MIX_INCHANNELS]=$chans
$x=DllStructGetData($mixercontrol,4) ;fwControl
$mitems= 0
If BitAND($x,$MIXERCONTROL_CONTROLF_MULTIPLE) Then $mitems=DllStructGetData($mixercontrol,5)
$mixers[$index][$MIX_INMULTIITEMS]=$mitems
$mixers[$index][$MIX_INCTRLID]=DllStructGetData($mixercontrol,2)
If $mitems Then Return True
EndIf
Return False
EndFunc
Func zeroline(ByRef $line)
local $i
For $i=0 To UBound($line)-1
$line[$i]=0
Next ;i
EndFunc
Func MixerGetLineInfo($hmxobj,ByRef $line,$flag)
Local $mixerline= DllStructCreate("dword;dword;dword;dword;dword;dword;dword;dword;dword;dword;char[16];char[64];dword;dword;short;short;dword;char[32]")
If @error Then
SetError(1)
Return False
EndIf
Local $i
For $i=1 To UBound($line)-1
DllStructSetData($mixerline,$i,$line[$i])
Next ;i
DllStructSetData($mixerline,$cbStruct,DllStructGetSize($mixerline))
$ret = DLLCall("winmm.dll","long","mixerGetLineInfo","hwnd",$hmxobj,"ptr",DllStructGetPtr($mixerline),"int", $flag)
If @error Then
SetError(1)
Return False
EndIf
for $i=1 To $szMPname
$line[$i]=DllStructGetData($mixerline,$i)
Next ;i
If $ret[0]=$MMSYSERR_NOERROR Then Return True
SetError(1)
Return False
EndFunc
Func MixerGetDevName($uMxId)
Local $mxcaps,$i
$mxcaps=DllStructCreate("short;short;dword;char[32];dword;dword")
$ret = DLLCall("winmm.dll","long","mixerGetDevCaps","int",$uMxId,"ptr",DllStructGetPtr($mxcaps),"int",DllStructGetSize($mxcaps))
If @error Then
SetError(1)
Return False
EndIf
If $ret[0]=$MMSYSERR_NOERROR Then Return DllStructGetData($mxcaps,4)
SetError(2)
return False
EndFunc
;On Entry: handle to mixer an ID is mapped to
;On Exit: ID or 0 if fails
Func MixerGetID($hmxobj)
Local $x,$puMxId
$puMxId=DllStructCreate("udword") ;since a local will be deleted on exit of function
DllStructSetData($puMxId,1,0)
$ret = DLLCall("winmm.dll","long","mixerGetID","hwnd",$hmxobj,"ptr",DllStructGetPtr($puMxId),"int",$MIXER_OBJECTF_HMIXER)
If @error Or $ret[0]<>$MMSYSERR_NOERROR Then
SetError(1)
Return False
EndIf
Return DllStructGetData($puMxId,1)
EndFunc
;On Entry: 2 dim array
;On Exit: MIX_HMXOBJ set to return value from mixeropn...check for @error
Func OpenAllMixers(ByRef $mixers)
Local $i,$mxnumdevs,$hmxobj
$mxnumdevs=mixerGetNumDevs()
If $mxnumdevs Then
ReDim $mixers[$mxnumdevs+1][$AMIX_SIZEOF]
For $i=0 To $mxnumdevs-1
$hmxobj=mixerOpen($i,0,0,$MIXER_OBJECTF_MIXER)
If @error Then
SetError(1)
Return False
EndIf
$mixers[$i][$MIX_HMXOBJ]=$hmxobj
Next ;i
EndIf
$mixers[0][0]=$mxnumdevs
EndFunc
;On ENtry: mixer id and flag , if no id passed then the preffered id is used (0) ditto for flag
;on exit: mixer handle
Func MixerOpen($uMxid=0,$hwnd=0,$instance=0,$fdwOpen=0)
Local $x,$h_struct
$h_struct=DllStructCreate("udword") ;since a local will be deleted on exit of function
If @error Then
SetError(1)
Return False
EndIf
$ret = DLLCall("winmm.dll","long","mixerOpen","ptr",DllStructGetPtr($h_struct),"int",$uMxid,"int",$hwnd,"int",$instance,"int",$fdwOpen)
If NOT @error Then
If $ret[0]<>$MMSYSERR_NOERROR Then Return -1
$x=DllStructGetData($h_struct,1)
Return $x
EndIf
SetError(1)
return False
EndFunc
Func CloseAllMixers($mixers)
Local $i,$cnt
$cnt=$mixers[0][0]
For $i= 0 To $cnt-1
MixerClose($mixers[$i][$MIX_HMXOBJ])
Next ;i
EndFunc
;On Entry: mixer handle
Func MixerClose($hmxobj)
$ret = DLLCall("winmm.dll","long","mixerClose","long",$hmxobj)
If NOT @error Then Return True
return False
EndFunc
Func mixerGetNumDevs()
$ret = DLLCall("winmm.dll","long","mixerGetNumDevs")
If NOT @error Then Return $ret[0]
SetError(1)
return False
EndFunc
Spoiler anzeigen
;added constants as i needed them so not really in order.
CONST $MMSYSERR_NOERROR=0
CONST $WAVERR_BASE=32
CONST $WAVERR_BADFORMAT =($WAVERR_BASE + 0)
CONST $MAXPNAMELEN= 32
CONST $MIXERLINE_COMPONENTTYPE_DST_FIRST= 0
CONST $MIXERLINE_COMPONENTTYPE_DST_SPEAKERS=($MIXERLINE_COMPONENTTYPE_DST_FIRST+4)
CONST $MIXER_GETLINEINFOF_COMPONENTTYPE=3
CONST $MIXERLINE_COMPONENTTYPE_SRC_FIRST= 0x1000
CONST $MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE= ($MIXERLINE_COMPONENTTYPE_SRC_FIRST+3)
CONSt $MIXERLINE_COMPONENTTYPE_DST_WAVEIN =($MIXERLINE_COMPONENTTYPE_DST_FIRST+7)
CONST $MIXERLINE_COMPONENTTYPE_DST_LAST =($MIXERLINE_COMPONENTTYPE_DST_FIRST+8)
CONSt $MIXER_GETLINEINFOF_SOURCE= 1
CONST $MIXER_GETLINEINFOF_DESTINATION=0
CONST $MIXER_GETLINEINFOF_LINEID =2
CONST $MIXERCONTROL_CT_SC_LIST_SINGLE = 0x00000000
CONST $MIXERCONTROL_CT_CLASS_LIST = 0x70000000
CONST $MIXERCONTROL_CT_SC_LIST_MULTIPLE = 0x01000000
CONST $MIXERCONTROL_CT_UNITS_BOOLEAN = 0x00010000
CONST $MIXERCONTROL_CT_CLASS_MASK = 0xF0000000
CONST $MIXERCONTROL_CONTROLTYPE_MULTIPLESELECT= BitOR($MIXERCONTROL_CT_CLASS_LIST , $MIXERCONTROL_CT_SC_LIST_MULTIPLE , $MIXERCONTROL_CT_UNITS_BOOLEAN)
CONST $MIXERCONTROL_CONTROLTYPE_MIXER = ($MIXERCONTROL_CONTROLTYPE_MULTIPLESELECT + 1)
CONST $MIXERCONTROL_CONTROLTYPE_SINGLESELECT= BitOR($MIXERCONTROL_CT_CLASS_LIST , $MIXERCONTROL_CT_SC_LIST_SINGLE , $MIXERCONTROL_CT_UNITS_BOOLEAN)
CONST $MIXERCONTROL_CONTROLTYPE_MUX =($MIXERCONTROL_CONTROLTYPE_SINGLESELECT+1)
CONST $MIXER_GETCONTROLDETAILSF_VALUE= 0
CONST $MIXER_SETCONTROLDETAILSF_VALUE= 0
CONST $MIXERCONTROL_CONTROLF_UNIFORM= 1
CONST $MIXERCONTROL_CONTROLF_MULTIPLE= 2
CONSt $MIXERCONTROL_CT_SC_METER_POLLED =0
CONST $MIXERCONTROL_CT_CLASS_METER= 0x10000000
CONST $MIXERCONTROL_CT_UNITS_SIGNED= 0x20000
CONST $MIXERCONTROL_CT_UNITS_UNSIGNED= 0x30000
CONST $MIXERCONTROL_CT_CLASS_FADER= 0x50000000
CONST $MIXERCONTROL_CT_CLASS_NUMBER= 0x30000000
CONST $MIXERCONTROL_CONTROLTYPE_FADER= BitOR($MIXERCONTROL_CT_CLASS_FADER,$MIXERCONTROL_CT_UNITS_UNSIGNED)
CONST $MIXERCONTROL_CONTROLTYPE_VOLUME= ($MIXERCONTROL_CONTROLTYPE_FADER+1)
CONST $MIXERCONTROL_CONTROLTYPE_UNSIGNEDMETER= BitOR($MIXERCONTROL_CT_CLASS_METER,$MIXERCONTROL_CT_SC_METER_POLLED,$MIXERCONTROL_CT_UNITS_UNSIGNED)
CONST $MIXERCONTROL_CONTROLTYPE_UNSIGNED =BitOR($MIXERCONTROL_CT_CLASS_NUMBER,$MIXERCONTROL_CT_UNITS_UNSIGNED)
CONST $MIXERCONTROL_CONTROLTYPE_SIGNED =BitOR($MIXERCONTROL_CT_CLASS_NUMBER,$MIXERCONTROL_CT_UNITS_SIGNED)
CONST $MIXER_OBJECTF_WAVEIN= 0x20000000
CONST $MIXER_SHORT_NAME_CHARS= 16
CONST $MIXER_LONG_NAME_CHARS= 64
CONST $MIXER_GETLINECONTROLSF_ALL =0
CONST $MIXER_GETLINECONTROLSF_ONEBYID= 1
CONST $MIXER_GETLINECONTROLSF_ONEBYTYPE= 2
CONST $MIXER_OBJECTF_HANDLE= 0x80000000
CONST $MIXER_OBJECTF_MIXER =0
CONST $MIXER_OBJECTF_HMIXER= BitOR ($MIXER_OBJECTF_HANDLE,$MIXER_OBJECTF_MIXER)
CONST $MIXER_GETCONTROLDETAILSF_LISTTEXT=1
CONST $CALLBACK_NULL= 0
CONST $WAVE_MAPPED= 4
CONST $MIXERLINE_COMPONENTTYPE_SRC_WAVEOUT =($MIXERLINE_COMPONENTTYPE_SRC_FIRST+8)
CONST $wMid=1
CONST $wPid=2
CONST $vDriverVersion=3
CONST $szPname=4
CONST $dwFormats=5
CONST $wChannels=6
CONST $wReserved1=7
CONST $AWICAPS_SIZEOF=$wReserved1+1
;mixer
CONST $fdwSupport=5
CONST $cDestinations=6
CONST $AMXCAPS_SIZEOF=$cDestinations+2 ;leave room for num cells
;line struct
CONST $cbStruct=1
CONST $dwDestination=2
CONST $dwSource=3
CONST $dwLineID=4
CONST $fdwLine=5
CONST $dwUser=6
CONST $dwComponentType=7
CONST $cChannels=8
CONST $cConnections=9
CONST $cControls=10
CONST $szShortName=11
CONST $szName=12
CONST $dwType=13
CONST $dwDeviceID=14
CONST $wMMid=15
CONST $wMPid=16
CONST $vMDriverVersion=17
CONST $szMPname=18
$AMXLINE_SIZEOF=$szMPname+2
CONST $cbCStruct= 1
CONST $dwCLineID= 2
CONST $dwControlID= 3
CONST $dwControlType=4
CONST $cCControls= 5
CONST $cbmxctrl= 6
CONST $pamxctrl= 7
CONST $MXXTRLS_SIZEOF=$pamxctrl+2
CONST $lst_destname= 1
CONST $lst_dwComponentType= 2
CONST $lst_ctrid= 3
CONST $MIX_HMXOBJ= 1
CONST $MIX_DEVNAME= 2
CONST $MIX_CAPCDEST= 3
CONST $MIX_RECNAME= 4
CONST $MIX_CCONNECTIONS= 5
CONST $MIX_INCCONTROLS= 6
CONST $MIX_DWLINEID= 7
CONST $MIX_INCHANNELS= 8
CONST $MIX_INMULTIITEMS= 9
CONST $MIX_INCTRLID= 10
CONST $MIX_OUTCHANNELS=11
CONST $MIX_OUTMULTIEMS=12
CONST $MIX_OUTCTRLID= 13
CONST $MIX_LAST=$MIX_OUTCTRLID+1
CONST $AMIX_SIZEOF= $MIX_LAST+1
Dim $mxline[$AMXLINE_SIZEOF]
Dim $mixers[1][$AMIX_SIZEOF]
Dim $mxInList[2][4]
$mixernames=""
$FormSelectInput =0
$TV_SelectInput = 0
$CMB_DevName=0
$CKB_EnableLinefocus =0
$defaultmixer=0
$lastlinesrc=-1
$curmixer=$defaultmixer