# Serato

## Keyboard Shortcuts

See also <https://serato.com/latest/blog/17257/pro-tips-serato-dj-keyboard-shortcuts>

### Deck 1 / LEFT

Basically first row of letters plus half of the numeric keys.

| KEY | Action | + alt
| --- | --- | ---
| `Left` |  |  | Load Track
| `Q` | Reverse | Prev Track
| `W` | Play/Pause | Next Track
| `E / R` | Pitch Adjust | RWD / FF
| `T / Y` | Pitch Bend
| `U` | Censor
| `I` | TEMP-CUE
| `O` | LOOP-IN | Prev Loop
| `P` | LOOP-OUT | Next Loop
| `[` | LOOP-ON/OFF | Reloop
| `1` | CUE 1 | Auto Loop
| `2` | CUE 2 | Auto Loop
| `3` | CUE 3 | Auto Loop
| `4` | CUE 4 | Auto Loop
| `5` | CUE 5

### Deck 2 / RIGHT

Second row of letters plus second half of the numeric keys.

| KEY | Action | + alt
| --- | --- | ---
| `Right` |  |  | Load Track
| `A` | Reverse | Prev Track
| `S` | Play/Pause | Next Track
| `D / F` | Pitch Adjust | RWD / FF
| `G / H` | Pitch Bend
| `J` | Censor
| `K` | TEMP-CUE
| `L` | LOOP-IN | Prev Loop
| `;` | LOOP-OUT | Next Loop
| `'` | LOOP-ON/OFF | Reloop
| `6` | CUE 1 | Auto Loop
| `7` | CUE 2 | Auto Loop
| `8` | CUE 3 | Auto Loop
| `9` | CUE 4 | Auto
| `0` | CUE 5

### Sampler

Third row of letters.

| KEY | Action
| --- | ---
| `Z` | Sample 1
| `X` | Sample 2
| `C` | Sample 3
| `V` | Sample 4
| `B` | Sample 5
| `N` | Sample 6
| `M` | Sample 7
| `,` | Sample 8

Add `alt` modifier to stop a Sample.
Add `alt + cmd` modifiers to load a Sample from Library.

### Others

| KEY | Action
| --- | ---
| `alt + Up/Down` | (While editing BPM) Double/Halve PBM
| `alt + Spacebar` | Beatgrid Edit Mode
| `/` | Swap Tracks
| `cmd + shift + Left/Right` | 	Instant Double TODO: check that
| `cmd + Backspace` | Remove Track from Library
| `cmd + shift + Backspace` | Remove It Also from Disk
| `cmd + Z` | Undo Track Load
| `cmd + P` | Add track(s) to prepare panel
| `cmd + L` | Locate last loaded track (press again for other deck)
| `cmd + R` | Reveal track in Explorer (PC) or Finder (Mac)

## MIDI Mapping

Example mapping play button on both decks

```xml
<midi app=" 1.9.10.5170">
    <control channel="1" event_type="Note On" control="28">
        <userio event="click">
            <play deck_set="Default" deck_id="1" slot_id="0">
                <translation action_on="press" behaviour="toggle"/>
            </play>
        </userio>
        <userio event="output">
            <play deck_set="Default" deck_id="1" slot_id="0">
                <translation action_on="any">
                    <alias name="on" value="127"/>
                    <alias name="off" value="0"/>
                </translation>
            </play>
        </userio>
    </control>
    <control channel="1" event_type="Note On" control="26">
        <userio event="click">
            <play deck_set="Default" deck_id="0" slot_id="0">
                <translation action_on="press" behaviour="toggle"/>
            </play>
        </userio>
        <userio event="output">
            <play deck_set="Default" deck_id="0" slot_id="0">
                <translation action_on="any">
                    <alias name="on" value="127"/>
                    <alias name="off" value="0"/>
                </translation>
            </play>
        </userio>
    </control>
</midi>
```

There is a top tag calles `<midi>`. Inside we define our mappings using the `<control>` tags.

### Control Tag

Tag parameters define the MIDI message, like the channel, note or control change.

- `channel`
  - **Integer**, *starting from 1*

- `event_type`
  - `"Note On"`
  - `"Control Change"`
  - `"Pitch Wheel"`

- `data_type`:
  - `"Relative Binary Offset"`
  - `"Relative 2&apos;s Complement"`
    - I could pseudo control trim gain knob with a quneo's rotary/jog, jog direction was doing + and - operations on the knob, no control on the knob position
  - `"Absolute 7"`
    - I could control trim gain knob with a quneo's vertical slider, including absolute position by pressing somewhere. No LED feedback.

- `reversed`
  - set it to `"true"` if needed, omit otherwise

One message has an incoming action and/or outgoing reaction or feedback. This is defined by the inner tag `<userio>`, which has a parameter called `event` that takes 2 values: `click` for the action and `output` for the reaction or feedback.

### Control.Userio Tag

### Control.Userio.**SDJCMD** Tag

**SDJCMD** = **S**erato **DJ** **C**o**M**man**D**, defines what Serato app will to when the control message passes

### Control.Userio.**SDJCMD**.Translation Tag

### Control.Userio.**SDJCMD**.Translation.Alias Tag