https://github.com/raphaelquast/beatstep
A Midi Remote Script for Ableton Live 10 & 11 and the Arturia Beatstep controller
https://github.com/raphaelquast/beatstep
ableton-live beatstep midi midi-remote-script
Last synced: 5 months ago
JSON representation
A Midi Remote Script for Ableton Live 10 & 11 and the Arturia Beatstep controller
- Host: GitHub
- URL: https://github.com/raphaelquast/beatstep
- Owner: raphaelquast
- License: gpl-3.0
- Created: 2020-11-23T23:02:09.000Z (over 5 years ago)
- Default Branch: master
- Last Pushed: 2023-11-24T10:16:45.000Z (over 2 years ago)
- Last Synced: 2023-11-24T11:26:27.281Z (over 2 years ago)
- Topics: ableton-live, beatstep, midi, midi-remote-script
- Language: Python
- Homepage: https://raphaelquast.github.io/beatstep/
- Size: 92.9 MB
- Stars: 40
- Watchers: 5
- Forks: 11
- Open Issues: 10
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Beatstep_Q
**Beatstep_Q** is a **MIDI Remote Script** for **Ableton Live 9, 10 & 11** and the **Arturia BeatStep** controller.
It turns your BeatStep into a fully-fledged control-surface for Ableton Live !
- there are 6 different layers that give you a lot of control over Ableton Live:
- play midi instruments with access to the **full range** of midi-notes!
- browse Ableton's library (in the info-bar) and prelisten/load/hotswap instruments & devices
- control tracks/scenes and clips
- select / arm / mute / solo / start / stop / record / delete / duplicate / overdub / undo / redo / ...
- initialize and edit 16 note MIDI-sequences
- change properties of one or more notes simultaneously via the "multi-touch" editing mode
- get indications on the status of clips, tracks, playback-state and MIDI notes via button-LED's
- ... and much more!
### Comments / suggestions / bugs?
> Just drop an [Issue](https://github.com/raphaelquast/beatstep/issues) or start a [Discussion](https://github.com/raphaelquast/beatstep/discussions) and I'll see what I can do!
... and as you might imagine...
developing and maintaining all of this is quite some work, so if you like what I did, how about buying me a coffee?
# Installation
No real installation required... just copy the files, and you are ready to go!
1) copy all files of the latest [release](https://github.com/raphaelquast/beatstep/releases) into a folder named **"Beatstep_Q"**
inside the MIDI Remote scripts folder of Ableton Live
(located at `..install-dir..\Resources\MIDI Remote Scripts`)
2) start Ableton and select **Beatstep_Q** as control-surface in the MIDI-tab of the preferences.
(make sure to activate both `track` and `remote` for this device!)
❗BeatStep's **storage bank 9** is used during runtime. Any configuration stored to this slot will be overwritten❗
# Overlay
The overlay-design provides indications for all assignments (including secondary-functions)
(I got mine printed here: [Taktility](https://www.taktility.com/))


# Summary of Assignments

---
# More detailed explanations on the assignments:
The script will set all encoders and buttons to send messages on the Midi-channel 10. To indicate a successful setup, the top-row will light up red and blue (about 2 seconds after plugin).
- It's best to **connect the controller after Ableton started** to ensure that all settings are properly assigned.
- To ensure that the script is automatically selected (instead of the default script), rename the already existing *"Beatstep"* folder to *"_Beatstep"* (or something that it is alphabetically sorted **after** *"BeatStep_Q"*)
> After initialization, you can recall any saved MIDI configuration and the control-layers will still work!
## General (click to expand)
:black_square_button: BUTTONS
The buttons `recall`, `store`,`chan` and `shift` are used to activate the control-layers.
- to maintain the initial functionality of the buttons, the layers are activated when the buttons are **released** !
- all layers (except the *"shift-layer"*) remain activated until the corresponding button is pressed again
- holding `shift` and pressing `chan` will activate the *"mix-layer"*
- holding `shift` and pressing `recall` will activate the *"browser-layer"*
- **double-tapping** `shift` will activate the *"shift-layer"* permanently (until shift is pressed again)
- the *"if shift pressed"* features are only available if the corresponding layer is activated permanently **and** `shift` is pressed
The `stop` button works the same (on all layers) as follows:
- if the selected clip is currently recording: only recording is stopped (but playback is continued)
- if the selected clip is playing: stop is triggered
- *"if shift pressed"* : stop **ALL** tracks
> While no layer is active, all buttons can be used to play midi-notes!
> (>> use the `transpose-encoder` to change the assigned range of midi-notes)
---
:white_circle: ENCODERS
The `transpose-encoder` can be used to transpose the note-assignments of the buttons.
(a red button-color indicates that the lower-left button is at the note C-2, C-1, C0, C1, etc.)
> The info-message also tells you the current assignment of the lower-left button (e.g. `button 9`)
- `encoder 1-4` and `9-12` : control the first 8 parameters of the selected device
- `encoder 5, 6, 13, 14` : send A, B, C, D of selected track
- `encoder 7` : volume of selected track
- *"if shift pressed"*: volume of master-track
- `encoder 15` : pan of selected track
- *"if shift pressed"*: pan of master-track
- `encoder 8` : track-selection (left-right) [💡 this is the same for all layers!]
- *"if shift pressed"* **and** a *"drum-rack"* is selected:
select drum-pad slot of the viewed 16 slots
- `encoder 16` : scene selection (up-down) [💡 this is the same for all layers!]
- *"if shift pressed"* **and** a *"drum-rack"* is selected:
select row of viewed drum-pads
---
## Layers (click to expand)
:trumpet: SHIFT
If NO other layer is activated, pressing "shift" temporarily activates the `shift` layer
It serves as a *quick-access* layer for frequently used functions.
The layer is deactivated as soon as `shift` is released!
**double-tap** `shift` to activate the layer permanently.
The lights in the first indicate the currently activated clip.
(`red` for midi, `blue` for audio and `magenta` for return tracks)
The lights in the second row indicate the track-arm status:
- `red` if the track is **armed** and **not muted**
- `magenta` if the track is armed but muted
- `blue` if the track represents a **track-group**
- `off` if the track is muted and **not** armed
#### The assignments are as follows:
- `button 1-7`: select track 1-7 of the currently focussed slots (red box)
- double tap an already selected track to arm/unarm it
- if the selected track is a track-group, instead fold/unfold the group
- `button 8`: select previous scene (e.g. go 1 scene up)
- if the control-layer is activated permanently, holding `shift` will switch to track-selection
- `button 9` : undo last step
- `button 10`: delete selected clip
- `button 12`: duplicate the currently selected clip and set the focus to the duplicate
- `button 13`: duplicate the currently selected loop
- `button 15`: start recording
- if the currently selected slot is empty, start recording a new clip
- if a clip is already present, toggle overdubbing the clip
- `button 16` : select next scene (if at the end, create a new scene)
- if the control-layer is activated permanently, holding `shift` will switch to track-selection
All encoders are assigned as described above except for the `transpose-encoder`, which is now used to **select devices** in the device-chain of the selected track. (turning the `transpose-encoder` will automatically focus the view to the device-chain!)
---
:open_file_folder: BROWSE
The browser works ONLY in the info-bar... it is not connected to Ableton's browser-window!
(I know this would be nice... but the Ableton python-API does not allow it)
The status-bar symbols indicate the following:
- :red_circle: : the selected item can be loaded
- :fire: ... :fire: : hotswap is active
- :arrows_counterclockwise: : the item can be hotswapped
- :black_circle: : the item can not be loaded directly (it's a collection of sub-items)
- :file_folder: : the item is a folder (and can not be loaded directly)
- :small_blue_diamond: a loadable item that is not selected
Most button-lights are simply there to help remember the button-assignments.
- `button 13` indicates if **hotswap** is on or off (`red` for on)
- `button 14` indicates if **prelisten** is on or off (`blue` for on)
#### The assignments are as follows:
- `button 1` : open **sounds**
- `button 2` : open **drums**
- `button 3` : open **instruments**
- `button 4` : open **audio-effects**
- `button 5` : open **MIDI-effects**
- `button 6` : open **samples**
- `button 7` : open **collections**
- `button 8` : select previous track
- "if shift pressed" : select previous device
- `button 9` : go 1 item left
- `button 10` : go 1 item right
- `button 11` : go 1 folder-level down (if possible)
- `button 12` : go 1 folder-level up (if possible)
- `button 13` : toggle hotswapping the currently selected instrument/device
- `button 14` : toggle item-preview
- `button 15` : load the selected item (on the currently selected track if possible)
- "if shift pressed" : load the selected item on a new track
- `button 16` : select next track
- "if shift pressed" : select next device
All encoders are assigned similar to the *"shift-layer"*.
---
:violin: CONTROL
Most lights are simply there to help remember the button-assignments.
The lights of `button 13` and `button 14` indicate the status of their corresponding parameter in Live.
- `button 13` indicates the status of the metronome (`red` for on)
- `button 14` indicates the status of "automation arm" (`red` for active)
- "if shift pressed" and an automation has been overridden, the button will turn `blue`
- `button 3`, `10` and `11` will turn red if shift is pressed to highlight the alternative functionality
#### The assignments are as follows:
- `button 1` : redo last step
- `button 2` : fold / unfold selected device
- `button 3` : activate / deactivate selected device
- *"if shift pressed"* : delete selected device
- `button 6` : cycle through the *"launch-quantization"* times (e.g. 1 bar, 1/2 bar, 1/8 bar etc.)
- *"if shift pressed"* : turn *"launch-quantization"* off
- `button 7` : toggle between showing the selected *"clip-details"* or the *"device-chain"* of the selected track
- *"if shift pressed"* : toggle between Ableton's session-view and arrangement-view
- `button 8` : select previous scene (e.g. go 1 scene up)
- - *"if shift pressed"* : select previous track
- `button 9` : undo last step
- `button 10` : duplicate selected track
- "if shift pressed" : delete selected track
- `button 11` : duplicate selected scene
- *"if shift pressed"* : delete selected scene
- `button 12` : tap tempo
- `button 13` : toggle metronome
- `button 14` : toggle *"session automation record"*
- *"if shift-pressed"* and an automation has been overridden: *"re-enable automation"*
- `button 15` : change the assigned "pad velocity curve" (e.g. the midi velocity response of the pad)
- `blue` for linear, `magenta` for logarithmic, `red` for exponential and `off` for "always max. velocity"
- `button 16` : select next scene (if at the end, create a new scene)
- *"if shift-pressed"*: select next track
All encoders are assigned similar to the *"shift-layer"*.
---
:guitar: LAUNCH
In this control-layer, both button-rows (e.g. `1-7` and `9-15`) represent clip-slots.
NOTICE: the `stop` button has a special feature in this layer (see below).
There are 2 possible ways to activate this layer:
- tap `store` to control **2 clip-slots of 7 tracks**
- only the `store` button LED will be on
- tap `shift + store` to control **14 clip-slots of 1 track**
- the LED's of `store`, `chan` and `recall` will be on
The button-lights indicate the status of the clip-slots, e.g.:
- `blue` indicates a slot with a clip
- a `blue blinking` slot indicates a clip that is triggered to **stop**
- `red` indicates a clip that is playing
- a `red blinking` slot indicates a clip that is triggered to **play**
- `magenta` indicates a group-track (it will turn `red` if a clip of the group is playing) [or indicate a triggered clip in `shift + store` mode]
- the `shift` button indicates if *"re-trigger clips"* or *"stop clips"* mode is active
#### The assignments are as follows:
- the `stop-button` toggles the behavior of the buttons (indicated by the `shift` button LED)
- *"re-trigger clips"* mode (`shift` LED OFF) : tapping on an already playing clip will **re-trigger** the clip
- *"stop clips"* mode (`shift` LED ON) : tapping on an already playing clip will **stop** the clip
(... the *"if shift-pressed"* behavior is still similar to the other layers, e.g. *"stop all clips"*)
- `button 1-7` : launch the clips present in the top-row of the selection.
- *"if shift-pressed"* : select the track to which the clip-slot belongs to
- if the slot is a "group-slot": fold/unfold the corresponding group
- `button 8` : select previous scene (e.g. go 1 scene up)
- *"if shift-pressed"*: select previous track
- `button 9-15` : same as `1-7` but for the bottom row of the selection.
- `button 16` : select next scene (if at the end, add a new scene)
- *"if shift-pressed"*: select next track
All encoders are assigned similar to the *"shift-layer"*.
---
:headphones: MIX
The lights in the top-row indicate the mute / solo status of the corresponding track.
- `blue` for a track that is set to solo
- `magenta` for an unmuted track
- `red` if the track is both solo and muted
- `off` if the track is muted and not solo
The lights in the bottom-row indicate the arm status of the corresponding track.
- `red` if the track is armed
- `blue` if the track represents a track-group
- `off` if the track is unarmed (and no track-group)
#### The assignments are as follows:
- `button 1-7` : set the **mute** status of the first 6 tracks in the red box
- *"if shift pressed"*: **solo** the corresponding track
- `button 9-15` : set the **arm** status of the first 7 tracks in the red box
- if the track represents a group, fold / unfold the corresponding group
- `button 8` : select previous scene (e.g. go 1 scene up)
- *"if shift pressed"*: select previous track
- `button 16` : select next scene (if at the end, create a new scene)
- "if shift pressed" : select next track
- `encoder 1-7` : *"track volume"* of corresponding track
- *"if shift pressed"* : *"send A"* of corresponding track
- `encoder 9-15` : *"track pan"* of corresponding track
- *"if shift pressed"* : *"send B"* of corresponding track
- `encoder 8` : track-selection (left-right)
- `encoder 16` : scene selection (up-down)
- `transpose encoder` : set volume of master-track
---
:musical_score: SEQUENCER
The `sequencer`-layer is only available in **Ableton 11** or newer!
The `sequencer` layer has 2 different functionalities:
- If `shift` is pressed, you can use all button-functions from the `shift`-layer!
NOTE: The first 6 characters of a clip-name are used to parse the tempo of the midi sequence!
> E.g. a clip-name starting with `1/32_Q` will be identified as having a tempo of 1/32.
> Any characters after the first 6 are ignored. (e.g. a name of `1/32_Q what a nice clip` is fine!)
:ant: SEQUENCE EDITOR (active if a MIDI clip is selected)
In the sequence-editor mode you can edit the first 16 notes of the selected MIDI clip.
- the colors of `buttons 1-16` are
- `black` if there is no note or the note is muted
- `blue` if there is a note, and it is unmuted
- `magenta` if the note is unmuted and outside the loop
- it also indicates if less than 16 notes are present
- a moving `red` light indicates the playback-state of the clip
- check the Ableton info-bar for info-messages!
#### The assignments are as follows:
- multi-touch editing mode:
- touch & hold one (or more) buttons and turn the `transpose`-encoder to change the assigned property of the selected notes
- use `encoder 1-6` to set which property you want to change
- `button 1-16` : mute/unmute corresponding note
- `shift` + `button 1-16` : use functionality of `shift`-layer
- `encoder 1` : set encoders to change **note pitch**
- `encoder 2` : set encoders to change **note velocity**
- `encoder 3` : set encoders to change **note start-time**
- `encoder 4` : set encoders to change **note duration**
- `encoder 5` : set encoders to change **note velocity-deviation**
- `encoder 6` : set encoders to change **note probability**
- `encoder 8` : select prev/next track
- `encoder 9` : change the loop start-time (coarse steps)
- `encoder 10` : change the loop start-time (fine steps)
- `encoder 11` : change the position of the loop (fine steps)
- `encoder 12` : change the loop end-time (fine steps)
- `encoder 13` : change the loop end-time (coarse steps)
- `encoder 15` : transpose all notes that are inside the loop
- `encoder 16` : select prev/next scene
- `shift` + `encoder 1-16` : change assigned parameter of corresponding note
:hatching_chick: SEQUENCE INITIALIZER (active if the selected clip-slot is empty)
In the sequence-initializer layer you can set the start-parameters for the midi-sequence
that is initialized if you press `chan` again.
- `buttons` 1-8 indicates the tempo of the MIDI notes as "notes/bar"
[1/32, 1/16, 1/8, 1/4, 1/2, 1, 2, 4]
- `buttons` 9, 10, 11, 12 indicate how the note-interval is filled
- NOTE you can also use this to offset the notes!
- `buttons`13, 14, 15, 16 indicate the velocity of the notes (0.25, 0.5, 0.75, 1)
- check the Ableton info-bar for info-messages!
#### The assignments are as follows:
- `buttons` 1-8: set sequence-tempo
- `buttons` 9, 10, 11, 12 : set note-interval
- `buttons`13, 14, 15, 16 : set velocity
- **double-tap** `shift` : initialize a 16 note midi sequence with the selected parameters
- `transpose-encoder` : set the note-pitch for the initialized sequence
- `encoder 1` : set encoders to change **note pitch**
- `encoder 2` : set encoders to change **note velocity**
- `encoder 3` : set encoders to change **note start-time**
- `encoder 4` : set encoders to change **note duration**
- `encoder 5` : set encoders to change **note velocity-deviation**
- `encoder 6` : set encoders to change **note probability**
- `encoder 8` : select prev/next track
- `encoder 9` : set pitch increment of notes
- `encoder 10` : set number of incremented notes
- `encoder 15` : transpose all notes that are inside the loop
- `encoder 16` : select prev/next scene
---
## Thanks to
- [untergeek](https://www.untergeek.de/2014/11/taming-arturias-beatstep-sysex-codes-for-programming-via-ipad/) for unravelling BeatStep sysex messages
- Julien Bayle for the awesome [PythonLiveAPI_documentation](https://julienbayle.studio/PythonLiveAPI_documentation/) and some more info's ( [here](https://julienbayle.studio/ableton-live-midi-remote-scripts/) )
- Hanz Petrov for his [Introduction to the Framework-classes](https://livecontrol.q3f.org/ableton-liveapi/articles/introduction-to-the-framework-classes/) and the corresponding [remotescripts-blog](http://remotescripts.blogspot.com)
---
