nacerbaaziz Posted June 19, 2017 Posted June 19, 2017 (edited) Hello guys I have an inquiry regarding bass.dll I wanted to record an audio file and did not know the way As well as I want to save the file after applying the effects can you help me? am sorry for my english With my greetings and best wishes Edited June 19, 2017 by nacerbaaziz
Xandy Posted June 19, 2017 Posted June 19, 2017 (edited) I have something that I am cleaning up before I share. Using bass.dll I have example: Dynamic select track on hotkey Preload tracks from file (requires files to be named correctly) Configure Hotkey dialog Play track repeating toggle Modifier with track: Play track Record track Shifting version of track - Uncomplete This code is missing files and will not run standalone. The page selection breaks the hotkey_dialog, but aside from that the functionality works. I notice Shift track feature was never completed, but that shouldn't matter. This code still may help you because it provides an example. It doesn't save a master record track yet, but I can look into that once I clean this up. expandcollapse popup;***************************************** ;Recorder.au3 by Xandy ;Created with ISN AutoIt Studio v. 1.01 ; Use hotkeys to select tracks. Use modifier to deside track action: play, record, shift record ;***************************************** #include <Include\Bass.au3\Bass\Bass.au3>; BrettF #include <BassEnc.au3>; eukalyptus ;https://autoit.de/index.php/Thread/4251-Mp3-Recording-via-bass-dll/#post42923&page=Thread&postID=42923&highlight=bass.dll #include "Include\TTS.au3"; Author: Beege, text to speach #include <Include\loaddialog.au3>; Xandy this thing sucks #include <GuiConstants.au3> #include <Misc.au3> #include <File.au3> #include <GuiComboBox.au3> Enum $eMod_record = 1, _ $eMod_play, _ $eMod_shift, _ $eMod_repeat, _ $eMod_max ; Bass OnAutoItExitRegister("_Bass_cleanup") Global $gEncHandle = Null Global $gEncState = False Global $gBitrate = 128 Global $gRecHandle = 0 Global $gRecVersion = 1 Global $gRecVersion_Max = 100 ; Sounds are stored here and incromented Global $gaSound[101]; 100 with max at 0 Global $gSound_cur = 1 $gaSound[0] = UBound($gaSound) - 1 $gVoice = _StartTTS() ; Paths Global $gPath_system = @ScriptDir & "\System\" Global $gPath_config = @ScriptDir & "\Config\" ; Gui Global $ghGui = Null ; Load now and pass to _IsPressed() to save time Global $ghDLL = DllOpen("user32.dll") Global $gScript_name = StringTrimRight(@ScriptName, 4) ; Control Data Structure Global $gControl_data_max = 9 Enum $eControl_data, $eControl_label, $eControl_type, $eControl_data_val, $eControl_tooltip, $eControl_width, $eControl_height, $eControl_pad_x, $eControl_pad_y ; Hotkey data Enum $eKey_code, $eKey_name, $eKey_send, $eKey_data_max Global $gaKey[1][$eKey_data_max]; ReDimed in key_load() to (Lines in: Key_Names.txt / gKey_data_max) Global $gHotkey_amount_max = 4 Global $gHotkey_amount = $gHotkey_amount_max ; Constants from http://msdn.microsoft.com/en-us/library/windows/desktop/ms646360(v=vs.85).aspx Const $SC_CLOSE = 0xF060 Const $SC_MOVE = 0xF010 Const $SC_MAXIMIZE = 0xF030 Const $SC_MINIMIZE = 0xF020 Const $SC_SIZE = 0xF000 Const $SC_RESTORE = 0xF120 ; ; Hotkey GUI Fields Global $gHotkey_control_max = 18 Global $gHotkey_height = 80 Enum $hkc_button_1, $hkc_button_2, $hkc_button_3, $hkc_button_4, $hkc_button_state_1, $hkc_button_state_2, $hkc_button_state_3, $hkc_button_state_4, _;8 $hkc_macro_description_edit, $hkc_ispressed_checkbox, $hkc_remove_button_1, $hkc_remove_button_2, $hkc_remove_button_3, $hkc_remove_button_4, _;14 $hkc_keyboard_pic_1, $hkc_keyboard_pic_2, $hkc_keyboard_pic_3, $hkc_keyboard_pic_4;18 ; Used with key_get_dialog() Listbox of Keys Global $gMylistbox = Null Global $gMylistboxmsg = 0 ; Captures Double Click on Listbox gMylistbox: Sets gMylistboxmsg GUIRegisterMsg($WM_COMMAND, "_WM_COMMAND") ; Program Options opt("GUICloseOnESC", 0) main() Func main() Local $x = Null ; Startup Bass $x = _BASS_Startup("BASS.dll") ConsoleWrite("Bass_Startup: " & $x & @CRLF) ; Init Bass $x = _BASS_Init(0, -1, 44100, 0, "") ConsoleWrite("Bass_Init: " & $x & @CRLF) ; Bass Encoder Startup _BASS_Encode_STARTUP() $basscb_dll = DllOpen("BASSCB.dll") ; Bass Settings $KHZ = 44100 $temp = DllCall($basscb_dll, "dword", "RecordStart", "dword", $KHZ, "dword", 2, "dword", _makelong($BASS_SAMPLE_FX, 10)) ;_BASS_SetConfig($BASS_CONFIG_REC_BUFFER, 1000) $device = _Recording_GetDevices() ; Initate Recording $r = _BASS_RecordInit($device) $input = _Recording_GetInputs() ; Load settings $aSetting = settings_load() ; Load Key Names key_load() Local $hotkey_action = 0 Local $aHotkey_control = hotkey_load() hotkey_sort($aHotkey_control) ; Create GUI $label_w = 60 $ghGui = GUICreate(@ScriptName, 320, 200) $aGUI_rect = WinGetPos($ghGui) Local $aControl[$eMod_max][2]; label, data ; List the hotkeys For $i = 1 To $eMod_max - 1 $aControl[$i][0] = GUICtrlCreateLabel($aHotkey_control[$i][$hkc_macro_description_edit][$eControl_data_val] & ":", 5, $i * 20, $label_w, 20) $sHotkey_text = hotkey_name($aHotkey_control, $i) $aControl[$i][1] = GUICtrlCreateLabel($sHotkey_text, $label_w+ 10, $i * 20, $aGUI_rect[2] - 15 - $label_w, 20) Next ; Create readonly edit ; Remove bell sounds when keys are pressed $control_edit_aborb_bell = GUICtrlCreateEdit("", $aGui_rect[2] - 100, 1, 90, 19, $ES_READONLY) GUICtrlSetState($control_edit_aborb_bell, $GUI_FOCUS) Local $aMenu = ["&File", _ "&Config"] Enum $eMenu_file, $eMenu_config For $i = 0 To UBound($aMenu) - 1 $aMenu[$i] = GUICtrlCreateMenu($aMenu[$i]) Next $menu_file_exit = GUICtrlCreateMenuItem("&Exit", $aMenu[$eMenu_file]) $menu_hotkey_dialog = GUICtrlCreateMenuItem("&Hotkeys", $aMenu[$eMenu_config]) Local $control_id_start = $aMenu[$eMenu_file] Local $control_id_end = $aMenu[$eMenu_config] GUISetState() $temp = DllCall($basscb_dll, "dword", "RecordStart", "dword", $KHZ, "dword", 2, "dword", _makelong($BASS_SAMPLE_FX, 10)) If IsArray($temp) Then $gRecHandle = $temp[0] Else MsgBox(0, $gScript_name, "basscb DLL not found?", 0, $ghGui) EndIf Local $record_start = 0 Local $aHotkey_page_name = hotkey_page_name_load() Local $record_repeat = 0 ; Colors to indictate off or on setting Enum $eColor_off, _ $eColor_on, _ $eColor_max Local $aColor[$eColor_max] $aColor[$eColor_off] = 0x000000 $aColor[$eColor_on] = 0x00DD00 Do ; Read Hotkeys from Shift to end of tracks $record_action = hotkey_check($aHotkey_control, $eMod_shift) $record_repeat_hotkey_check = hotkey_check($aHotkey_control, $eMod_repeat, $eMod_repeat) If $record_repeat_hotkey_check > -1 Then If $record_repeat = 0 then $record_repeat = 1 Else $record_repeat = 0 EndIf out("record_repeat: " & $record_repeat) GUICtrlSetColor($aControl[$eMod_repeat][0], $aColor[$record_repeat]) keyreleased($gaKey[$aHotkey_control[$eMod_repeat][$hkc_button_1][$eControl_data_val]][$eKey_code]) EndIf; $record_repeat_hotkey_check > -1 Switch $record_action ; If there has been a record_action (Track) then decide what to do with track: play, record, shift record file Case $eMod_max To $aHotkey_control[0][0][0] ; Check all the Mod: Do on blank ; Else: Do on Modifier ; Check Play Mod, If $aHotkey_control[$eMod_play][0][$eControl_data_val] = 0 Then sound_play($record_action, $record_repeat, 0, 100) ; one keypress at a time, fellas. keyreleased($gaKey[$aHotkey_control[$record_action][$hkc_button_1][$eControl_data_val]][$eKey_code]) ElseIf hotkey_check($aHotkey_control, $eMod_play, $eMod_play) > -1 Then out("Play $record_action: " & $record_action) ;If $record_action = 8 + $eMod_max Then sound_play($record_action, $record_repeat, 0, 100) ; one keypress at a time, fellas. keyreleased($gaKey[$aHotkey_control[$record_action][$hkc_button_1][$eControl_data_val]][$eKey_code]) ; Else ; If record modifier key blank, start recording track If $aHotkey_control[$eMod_record][0][$eControl_data_val] = 0 Then $record_start = 1 ; Check Hotkey modifier ElseIf hotkey_check($aHotkey_control, $eMod_record, $eMod_record) > -1 Then $record_start = 1 EndIf If $record_start = 1 Then If $record_action - $eMod_max < $aSetting[1][$eControl_data_val] Then record($aHotkey_control, $record_action) $record_start = 0 EndIf; record_action EndIf; record_start EndIf; record_modifiers Case $eMod_shift ; Shift the record track version file $gRecVersion += 1 If $gRecVersion >= $gRecVersion_Max Then $gRecVersion = 1 EndIf out("Shift: ") keyreleased($gaKey[$aHotkey_control[$record_action][$hkc_button_1][$eControl_data_val]][$eKey_code]) EndSwitch; record_action $msg = GUIGetMsg() Switch $msg Case $menu_hotkey_dialog gui_control_set_state($ghGui, $control_id_start, $control_id_end, $GUI_DISABLE) hotkey_dialog($aHotkey_control, $aHotkey_page_name) gui_control_set_state($ghGui, $control_id_start, $control_id_end, $GUI_ENABLE) hotkey_update_display($aControl, $aHotkey_control) GUICtrlSetState($control_edit_aborb_bell, $GUI_FOCUS) Case $menu_file_exit ExitLoop EndSwitch; msg Until $msg = $GUI_EVENT_CLOSE _BASS_Free() EndFunc ;==>main Func read_chunk($file); Remove Label from File Line Label Data pair. Local $chunk = FileReadLine($file) If @error <> 0 Then Return "File EOF" EndIf Local $chunk_po = StringInStr($chunk, ": "); Find the string position of the first ": " Return StringMid($chunk, $chunk_po + 2); Return String 2 spaces right from the chunk_po EndFunc ;==>read_chunk ; Key systems Func key_load($file_path = $gPath_system & "key_names.txt") Local $file = FileOpen($file_path) If $file > -1 Then $key_max = _FileCountLines($file_path) / $eKey_data_max ReDim $gaKey[$key_max + 1][$eKey_data_max] $gaKey[0][0] = $key_max For $i = 1 To $gaKey[0][0] $gaKey[$i][$eKey_code] = FileReadLine($file) $gaKey[$i][$eKey_name] = FileReadLine($file) $gaKey[$i][$eKey_send] = FileReadLine($file) Next FileClose($file) Else MsgBox(0, $gScript_name & " Error", "Could not load Keyboard Setup file:" & @CRLF & _ $file_path, 0, $ghGui) EndIf EndFunc ;==>key_load Func key_get() Local $key = 0 Local $timer = TimerInit() Local $timer_len = 1000 * 6 Do For $i = 1 To $gaKey[0][0] - 1 If _IsPressed($gaKey[$i][$eKey_code], $ghDLL) Then $key = $i ExitLoop EndIf Next If $key > 0 Then ExitLoop Until TimerDiff($timer) >= $timer_len Return $key EndFunc ;==>key_get ; Add hotkey controls to the tab_window[tw_hotkey][twd_win] Func hotkey_controls(ByRef $aControl, $x, $y, $index, $node = 0) $aControl[$index][$hkc_remove_button_1 + $node][$eControl_data] = GUICtrlCreateButton("x", $x, $y, 20, 20); Remove key button GUICtrlSetTip(-1, "Remove the Key") $aControl[$index][$hkc_button_1 + $node][$eControl_data] = GUICtrlCreateButton("Click to Set", $x + 25, $y, 110, 20); Key button GUICtrlSetTip(-1, "Click to Set Key") $aControl[$index][$hkc_keyboard_pic_1 + $node][$eControl_data] = GUICtrlCreatePic($gPath_system & "keyboard button.gif", $x + 135, $y, 25, 20);gui pic GUICtrlSetTip(-1, "Open Virtual Keyboard") EndFunc ;==>hotkey_controls ; add hotkey controls to gui list Func hotkey_controls_add(ByRef $aControl, $index, $x, $y) Local $index_draw = $index - 1 If $index_draw < 0 Then $index_draw = 0 $aControl[$index][$hkc_ispressed_checkbox][$eControl_data] = GUICtrlCreateCheckbox("Is Pressed", $x, $y + 45, 70, 20, $BS_Left); Is Pressed Checkbox GUICtrlSetTip(-1, "There are two ways to react to hotkeys. System level hotkeys and _IsPressed" & @CRLF & "Currently this option does nothing and only _IsPressed is ever used for hotkeys.") hotkey_controls($aControl, $x, $y, $index) If $gHotkey_amount < 2 Then Return hotkey_controls($aControl, $x + 170, $y, $index, 1) If $gHotkey_amount < 3 Then Return hotkey_controls($aControl, $x, $y + 20, $index, 2) If $gHotkey_amount < 4 Then Return hotkey_controls($aControl, $x + 170, $y + 20, $index, 3) EndFunc ;==>hotkey_controls_add ; Dialog Window for configuring Hotkeys Func hotkey_dialog(ByRef $aHotkey_control, ByRef $aHotkey_page_name) Local $items_per_colume = 8 Local $hotkey_width = 170 Local $aHotkey_control_new = $aHotkey_control Local $setting_height = 20 Local $gui_base_height = 25 Local $msg = Null ; GUI position Local $aGui_rect = WinGetPos($ghGui) ; Create new GUI offset from main gui position ;$hGui = GUICreate($gScript_name & "- Hotkeys", 490 * 2 - 50, $gui_base_height + ($aHotkey_control_new[0][0][0] - 1) * $gHotkey_height, $aGui_rect[0] + 35, $aGui_rect[1] + 40, Default, Default, $ghGui) $hGui = GUICreate($gScript_name & "- Hotkeys", 490 * 3, $gui_base_height + ($items_per_colume) * $gHotkey_height, $aGui_rect[0] + 35, $aGui_rect[1] + 40, Default, Default, $ghGui) ; Record GUI rect area $aGui_rect = WinGetPos($hGui) ; Fit on Desktop If $aGui_rect[1] + $aGui_rect[3] > @DesktopHeight Then WinMove($hGui, "", Default, @DesktopHeight - $aGui_rect[3] - 45) If $aGui_rect[0] + $aGui_rect[2] > @DesktopWidth Then WinMove($hGui, "", @DesktopWidth - $aGui_rect[2] - 1, Default) Local $x_col = 0 Local $x_col_max = 3 Local $y_count = 0 Local $y_loc = 0 Local $page_hotkeys = $x_col_max * $items_per_colume Local $aDescription[$page_hotkeys + 2] ; Add Hotkey Controls to GUI {Label Action, Buttons: code, remove, keyboard_gui Checkbox} For $i = 1 To $page_hotkeys $y_loc = 5 + $y_count * $gHotkey_height $aDescription[$i] = GUICtrlCreateLabel($aHotkey_control_new[$i][$hkc_macro_description_edit][$eControl_data_val], 5 + $x_col * 490, $y_loc, 140, 60) GUICtrlSetBkColor(-1, 0xf3fcd7) hotkey_controls_add($aHotkey_control_new, $i, 150 + $x_col * 490, $y_loc) For $ii = 0 To $gHotkey_amount - 1 GUICtrlSetData($aHotkey_control_new[$i][$hkc_button_1 + $ii][$eControl_data], $gaKey[$aHotkey_control_new[$i][$hkc_button_1 + $ii][$eControl_data_val]][$eKey_name]) Next; ii $y_count += 1 If Mod($i, $items_per_colume) = 0 Then $x_col+= 1 $y_count = 0 EndIf Next; i create hotkey_controls Local $page = 0 ; Page Name Combo $page_name_combo = GUICtrlCreateCombo("", $aGui_rect[2] - 420, $aGui_rect[3] - 55, 160, 20, $CBS_DROPDOWNLIST) For $i = 1 To $aHotkey_page_name[0] out("$aHotkey_page_name[0]: " & $aHotkey_page_name[0]) If $aHotkey_page_name[$i] = "File EOF" Or $aHotkey_page_name[$i] = "" Then ; blank GUICtrlSetData($page_name_combo, $aHotkey_page_name[$i], $i) Else GUICtrlSetData($page_name_combo, $aHotkey_page_name[$i], $aHotkey_page_name[$page + 1]) EndIf; not blank Next; i ; Rename Page Button $page_rename_button = GUICtrlCreateButton("Rename", $aGui_rect[2] - 255, $aGui_rect[3] - 55, 45, 20) ; Page Back Button $page_back_button = GUICtrlCreateButton("< Page", $aGui_rect[2] - 190, $aGui_rect[3] - 55, 45, 20) ; Page Next Button $page_next_button = GUICtrlCreateButton("Page >", $aGui_rect[2] - 140, $aGui_rect[3] - 55, 45, 20) ; Confirm Button $confirm_button = GUICtrlCreateButton("Confirm", $aGui_rect[2] - 65, $aGui_rect[3] - 55, 50, 20) GUISetState() Local $confirm = 0 Local $point = Null Local $hotkey_id = 0 Local $page_start = 1 Local $index = 1 Local $data_index = 0 Local $update_controls = 0 Do $msg = GUIGetMsg() For $i = 1 To $page_hotkeys For $ii = 0 To $gHotkey_amount - 1 $hotkey_id = $hkc_button_1 + $ii Switch $msg Case $aHotkey_control_new[$i][$hotkey_id][$eControl_data] ; User clicked Set Key Button GUICtrlSetData($aHotkey_control_new[$i][$hotkey_id][$eControl_data], "Press Any Key") $key = key_get() If $key > 0 Then $page_start = $page * $page_hotkeys $aHotkey_control_new[$page_start + $i][$hotkey_id][$eControl_data_val] = $key GUICtrlSetData($aHotkey_control_new[$i][$hotkey_id][$eControl_data], $gaKey[$key][$eKey_name]) EndIf Case $aHotkey_control_new[$i][$hkc_keyboard_pic_1 + $ii][$eControl_data] ; User clicked Set Key Button with Keyboard_GUI Dialog $key = key_get_dialog($hGui) If $key > 0 Then $page_start = $page * $page_hotkeys $aHotkey_control_new[$page_start + $i][$hotkey_id][$eControl_data_val] = $key GUICtrlSetData($aHotkey_control_new[$i][$hotkey_id][$eControl_data], $gaKey[$aHotkey_control_new[$page_start + $i][$hotkey_id][$eControl_data_val]][$eKey_name]) EndIf Case $aHotkey_control_new[$i][$hkc_remove_button_1 + $ii][$eControl_data] ; User clicked Remove Key Button $page_start = $page * $page_hotkeys $aHotkey_control_new[$page_start + $i][$hotkey_id][$eControl_data_val] = "" GUICtrlSetData($aHotkey_control_new[$i][$hotkey_id][$eControl_data], $aHotkey_control_new[$page_start + $i][$hotkey_id][$eControl_data_val]) EndSwitch; msg Next; ii in hotkey amount Next; i hotkeys in page Switch $msg ; Case $page_name_combo $page_combo_id = _GUICtrlComboBox_GetCurSel($page_name_combo) ; Back Page Button Case $page_back_button ; Incroment Page $page -= 1 $page_start = $page * $page_hotkeys out("Page Start: " & $page_start) ; Wrap Page If $page_start < 0 Then $page = Int($aHotkey_control_new[0][0][0] / $page_hotkeys) - 1 out("$page "&$page) $page_start = $page * $page_hotkeys out("Wrap Page Start: " & $page_start) EndIf $update_controls = 1 ; Next Page Button Case $page_next_button ; Incroment Page $page += 1 $page_start = $page * $page_hotkeys out("Page Start: " & $page_start) ; Wrap Page If $page_start >= $aHotkey_control_new[0][0][0] - 1 Then $page = 0 $page_start = $page * $page_hotkeys out("Wrap Page Start: " & $page_start) EndIf $update_controls = 1 ; Confirm Button Case $confirm_button $confirm = 1 ExitLoop EndSwitch If $update_controls = 1 Then ;Update keys For $i = 1 To $page_hotkeys $data_index = $page_start + $i If $data_index > $aHotkey_control_new[0][0][0] - 1 Then ; Disabled GUICtrlSetState($aDescription[$i], $GUI_HIDE) For $ii= 0 to $gHotkey_amount - 1 GUICtrlSetState($aHotkey_control_new[$i][$hkc_button_1 + $ii][$eControl_data], $GUI_HIDE) GUICtrlSetState($aHotkey_control_new[$i][$hkc_keyboard_pic_1 + $ii][$eControl_data], $GUI_HIDE) GUICtrlSetState($aHotkey_control_new[$i][$hkc_remove_button_1 + $ii][$eControl_data], $GUI_HIDE) GUICtrlSetState($aHotkey_control_new[$i][$hkc_ispressed_checkbox + $ii][$eControl_data], $GUI_HIDE) Next Else ; Display GUICtrlSetData($aDescription[$i], $aHotkey_control_new[$data_index][$hkc_macro_description_edit][$eControl_data_val]) ; Show Description GUICtrlSetState($aDescription[$i], $GUI_SHOW) For $ii= 0 to $gHotkey_amount - 1 GUICtrlSetData($aHotkey_control_new[$i][$hkc_button_1 + $ii][$eControl_data], _ $gaKey[ $aHotkey_control_new[$data_index][$hkc_button_1 + $ii][$eControl_data_val] ][$eKey_name]) GUICtrlSetState($aHotkey_control_new[$i][$hkc_button_1 + $ii][$eControl_data], $GUI_SHOW) GUICtrlSetState($aHotkey_control_new[$i][$hkc_keyboard_pic_1 + $ii][$eControl_data], $GUI_SHOW) GUICtrlSetState($aHotkey_control_new[$i][$hkc_remove_button_1 + $ii][$eControl_data], $GUI_SHOW) GUICtrlSetState($aHotkey_control_new[$i][$hkc_ispressed_checkbox + $ii][$eControl_data], $GUI_SHOW) Next EndIf Next; i in update hotkey controls $update_controls = 0 EndIf; update_controls = 1 Until $msg = $GUI_EVENT_CLOSE If $confirm = 1 Then hotkey_page_name_save($aHotkey_page_name) hotkey_sort($aHotkey_control_new) For $i = 1 To $aHotkey_control_new[0][0][0] ; Read the key codes from the buttons For $ii = 0 To $gHotkey_amount_max - 1 $aHotkey_control[$i][$hkc_button_1 + $ii][$eControl_data_val] = $aHotkey_control_new[$i][$hkc_button_1 + $ii][$eControl_data_val] $aHotkey_control[$i][$hkc_button_state_1 + $ii][$eControl_data_val] = $aHotkey_control_new[$i][$hkc_button_state_1 + $ii][$eControl_data_val] Next ; Read IsPressed Checkbox 1 true or 4 false $aHotkey_control[$i][$hkc_ispressed_checkbox][$eControl_data_val] = GUICtrlRead($aHotkey_control_new[$i][$hkc_ispressed_checkbox][$eControl_data_val]) Next hotkey_save($aHotkey_control) EndIf GUIDelete($hGui) EndFunc ;==>hotkey_dialog Func hotkey_load($file_path = $gPath_config & "Hotkeys.txt") ; Plus 1 for description, then 4 key max Local $hotkey_max = 24 * 3 + 1 Local $aHotkey_control[$hotkey_max][$gHotkey_control_max][$gControl_data_max] $file = FileOpen($file_path) If FileOpen($file_path) > -1 Then ConsoleWrite("hotkey_load: Reading File" & @CRLF) $hotkey_max = 1 ; Keys to makeup Hotkey Do ; Read Hotkey Description $aHotkey_control[$hotkey_max][$hkc_macro_description_edit][$eControl_data_val] = FileReadLine($file) If @error <> 0 Then ExitLoop ; Read all the Hotkeys to trigger description For $ii = 0 To $gHotkey_amount_max - 1 $aHotkey_control[$hotkey_max][$hkc_button_1 + $ii][$eControl_data_val] = FileReadLine($file) $aHotkey_control[$hotkey_max][$hkc_button_state_1 + $ii][$eControl_data_val] = FileReadLine($file) Next ; Ispressed flag to use hotkey or ispressed $aHotkey_control[$hotkey_max][$hkc_ispressed_checkbox][$eControl_data_val] = FileReadLine($file) $hotkey_max += 1 If $hotkey_max >= UBound($aHotkey_control) Then ReDim $aHotkey_control[UBound($aHotkey_control) + 10][$gHotkey_control_max][$gControl_data_max] Until 0 $hotkey_max += 1 FileClose($file) Else ConsoleWrite("hotkey_load: File not Found" & @CRLF) ConsoleWrite("hotkey_load: Default Constructor" & @CRLF) ; Create a default hotkey array ; 1 Count Total [0] ; 3 mods record, play, shift, .. ; 5 tracks ;$hotkey_max = $eMod_max + 5 + 1 ;Local $aHotkey_control[$hotkey_max + 1][$gHotkey_control_max][$gControl_data_max] Local $aMod_labels_default[$eMod_max] = [0, _ "Record", _ "Play", _ "Shift", _ "Repeat"] For $i = 1 To $hotkey_max - 1 If $i < $eMod_max Then $aHotkey_control[$i][$hkc_macro_description_edit][$eControl_data_val] = $aMod_labels_default[$i] Else $aHotkey_control[$i][$hkc_macro_description_edit][$eControl_data_val] = "Track Number: " & $i - $eMod_max + 1 EndIf Next EndIf $aHotkey_control[0][0][0] = $hotkey_max - 1 ConsoleWrite("hotkey_load: " & $aHotkey_control[0][0][0] & " Hotkeys Generated" & @CRLF) Return $aHotkey_control EndFunc ;==>hotkey_load Func hotkey_save($aHotkey_control, $file_path = $gPath_config & "Hotkeys.txt") $file = FileOpen($file_path, BitOR($FO_CREATEPATH, $FO_OVERWRITE)) For $i = 1 To $aHotkey_control[0][0][0] ; Hotkey Description FileWriteLine($file, $aHotkey_control[$i][$hkc_macro_description_edit][$eControl_data_val]) ; Keys to makeup Hotkey For $ii = 0 To $gHotkey_amount_max - 1 FileWriteLine($file, $aHotkey_control[$i][$hkc_button_1 + $ii][$eControl_data_val]) FileWriteLine($file, $aHotkey_control[$i][$hkc_button_state_1 + $ii][$eControl_data_val]) Next ; Ispressed flag to use hotkey or ispressed FileWriteLine($file, $aHotkey_control[$i][$hkc_ispressed_checkbox][$eControl_data_val]) Next FileClose($file) EndFunc ;==>hotkey_save Func hotkey_page_name_save($aHotkey_page_name, $file_path = $gPath_config & "Hotkey_page_names.txt") $file = FileOpen($file_path, BitOR($FO_OVERWRITE, $FO_CREATEPATH)) If $file > -1 Then For $i = 1 to $aHotkey_page_name[0] $aHotkey_page_name[$i] = FileWriteLine($file, $i & ": " & $aHotkey_page_name[$i]) Next Else MsgBox(0, $gScript_name, "hotkey_page_name_save: Could not open file.", 0, $ghGui) EndIf Return $aHotkey_page_name EndFunc Func hotkey_page_name_load($file_path = $gPath_config & "Hotkey_page_names.txt") $file = FileOpen($file_path) $lines = _FileCountLines($file_path) If $file > -1 And $lines > 0 Then ; Size of file Local $aHotkey_page_name[$lines + 1] $aHotkey_page_name[0] = $lines For $i = 1 to $aHotkey_page_name[0] $aHotkey_page_name[$i] = read_chunk($file) Next Else ; Default Local $aHotkey_page_name[3 + 1] $aHotkey_page_name[0] = UBound($aHotkey_page_name) - 1 For $i = 1 To $aHotkey_page_name[0] $aHotkey_page_name[$i] = $i Next MsgBox(0, $gScript_name, "hotkey_page_name_load: Could not open file."&@CRLF&$file_path&@CRLF&"Generated new", 4, $ghGui) EndIf FileClose($file) out("$aHotkey_page_name[0]: " & $aHotkey_page_name[0]) Return $aHotkey_page_name EndFunc; hotkey_page_name_load Func settings_load($file_path = $gPath_config & "Settings.txt") Local $aSetting_name = ["", _ ; Stores the count "Recording Max"] Local $setting_max = UBound($aSetting_name) Local $aSetting[$setting_max][$gControl_data_max] $aSetting[0][0] = $setting_max - 1 $file = FileOpen($file_path) If $file > -1 Then For $i = 1 To $setting_max - 1 $aSetting[$i][$eControl_data_val] = read_chunk($file) Next Else MsgBox(0, $gScript_name, "Settings_load: $file_path: " & @CRLF & $file_path & @CRLF & "Not Found", 0, $ghGui) $aSetting[1][$eControl_data_val] = 5 EndIf Return $aSetting EndFunc; settings_load Func settings_save($aSetting, $file_path = $gPath_config & "Settings.txt") Local $aSetting_name = ["", _ "Recording Max: "] $file = FileOpen($file_path, BitOR($FO_CREATEPATH, $FO_OVERWRITE)) For $i = 1 To $aSetting[0] FileWriteLine($file, $aSetting_name[$i] & $aSetting[$i][$eControl_data_val]) Next EndFunc; settings_save Func hotkey_sort(ByRef $aHotkey_control) For $i = 1 To $aHotkey_control[0][0][0] ; Must Fill the First Hotkey [0] If $aHotkey_control[$i][$hkc_button_1][$eControl_data_val] < 1 Then For $ii = 1 To $gHotkey_amount_max - 1 If $aHotkey_control[$i][$hkc_button_1 + $ii][$eControl_data_val] > 0 Then ; Assign 0 $aHotkey_control[$i][$hkc_button_1][$eControl_data_val] = $aHotkey_control[$i][$hkc_button_1 + $ii][$eControl_data_val] ; Remove $aHotkey_control[$i][$hkc_button_1 + $ii][$eControl_data_val] = 0 ExitLoop EndIf Next EndIf For $ii = 0 To $gHotkey_amount_max - 1 If $aHotkey_control[$i][$hkc_button_1 + $ii][$eControl_data_val] > 0 Then; If the hotkeys have been set turn them on $aHotkey_control[$i][$hkc_button_state_1 + $ii][$eControl_data_val] = 1 Else $aHotkey_control[$i][$hkc_button_state_1 + $ii][$eControl_data_val] = 0 EndIf Next Next EndFunc ;==>hotkey_sort ; key_get_dialog() Func key_get_dialog($hGui) $aGui_rect = WinGetPos($hGui) Local $tgui = GUICreate("Select a Key", 700, 380, $aGui_rect[0] + 40, $aGui_rect[1] + 40, Default, Default, $hGui) Local $key_get_gui_control_data_max = 15 Local $controls = (_FileCountLines($gPath_system & "keyboard dialog.txt") / $key_get_gui_control_data_max) + 1 Local $aControl[$controls][$key_get_gui_control_data_max] $controls = 0 loaddialogdata($gPath_system & "keyboard dialog.txt", $aControl, $controls) ;fill listbox of keys $gMylistbox = GUICtrlCreateCombo("", 455, 5, 135, 180, BitOR($LBS_NOTifY, $WS_VSCROLL)) Local $match = 0 For $i = 0 To $controls - 1 $match = 0 For $ii = 1 To $gaKey[0][0] - 1 If GUICtrlRead($aControl[$i][0]) = $gaKey[$ii][$eKey_name] Then out("match: " & GUICtrlRead($aControl[$i][0]) & " " & $gaKey[$ii][$eKey_name]) $match = $ii ExitLoop EndIf Next; ii If $match > 0 Then ; List key in gMylistbox GUICtrlSetData($gMylistbox, $gaKey[$ii][$eKey_name] & "|") Else ; Hide button GUICtrlSetState($aControl[$i][0], $GUI_HIDE) EndIf; match = 1 Next; i GUISetState() Local $key = -1, $done = 0 Do $msg = GUIGetMsg() For $i = 0 To $controls - 1 If $msg = $aControl[$i][0] Then $key = $i $key_name = GUICtrlRead($aControl[$key][0]) EndIf Next If WinActive($tgui) Then If _IsPressed("0d", $ghDLL) Or $gMylistboxmsg = 1 Then keyreleased("0d") $gMylistboxmsg = 0 $key = _GUICtrlComboBox_GetCurSel($gMylistbox) $key_name = GUICtrlRead($gMylistbox) EndIf EndIf Until $key > -1 Or $msg = $GUI_EVENT_CLOSE If $key > -1 Then For $i = 1 To $gaKey[0][0] - 1 If $gaKey[$i][$eKey_name] = $key_name Then $key = $i ExitLoop EndIf Next EndIf GUIDelete($tgui) Return $key EndFunc ;==>key_get_dialog ; Must sort hotkeys so that Hotkey[0] is always filled with a hotkey Func hotkey_check($aHotkey_control, $start_id = 1, $end_id = $aHotkey_control[0][0][0]) Local $return = -1 For $i = $start_id To $end_id; Question hotkey triggers If _IsPressed($gaKey[$aHotkey_control[$i][$hkc_button_1][$eControl_data_val]][$eKey_code], $ghDLL) Then If _IsPressed($gaKey[$aHotkey_control[$i][$hkc_button_2][$eControl_data_val]][$eKey_code], $ghDLL) = $aHotkey_control[$i][$hkc_button_state_2][$eControl_data_val] Then If _IsPressed($gaKey[$aHotkey_control[$i][$hkc_button_3][$eControl_data_val]][$eKey_code], $ghDLL) = $aHotkey_control[$i][$hkc_button_state_3][$eControl_data_val] Then If _IsPressed($gaKey[$aHotkey_control[$i][$hkc_button_4][$eControl_data_val]][$eKey_code], $ghDLL) = $aHotkey_control[$i][$hkc_button_state_4][$eControl_data_val] Then ;~ keyreleased($gaKey[$aHotkey_control[$i][$hkc_button_1][$eControl_data_val]][$eKey_code], _ ;~ $gaKey[$aHotkey_control[$i][$hkc_button_2][$eControl_data_val]][$eKey_code], _ ;~ $gaKey[$aHotkey_control[$i][$hkc_button_3][$eControl_data_val]][$eKey_code], _ ;~ $gaKey[$aHotkey_control[$i][$hkc_button_4][$eControl_data_val]][$eKey_code]) Return $i EndIf; key 4 EndIf; key 3 EndIf; key 2 EndIf; key 1 Next;i in hotkeys-1 Return $return EndFunc ;==>hotkey_check Func control_set_state($iStart, $iEnd, $state) For $i = $iStart To $iEnd GUICtrlSetState($i, $state) Next EndFunc ;==>control_set_state ; Enable / Disable list of GUI Controls, alter the exit program button state too Func gui_control_set_state($hGui, $control_id_start, $control_id_end, $state) Switch $state Case $GUI_DISABLE DisableButton($hGui, $SC_CLOSE) Case $GUI_ENABLE EnableButton($hGui, $SC_CLOSE) EndSwitch control_set_state($control_id_start, $control_id_end, $state) EndFunc ;==>gui_control_set_state ; First implemented to disable the Window Close X Func DisableButton($handle, $iButton) $dSysMenu = DllCall("User32.dll", "hwnd", "GetSystemMenu", "hwnd", $handle, "int", 0) $hSysMenu = $dSysMenu[0] DllCall("User32.dll", "int", "RemoveMenu", "hwnd", $hSysMenu, "int", $iButton, "int", 0) DllCall("User32.dll", "int", "DrawMenuBar", "hwnd", $handle) EndFunc ;==>DisableButton ; First implemented to enable the Window Close X Func EnableButton($handle, $iButton) $dSysMenu = DllCall("User32.dll", "hwnd", "GetSystemMenu", "hwnd", $handle, "int", 1) $hSysMenu = $dSysMenu[0] DllCall("User32.dll", "int", "RemoveMenu", "hwnd", $hSysMenu, "int", $iButton, "int", 0) DllCall("User32.dll", "int", "DrawMenuBar", "hwnd", $handle) EndFunc ;==>EnableButton ; Flags a selection when double clicking mylistbox Func _WM_COMMAND($hWnd, $msg, $wParam, $lParam) Local $nCode = BitShift($wParam, 16) ; HiWord Local $nIDFrom = BitAND($wParam, 0xFFFF) ; LoWord Switch $nIDFrom Case $gMylistbox Switch $nCode Case $LBN_DBLCLK $sListItem = GUICtrlRead($gMylistbox) ; Read selected item $gMylistboxmsg = 1 EndSwitch EndSwitch Return $GUI_RUNDEFMSG EndFunc ;==>_WM_COMMAND Func out($output = "", $timeout = 0);debug tool ConsoleWrite(@CRLF & $output);to console new line, value of $output ;MsgBox(0, @ScriptName, $output, $timeout, $ghGui) EndFunc ;==>out Func keyreleased($_key1, $_key2 = "", $_key3 = "", $_key4 = "") While _IsPressed($_key1) Or _IsPressed($_key2) Sleep(20) WEnd While _IsPressed($_key3) Or _IsPressed($_key4) Sleep(20) WEnd EndFunc ;==>keyreleased ; Bass Functions Func _Recording_GetDevices() Local $count = 0, $info, $name = "", $sdef = "", $idef = 0 While 1 $info = _BASS_RecordGetDeviceInfo($count) If @error Then ExitLoop $count += 1 If BitAND($info[2], $BASS_DEVICE_ENABLED) Then $name &= $info[0] & "|" If BitAND($info[2], $BASS_DEVICE_DEFAULT) Then $sdef = $info[0] $idef = $count EndIf WEnd ;GUICtrlSetData($hDevice, $name, $sdef) Return $idef - 1 EndFunc ;==>_Recording_GetDevices Func _Recording_GetInputs() Local $count = 0, $info, $name = "", $flags, $sdef = "", $idef = 0 $info = _BASS_RecordGetInputName($count) While $info <> "" $flags = _BASS_RecordGetInput($count) $count += 1 $name &= $info & "|" If BitAND($flags[0], $BASS_INPUT_OFF) = 0 Then $sdef = $info $idef = $count EndIf $info = _BASS_RecordGetInputName($count) WEnd ;GUICtrlSetData($hInput, $name, $sdef) Return $idef - 1 EndFunc ;==>_Recording_GetInputs Func _Bass_Cleanup() _BASS_Free(); All your base EndFunc ;==>_Bass_Cleanup Func record($aHotkey_control, $track) ; Remove the sound of smacking the keypress? Sleep(200) out("Recording track: " & $track) _Recording_Start($track) Do $record_track_key = hotkey_check($aHotkey_control, $track, $track) Until $record_track_key = -1 _Recording_Stop($track) EndFunc ;==>record Func sound_play($track, $repeat = 0, $dont_play = 0, $volume = 100) $file_path = @ScriptDir & "\Track\" $file_name = $track - $eMod_max + 1 & " v" & $gRecVersion & ".mp3" $file_path &= $file_name _BASS_ChannelStop($gaSound[$gSound_cur]) ; Free _BASS_StreamFree($gaSound[$gSound_cur]) ; Load If $repeat > 0 Then $gaSound[$gSound_cur] = _BASS_StreamCreateFile(False, $file_path, 0, 0, $BASS_SAMPLE_LOOP) Else $gaSound[$gSound_cur] = _BASS_StreamCreateFile(False, $file_path, 0, 0, 0) EndIf ; Set Volume _BASS_ChannelSetVolume($gaSound[$gSound_cur], $volume) ;Iniate playback If $dont_play = 0 Then _BASS_ChannelPlay($gaSound[$gSound_cur], $repeat) EndIf ; Incroment Sound_cur Index $gSound_cur += 1 If $gSound_cur >= $gaSound[0] Then $gSound_cur = 1 EndFunc ;==>sound_play Func _Recording_Start($track) Local $file_path = @ScriptDir & "\Track\" DirCreate($file_path) Local $file_name = $track - $eMod_max + 1 & " v" & $gRecVersion & ".mp3" $file_path &= $file_name out("_Recording_Start() File_path: " & $file_path) ;If GUICtrlRead($hWav) = $GUI_CHECKED Then ;$EncHandle = _BASS_Encode_Start($RecHandle, @ScriptDir & "\Test.wav", $BASS_ENCODE_PCM) ;Else ;$EncHandle = _BASS_Encode_Start($RecHandle, 'lame -r -x -b' & GUICtrlRead($hBitrate) & ' -h - "' & @ScriptDir & '\Test.mp3"', 0) ;EndIf ;$gEncHandle = _BASS_Encode_Start($RecHandle, 'lame -r -x -b' & GUICtrlRead($Bitrate) & ' -h - "' & @ScriptDir & '\Track' & $file_name"', 0) ; Keep Same ;$EncHandle = _BASS_Encode_Start($RecHandle, 'lame -r -x -b' & GUICtrlRead($hBitrate) & ' -h - "' & @ScriptDir & '\Test.mp3"', 0) ;$gEncHandle = _BASS_Encode_Start($gRecHandle, 'lame -r -x -b' & $gBitrate & ' -h - ' & "$file_path", 0) ;$gEncHandle = _BASS_Encode_Start($gRecHandle, 'lame -r -x -b' & $gBitrate & ' -h - "' & @ScriptDir & '\Test.mp3"', 0) $gEncHandle = _BASS_Encode_Start($gRecHandle, 'lame -r -x -b' & $gBitrate & ' -h - "' & $file_path & '"', 0) If $gEncHandle < 1 Then MsgBox(0, $gScript_name, "lame.exe call did not set $gEncHandle: " & $gEncHandle) Return 0 EndIf $gEncState = True EndFunc ;==>_Recording_Start Func _Recording_Stop($track) _BASS_Encode_Stop($gEncHandle) out("$gEncHandle: " & $gEncHandle) $gEncState = False EndFunc ;==>_Recording_Stop Func play_rec($track) Local $file_path = @ScriptDir & "\Track\" $file_name = $track - $eMod_max + 1 & " v" & $gRecVersion & ".mp3" Local $file_path2 = $file_path & $file_name sound_play($file_path & $file_name) out("Pos: " & _BASS_ChannelGetPosition($gRecHandle, $BASS_POS_BYTE)) _BASS_ChannelSetPosition($gRecHandle, 1, $BASS_POS_BYTE) out("New Pos: " & _BASS_ChannelGetPosition($gRecHandle, $BASS_POS_BYTE)) out("_BASS_ChannelPlay: " & _BASS_ChannelPlay($gRecHandle, 100)) EndFunc ;==>play_rec Func hotkey_name($aHotkey_control, $hotkey_id) Local $sHotkey_text = "" Local $sWasNull = 1 Local $sNewPart = "" For $i = 0 To $gHotkey_amount - 1 $sNewPart = "" If $sHotkey_text = "" Then $sWasNull = 1 If $sHotkey_text <> "" Then $sWasNull = 0 If $aHotkey_control[$hotkey_id][$hkc_button_1 + $i][$eControl_data_val] > -1 Then $sNewPart = $gaKey[ $aHotkey_control[$hotkey_id][$hkc_button_1 + $i][$eControl_data_val] ][$eKey_name] If $sNewPart <> "" Then If $sWasNull = 1 Then $sHotkey_text &= $sNewPart Else $sHotkey_text &= " + " & $sNewPart EndIf EndIf; newpart Next; i Return $sHotkey_text EndFunc; hotkey_name Func hotkey_update_display(ByRef $aControl, $aHotkey_control) For $i = 1 To $eMod_max - 1 $sHotkey_text = hotkey_name($aHotkey_control, $i) GUICtrlSetData($aControl[$i][1], $sHotkey_text) Next EndFunc; hotkey_update_display Edited June 20, 2017 by Xandy Added code nacerbaaziz 1 Human Male Programmer (-_-) Xandy About (^o^) Discord - Xandy Programmer MapIt (Tile world editor, Image Tile Extractor, and Game Maker)
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now