Keyboard shortcuts
The keys below belong to the window itself, not to the operating system: they work while the MusicStation window has the focus, in every view, and they drive the same actions as the buttons they stand for. The complete list ships in the shortcut editor, where every one of them can be changed, disabled and reset - and the editor is the same list this chapter documents, so a key you remap never falls out of the manual.
Keyboard shortcuts
The Keyboard shortcuts section is the last block of the settings panel - the one docked on the right in the shipped arrangement; the menu entry Keyboard Shortcuts… shows that panel when the workspace keeps it closed, scrolls the section into view and hands it the keyboard. It lists every shortcut of the window as one row and is the only place where the keyboard is customised - a change takes effect at once, without a restart: the new key works from the next press and the old one is gone.
One row carries:
- the name of the action and, behind it, the binding as the running platform prints it -
⌘⇧Kon macOS,Ctrl+Shift+Kon Windows and Linux. The keys are named by the character that is printed on the key cap, so the binding follows the layout you type on. - Manual - opens the manual at the section that describes the action, exactly like F1 over the control the shortcut stands for.
- Capture - the button that takes the next key press as the new binding (see Capture).
- Reset - puts this one binding back to its baseline (see Reset). The button is available as soon as the row differs from the baseline.
- Disable - the switch that switches the shortcut off (see Disable).
Every change is stored immediately in the shortcut document shortcuts.json of the application's
config directory, so the map survives the next start. The document carries a schema version and is
read tolerantly: a malformed binding falls back to the key of the selected
preset, and an entry the running build does not know is kept untouched instead
of being deleted. A document whose schema version this build does not know reads as the shipped map;
the file on disk is left exactly as it is until you change something here.
The keyboard is part of the window, not of the session or of the audio engine: remapping a key is invisible to the engine, to the iPad remote and to an OSC controller, and it never interrupts playback.
Search
The search field at the head of the list filters the rows as you type. It matches both the translated name of the action and the printed binding, so launch finds the launch shortcuts and space finds everything that uses the space bar. Escape clears the field without leaving it, and the filter is only a filter: it changes neither the map nor the keys that are active in the window. While nothing matches, the list says so and stays empty.
Capture
The button that binds a new key. Click Capture on the row you want to change, and the row waits for the next key press:
- Press the key you want - the row takes that press as its binding, and the printed form of the action appears in the row. Hold the modifiers that belong to the binding while you press it: they are stored with the key and are required at runtime as well.
- Escape cancels the capture without changing anything - the row keeps its previous binding.
- Tab also leaves the capture, so the keyboard is never trapped in it; the press travels on and the focus moves on as usual.
While a row is waiting, a Press keys… prompt stands where the button was. The capture takes the key press before every other handler of the window, so the key you are binding does not run its action on top of it - binding the space bar does not start the transport. A modifier pressed on its own (⌘, ⌥, Shift, Ctrl) is not a binding: the row keeps waiting for the key it belongs to. One row captures at a time: starting a second capture ends the first one.
The modifiers are part of the binding, and a binding only matches when exactly its modifiers are held: a binding stored as plain K is not triggered by ⌘K. If you want a key combination instead of a single key, hold its modifiers while you press the key. Almost every key of the keyboard can be bound: the exceptions are Escape and Tab, the two keys that leave the capture, and the modifiers on their own, which are no binding by themselves. The binding stores the printed character, not a fixed position on the keyboard - a key keeps its meaning when you switch to another layout.
Reset
Reset puts the binding of that one row back to its baseline, so your override is removed and the key of the selected preset applies again - the shipped MusicStation key while no preset is selected. The reset is applied and stored at once; the other rows, the disabled shortcuts and the preset selection stay untouched. The button is disabled as long as the document lists nothing of its own for that row, because there is nothing to undo then.
The same help id documents the global reset in the footer of the section, Reset all shortcuts: it puts the whole map back to the shipped MusicStation keys, as if the shortcut document had never been written - every override is removed, every disabled shortcut is enabled again and the preset selection is cleared. Because that is the one gesture that throws away all of your bindings, it asks for confirmation: the button becomes Reset all now?, and only the second press carries the reset out. Any other gesture of the footer - the preset, Import… or Export… - ends the question instead of leaving it standing, so the confirmation belongs to one gesture only; Cancel next to it puts it straight back.
"Reset all shortcuts" is a reset of the keyboard. The Reset all to defaults button of the settings column above it belongs to the settings and does not touch the shortcut map (see Reset all to defaults).
Disable
The switch of a row turns that one shortcut off. The row keeps its entry in the document - a null
instead of a binding - so the disabled state is remembered, while the key the row had is gone:
- On (the switch is engaged, the row shows Disabled instead of a key) - the shortcut does not
fire, and its binding is replaced by that
null. Another shortcut may now take its keys without a conflict. - Off - the override is removed, so the baseline binding of the preset applies again. That is the same effect as Reset for this row: the binding that was in the row before it was disabled does not come back, the row falls back to the preset's key.
Disabling is the way to free a key for something else completely, for example handing it to another application or to a future mapping.
Preset
The Preset select chooses the baseline of the whole map: the MusicStation keys (the shipped map), the Ableton-like keys or the Logic-like keys. Selecting a preset clears every override, including the disabled shortcuts - a preset is a complete map, and an override that was meant for another baseline would silently change meaning. Pick the preset you come from and remap only what you miss; the selection is stored with the map and is shown again at the next start.
Exactly two of the six bindings differ between the three baselines; the other four are identical in all of them:
- MusicStation - the shipped map: Enter jumps to bar 1, L flips the loop of the focused slot.
- Ableton-like - Home jumps to bar 1 instead of Enter, which is what Ableton Live does. The loop key stays L.
- Logic-like - Home jumps to bar 1, and the loop of the focused slot moves to C, the Logic Pro key. L is then free.
A map without a selection resolves exactly like MusicStation: a freshly installed MusicStation behaves the same whether the preset was never touched or MusicStation was picked explicitly, and the select shows MusicStation as long as nothing else was picked.
Import…
Reads a shortcut file from disk and replaces the current map with it. The native open dialog is filtered to JSON files, and the file it reads is the exported document itself: the selected preset and the bindings, one entry per changed shortcut.
- An imported file replaces the whole map - the preset, every binding and every disabled shortcut of the current map are discarded, not merged. What the file does not list falls back to the baseline of the preset it names - the shipped MusicStation keys while it selects no preset, and the keys of that preset otherwise.
- A file that cannot be read - the dialog reported a path the file system no longer has, or the read failed - leaves the map exactly as it was and shows the hint The file could not be read. The shortcuts are unchanged.
- A file that is not a shortcut file - not JSON, a JSON value that is not an object, a document
version this build does not know, or a document whose
bindingsmember is not an object - is rejected as a whole with the hint This is not a shortcut file. The shortcuts are unchanged. The map is not touched in that case either. - A cancelled dialog imports nothing and says nothing.
- A file that is a valid shortcut document is accepted in full: entries for shortcuts the running build does not ship are kept in the map (they are never matched and survive the next export), and unknown members inside a binding are ignored.
Import is the way to carry your keyboard between two machines or two installations: export on one, import on the other. Because the import is a whole-map replacement, export first if you want to be able to go back.
Export…
Writes the current map into a JSON file through the native save dialog. The dialog filters to JSON
files and suggests no name, so the name is yours; the extension .mshshortcuts.json is the customary
one for these exports, and it is what makes a shortcut file recognisable next to other JSON files. The
file holds the selected preset and the current bindings - one entry per shortcut you changed, one
null entry per shortcut you disabled - and it is exactly the document the next
Import reads back.
The export contains your current map, not the shipped keys: it is a backup of your keyboard and a way to hand it to another installation. Everything the map keeps is written out, including the entries for shortcuts a newer build added. A cancelled dialog writes nothing.
Keyboard Shortcuts… (menu)
The entry in the MusicStation menu next to Settings… reveals this section and hands it the keyboard; it is documented with the rest of the menu bar (see Keyboard Shortcuts…). Like Settings… it opens no dialog - the editor is part of the window and the window keeps running while you use it. The entry has no accelerator of its own on purpose: an accelerator resolved by the operating system could not be remapped here.
The shipped shortcuts
Every shortcut of this build with its default key. The Scope column names where the key applies:
two bindings are marked with grid, and those are the ones the
session grid consumes while one of its cells has the focus - everywhere
else in the window the same key does the other thing, which is why the two Enter rows are not a
conflict. The two transport keys are additionally scoped by the focus, as the paragraph below the
table explains.
| Action | Default key | Scope |
|---|---|---|
| Play/Stop | Space | anywhere in the window outside a text, select or editable field |
| Go to bar 1 | Enter | anywhere outside the session grid and outside a text, select or editable field |
| Launch the focused clip slot | Enter | grid: the focused slot or scene |
| Toggle the loop of the focused clip slot | L (also l) |
grid: the focused slot |
| Help for the control under the pointer | F1 | anywhere in the window |
| Help for the control under the pointer | ⌘? (Ctrl+? elsewhere) | anywhere in the window |
A focused field keeps the transport keys. A text field, a select field and an editable area own the keys that edit or open them, so Space and Enter belong to such a field while the keyboard focus is in it: a space in the Tempo field stays a space (see Play/Stop (Space)). The two help keys are not blocked by the focus - F1 and ⌘? open the help of the control under the pointer or of the one that has the focus, wherever that field is - and the two transport keys are off while the interface is not connected to the engine, exactly like the buttons they stand for.
A key that is not listed here has no shortcut: Escape, the arrow keys, Tab, Home and PageUp/PageDown belong to the control that has the focus (the help panel, a field, the clip grid) and are documented with it. Home is the one key of that list that a preset can turn into a shortcut: the Ableton-like and the Logic-like keys put it on Go to bar 1, and it then works everywhere outside the grid, exactly like the Enter of the shipped map. The accelerators of the native menu - ⌘, for Settings…, ⌘⇧/ for Context Help, ⌘⇧W for What's New - are resolved by the operating system before the window sees the key; they are not part of this map and cannot be remapped here (see Menus).
Why Enter twice and two help keys are not a conflict
- The two
Enterrows are two different actions with a scope. The session grid takes the press while one of its cells or one of its scene buttons has the focus, so Enter launches what the focus is on; everywhere else the transport takes it and moves the playhead to bar 1. One key press reaches one of them, never both - a focused button cannot run its own action on top of the shortcut either. - The two help keys are one action with two keys. F1 and ⌘? (Ctrl+? on Windows and Linux)
open the same context help; the second one exists because macOS uses it for the Help menu of every
application. They never fire from the same key press, so there is nothing to resolve. ? is
written with Shift on most keyboard layouts; the binding is the printed character and
deliberately ignores whether Shift is part of the press, so the help opens on a layout that shifts
?as well as on one that does not.
The editor therefore does not mark either of these pairs, and the manual documents both bindings. Every other pair that ends up on the same keys is a conflict, see the workflow below.
Workflow: change a key
- Open the settings column and scroll to Keyboard shortcuts - or use Keyboard Shortcuts… (see Keyboard shortcuts).
- If you are looking for one action, type a word of its name into
Search - for example
loop. - Press Capture on that row and press the new key, with the modifiers you want to require. Escape cancels the capture.
- Check the printed binding in the row: it reads the way your platform writes it, and it takes effect at once. Watch the rows for the conflict warning (see below).
- If you want the key to belong to another action instead, read the conflict workflow below.
Workflow: resolve a conflict
- A conflict is shown in both affected rows: each carries the warning Another shortcut uses this combination. The first one in the list wins. - in the rest of the window the row higher up in the list is the one that fires, while inside the session grid the two grid shortcuts Launch the focused clip slot and Toggle the loop take their key first, wherever they sit in the list. Nothing is blocked; the map is stored as you made it.
- Decide which of the two actions you want on that key, and change the other row with Capture.
- If you cannot decide, press Reset on one of the two rows: the row falls back to the key of the selected preset, and the warning disappears.
- Switch the losing action off with Disable if you want to free its key without giving it a new one.
Workflow: import a keyboard from another machine
- On the other machine, open the editor and press Export…; give the file a
name -
studio.mshshortcuts.json, for example. - Copy the file to the new machine.
- Open the editor there and press Import…. The map of that machine is replaced as a whole, so export the map there first if you may want to go back.
- Check the rows and their warning marks: a file that was written for the other platform may hold a key your keyboard does not have.