; +==============================================================================================================+ ; | AutoHotKey für A B L E T O N L I V E | ; | | ; | by vereiser 16.11.2019 | ; | eismond@vereiser.de | ; | | ; | F1 - Mixing Area / Mixer-Ansicht | ; | F2 - Arrangement View / Arrangement-Ansicht | ; | F3 - Mixing Area with Track Details / Mixer-Ansicht mit Spurdetailansicht | ; | F4 - Arrangement View with Clip Details / Arrangement-Ansicht mit Detailansicht | ; | F5 - Mixing Area with Track Details and Browser / Mixer-Ansicht mit Spurdetailansicht und Browser | ; | F6 - Arrangement View with Clip Details and Browser / Arrangement-Ansicht mit Detailansicht und Dateibrowser | ; | F9 - Minimize window / Verstecke Fenster | ; | F10 - Maximize window / Vergrö0ere Fenster | ; | Win + A (inactiv) - Open Ableton with last used song / öffne Ableton mit letztem Song in Arrangementansicht | ; | Strg + Tab - Default workspace toggles / Standard-Arbeitsumgebung-Schalter | ; | Strg + Space - Play song in arrangement view / Spiele Song vom Beginn in Arrangementansicht | ; | Tab - Return to last workspace / Zur letzten Workspace zurückkehren | ; | Strg + Alt + Shift + R - Copy track name to clipboard / Namen der Spur in Zwischenablage kopieren | ; | Alt + Shift + R - Rename track by clipboard / Spur umbenennen über Zwischenablage | ; | Strg + NumPad0 - Effect Sends / Effekt-Sends | ; | Strg + NumPad1 - Ins & Outs / Ein- und Ausgänge | ; | Strg + NumPad2 - Mixer | ; | Strg + NumPad3 - Returns Tracks / Return-Spuren | ; | Strg + NumPad4 - Delay / Spurverzögerung | ; | Strg + NumPad5 - S P E C I A L | ; | Strg + NumPad6 - Crossfade | ; | Strg + NumPad7 - Browser | ; | Strg + NumPad8 - Detail View / Detailansicht | ; | Strg + NumPad9 - File Manager / Dateiverwaltung | ; | Strg + NumPad/ - Overview Song / Songübersicht | ; +==============================================================================================================+ Pause Off ; _______________________________________________________________________________________ ; S E T T I N G S ; ======================================================================================= ;~ Default settings / Grundeinstellungen SetTitleMatchMode, 2 ;Der Titel eines Fensters kann den angegebenen Fenstertitel an beliebiger Stelle enthalten, um eine Übereinstimmung zu sein. SetTitleMatchMode, slow SetTitleMatchMode, RegEx ;~ Class for Win 64 - Ableton Live Suite / Klasse für Win 64 - Ableton Live Suite GroupAdd, LiveWin, ahk_class Afx:0000000140000000:0:0000000000000000:0000000001900015:00000000006B05C3 ;~ Global vars / Globale Variablen ;~ -- Application title global appAbleton := "Ableton" ;~ Workspaces for tab key global defaultSpace1 := 1 global defaultSpace2 := 2 ;~ -- Default global fullScreen := false global checkPositions := false global lastWorkspaceId := "" global actualWorkspaceId := "" global defaultWorkspaceToggleId := defaultSpace1 ; ____________________________________________________________________________________________________ ; K E Y M A P P I N G ; ==================================================================================================== LControl & NumpadDiv:: keyOverview() return LControl & Numpad1:: keyInAndOuts() return LControl & Numpad2:: keySends() return LControl & Numpad3:: keyReturns() return LControl & Numpad4:: keyMixer() return LControl & Numpad5:: keyTrackDelay() return LControl & Numpad6:: keyCrossfade() return LControl & Numpad7:: keyBrowser() return LControl & Numpad8:: keyDetailView() return LControl & Numpad9:: keyFileManager() return !^+r:: keyCopyName() return !+r:: keyRename() return LControl & Tab:: keyToggleWorkspaces() return LControl & Space:: keyJumpToStart() return LControl & Esc:: keyLastWorkspace() return LWin & A:: keyOpenAbletonWithLastSongOpened() return F1:: keyWorkspaceArrangementView() return F2:: keyWorkspaceMixingView() return F3:: keyWorkspaceArrangementViewWithDetails() return F4:: keyWorkspaceMixingViewWithDetails() return F5:: keyWorkspaceArrangementViewWithDetailsAndBrowser() return F6:: keyWorkspaceMixingViewWithDetailsAndBrowser() return F9:: keyMinimize() return F10:: keyMaximize() return ;_____________________________________________________________________________________________________ ; D E V E L O P E R - T E S T S ; ==================================================================================================== ;~ F12:: ;~ Suspend ;~ ;~ If WinActive("ahk_group LiveWin") { ;~ If WinActive(appAbleton) { ;~ data := getButtonPositions() ;~ Test ;~ MouseMove data.xMenuDetailsMixer, data.yMenuDetails, 1 ;~ Sleep 1000 ;~ MouseMove data.xMenuDetailsArrangement, data.yMenuDetails, 1 ;~ Sleep 1000 ;~ MouseMove data.xMenuType, data.yButtonTypeMixer, 1 ;~ Sleep 1000 ;~ MouseMove data.xMenuType, data.yButtonTypeArrangement, 1 ;~ Sleep 1000 ;~ } ;~ return ; ____________________________________________________________________________________________________ ; F U N C T I O N S ; ==================================================================================================== commandOverview() { If WinActive(appAbleton) { Send ^!o callEscape() } } showWorkspace(workspaceId) { if (workspaceId = 1) { Send, {F1} } if (workspaceId = 2) { Send, {F2} } if (workspaceId = 3) { Send, {F3} } if (workspaceId = 4) { Send, {F4} } if (workspaceId = 5) { Send, {F5} } if (workspaceId = 6) { Send, {F6} } } showMixerCrossFade() { Send !A {Up} {Up} {Up} {Enter} } showDetailsArrangement(buttonPositions) { clickPosition(buttonPositions.xMenuDetailsArrangement, buttonPositions.yMenuDetails, checkPositions) sleep 1 } showDetailsMixer(buttonPositions) { clickPosition(buttonPositions.xMenuDetailsMixer, buttonPositions.yMenuDetails, checkPositions) sleep 1 } showTypeArrangement(buttonPositions) { clickPosition(buttonPositions.xType, buttonPositions.yTypeArrangement) sleep 1 } showTypeMixer(buttonPositions) { clickPosition(buttonPositions.xType, buttonPositions.yTypeMixer, checkPositions) sleep 1 } showDetailView() { Send ^!l sleep 1 } showBrowser() { Send ^!b sleep 100 } showMixerSection() { Send !A {Up} {Up} {Up} {Up} {Up} {Enter} sleep 1 } showFileManager() { Send !A {Down} {Down} {Down} {Down} {Enter} sleep 1 } openLastSong() { ;~ Send !d {Down} {Down} {Right} {Enter} Send !d {Down} {Down} {Right} {Enter} } callEscape() { Send {Escape} sleep 1 } clickPosition(x,y, check = false) { MouseGetPos, mausX, mausY if (check) { MouseMove, x, y Sleep 3000 } MouseClick, left, x, y, 1, 1 MouseMove, mausX, mausY, 0 Sleep 1 } getWindowSettings() { WinGetPos , x, y, width, height return {x: x, y: y, width: width, height: height} } getScreenResolution() { SysGet, Monitor, Monitor, %A_Index% SysGet, MonitorWorkArea, MonitorWorkArea, %A_Index% return {x: MonitorRight, y:MonitorBottom, workAreaX: MonitorWorkAreaRight, workAreaY: MonitorWorkAreaBottom} } hideAllMenues() { ;~ Hide Browser View / Browser aus Send ^!g ; GroovePool showBrowser() ;~ Hide Right Menu / Rechtes Menü aus Send !A {Down} {Down} {Down} {Enter} showFileManager() showFileManager() ;~ Hide Detail Menu / Unteres Menü aus Send, {LShift}+{Tab} showDetailView() } getButtonPositions() { windowSettings := getWindowSettings() screenResolution := getScreenResolution() yMixer = 117 yArrangement = 95 xMixerDetails = 60 xMixerArrangement = 160 ;~ Default xWindowRight := windowSettings.width yWindowTop := 0 yWindowBottom := windowSettings.height ;~ View Type xMenuType := xWindowRight - 25 yButtonTypeMixer := yWindowTop + yMixer yButtonTypeArrangement := yWindowTop + yArrangement ;~ Details yMenuDetails := yWindowBottom - 25 xMenuDetailsMixer := xWindowRight - xMixerDetails xMenuDetailsArrangement := xWindowRight - xMixerArrangement return { yMenuDetails: yMenuDetails, xMenuDetailsMixer: xMenuDetailsMixer, xMenuDetailsArrangement: xMenuDetailsArrangement, xType: xMenuType, yTypeMixer: yButtonTypeMixer, yTypeArrangement: yButtonTypeArrangement } } ;~ K E Y A C T I O N S ;~ Overview / Übersicht keyOverview() { If WinActive(appAbleton) { Send ^!o callEscape() } } ;~ In and Out / Ein- und Ausgänge keyInAndOuts() { If WinActive(appAbleton) { Send ^!i callEscape() } } ;~ Sends / Effekt-Sends keySends() { If WinActive(appAbleton) { Send ^!s callEscape() } } ;~ Returns / Return-Spuren keyReturns() { If WinActive(appAbleton) { Send ^!r callEscape() } } ;~ Mixer / Mixer keyMixer() { If WinActive(appAbleton) { showMixerSection() callEscape() } } ;~ Delay / Spurverzögerung keyTrackDelay() { If WinActive(appAbleton) { Send !A {Up} {Up} {Up} {Up} {Enter} callEscape() } } ;~ Crossfade / Überblendung keyCrossfade() { If WinActive(appAbleton) { showMixerCrossFade() callEscape() } } ;~ Browser / Browser keyBrowser() { If WinActive(appAbleton) { showBrowser() callEscape() } } ;~ Detail view / Detailansicht keyDetailView() { If WinActive(appAbleton) { showDetailView() callEscape() } } ;~ File Manager / Dateiverwaltung keyFileManager() { If WinActive(appAbleton) { showFileManager() callEscape() } } ;~ Copy of a name / Kopieren eines Namens keyCopyName() { If WinActive(appAbleton) { Send, ^r sleep 1 Send, ^c } } ;~ Rename / Umbenennen mit Zwischenablage keyRename() { If WinActive(appAbleton) { Send, ^r Sleep 1 Send ^v } } ;~ Tabulator-Taste für zwei Standard Workspaces keyToggleWorkspaces() { If WinActive(appAbleton) { if (defaultWorkspaceToggleId = defaultSpace1) { defaultWorkspaceToggleId := defaultSpace2 showWorkspace(defaultSpace2) } else { defaultWorkspaceToggleId := defaultSpace1 showWorkspace(defaultSpace1) } } } ;~ Zum Start des Songs springen und abspielen keyJumpToStart() { If WinActive(appAbleton) { Send NumpadMult Send NumpadMult Sleep 1000 Send Space } } ;~ Zum letzen Fenster zurückspringen keyLastWorkspace() { If WinActive(appAbleton) { showWorkspace(lastWorkspaceId) } } ;~ Ableton aufrufen mit letztem Song keyOpenAbletonWithLastSongOpened() { buttonPositions := getButtonPositions() WinMinimizeAll Run "C:\Program Files (x86)\Ableton Live\Program\Ableton Live 9 Suite.exe" while (!WinActive(appAbleton)) { } hideAllMenues() showTypeArrangement(buttonPositions) openLastSong() } ;~ W O R K S P A C E A : Arrangement View / Arrangement-Ansicht keyWorkspaceArrangementView() { If WinActive(appAbleton) { buttonPositions := getButtonPositions() hideAllMenues() showTypeArrangement(buttonPositions) lastWorkspaceId := actualWorkspaceId actualWorkspaceId := 1 } } ;~ W O R K S P A C E B : Mixing View / Mixer-Ansicht keyWorkspaceMixingView() { If WinActive(appAbleton) { buttonPositions := getButtonPositions() hideAllMenues() showTypeMixer(buttonPositions) lastWorkspaceId := actualWorkspaceId actualWorkspaceId := 2 } } ;~ W O R K S P A C E C : Arrangement View with Detail View / Arrangement-Ansicht mit Detailansicht keyWorkspaceArrangementViewWithDetails() { If WinActive(appAbleton) { buttonPositions := getButtonPositions() hideAllMenues() showTypeArrangement(buttonPositions) showDetailsArrangement(buttonPositions) lastWorkspaceId := actualWorkspaceId actualWorkspaceId := 3 } } ;~ W O R K S P A C E D : Mixing View with Details / Mixer-Ansicht mit Detailansicht keyWorkspaceMixingViewWithDetails() { If WinActive(appAbleton) { buttonPositions := getButtonPositions() hideAllMenues() showTypeMixer(buttonPositions) showDetailsMixer(buttonPositions) lastWorkspaceId := actualWorkspaceId actualWorkspaceId := 4 } } ;~ W O R K S P A C E E : Arrangement View with Detail View and Browser / Arrangement-Ansicht mit Detailansicht und Browser keyWorkspaceArrangementViewWithDetailsAndBrowser() { If WinActive(appAbleton) { buttonPositions := getButtonPositions() hideAllMenues() showTypeArrangement(buttonPositions) showBrowser() showDetailsMixer(buttonPositions) lastWorkspaceId := actualWorkspaceId actualWorkspaceId := 5 } } ;~ W O R K S P A C E F : Mixing View with Details and Browser / Mixer-Ansicht mit Detailansicht und Browser keyWorkspaceMixingViewWithDetailsAndBrowser() { If WinActive(appAbleton) { buttonPositions := getButtonPositions() hideAllMenues() showTypeMixer(buttonPositions) showBrowser() showDetailsMixer(buttonPositions) lastWorkspaceId := actualWorkspaceId actualWorkspaceId := 6 } } ;~ Minimize keyMinimize() { If WinActive(appAbleton) { WinMinimize } } ;~ Maximize keyMaximize() { If WinActive(appAbleton) { WinMaximize } }