But Ableton Live only offers a hand full. Not even Alt + MenuKey UnderlinedSubMenuKey is working for instance.
One other really big thing live misses is an interface that has free configurable workspaces.
We all want to make music not by clicking buttons and making beats with our mouse clicks.
Ok. No matter.
Here I present a small solution for Ableton 9. It's not testet with 10.
The most important advantage of my tool is that you save a lot of time, cause you need only one shortkey to show another view of your Ableton Live desktop - at least 6 worksspaces. Additionally you can hide / show mixer controls or ableton panels with easy keyboard shortcuts.
Momentary it is a first test. Give it a try. Please .
I tried to prepare the code for easy customization.
I created the short key script with AutoHotkey (file extension .ahk).
The new defined short keys overwrite Ableton Live ones only.
Download .ahk http://www.vereiser.de/Download/Ableton ... utions.ahk
Download .exe (Win7 64 bit only tested at the moment) http://www.vereiser.de/Download/Ableton ... utions.exe
Code: Select all
; +==============================================================================================================+
; | AutoHotKey - 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
}
}