Undocumented Sysex

After performing some MIDI probing I discovered undocumented SYSEX commands that allow you to control the MD GUI via MIDI.

MIDI Byte          | Purpose
(MD SYSEX init)    |
        0x40       |
          n        | See below
          a        | See below
        0xF7       |

n      | a         | Purpose

0x00   |           |
0x01   | any       | Toggle KIT menu
0x02   | any       | Toggle LFO menu
0x03   | a > 0x64  | Hold up arrow
       | a <= 0x64 | Release up arrow
0x04   | a > 0x64  | Hold down arrow
       | a <= 0x64 | Release down arrow
0x05   |           |
0x06   |           |
0x07   | a > 0x64  | Toggle record/edit
0x08   |           |
0x09   | any       | Play/Pause
0x0A   | a > 0x64  | Stop
0x0B   | any       | Toggle classic/extended
0x0C   | any       | Toggle bank group
0x0D   | a > 0x64  | Toggle accent window
0x0E   | a > 0x64  | Toggle swing window
0x0F   | a > 0x64  | Toggle slide window
0x10   | a > 0x64  | Set step trig 1
..
0x1F   | a > 0x64  | Set step trig 16

0x20   | a > 0x64  | Bank select 0 hold
       | a <= 0x64 | Bank select 0 release
..
0x23   | a > 0x64  | Bank select 3 hold
       | a <= 0x64 | Bank select 3 release
0x24   | any       | Toggle tempo window
0x25   | a > 0x64  | Hold function
       | a <= 0x64 | Relase function
0x26   | a > 0x64  | Hold left arrow
       | a <= 0x64 | Release left arrow
0x27   | a > 0x64  | Hold right arrow
       | a <= 0x64 | Release right arrow
0x28   | any       | Press yes
0x29   | any       | Press no
0x2A   | a > 0x64  | Hold scale button
       | a <= 0x64 | Release scale button
0x2B   | any       | Toggle scale window
0x2C   | a > 0x64  | Toggle mute window
0x2D   | any       | Toggle pattern/song mode
0x2E   | a > 0x64  | Toggle song window
0x2F   | a > 0x64  | Toggle global window
0x30   |           |
0x31   |           |
0x32   |           |
0x33   |           |
0x34   | any       | Copy
0x35   | any       | Clear
0x36   | any       | Paste
0x37
0x38
0x39
0x3A   | any       | Toggle synth page
0x3B   |
0x3C
0x3D
0x3E
0x3F
0x40   | a > 0x64  | Track select 1
..
0x4F   | a > 0x64  | Track select 16
0x50   | any       | Encoder 1 button press
..
0x57   | any       | Enocder 8 button press
0x5A   | any       | tap tempo

https://raw.githubusercontent.com/jmamma/MIDICtrl20_MegaCommand/dev/avr/cores/megacommand/MD/md_undocumented_sysex

19 Likes

nice! did you create those docs or did you pull them from some source. ie. did you label things like “Hold up arrow” or was that text extracted from some exiting datasource? If extracted, I’d be curious to do the same on the other Elektron devices.

I just bombarded the MIDI port with specific SYSEX messages to see if I could elicit a response.

Then I slowly worked through each command to see what they were doing.
Once i figured out the basic pattern it wasn’t too hard to create the above documentation.

Other devs have used similar methods to work out SYSEX for the RYTM and A4.

5 Likes

Do you know if it’s possible to change global slots with sysex? I’m not sure reading manual Appendix.

SYSEX set status:MIDI Byte | Purpose------------±---------------------------
(SYSEX init)| $71 | Set status ID %00aaaaaa | Set parameter %aaaaaa to … %0bbbbbbb | … value %bbbbbbb $f7 | SYSEX end0x01 **Current global slot (0 to 7)**0x02 Current kit number (0 to 63)0x04 Current pattern number (A1=0, A2=1, … B1=16, …)0x08 Current song number (0 to 31)0x10 Current sequencer mode (pattern mode=0, song mode=1)0x20 Current lock mode (classic=0, extended=1)0x22 Current track (0 to 15)

Yes it is. It’s done through the SYSEX “set status” command documented in the Appendix.

(Just saw that you pasted the relevant section.)

2 Likes

Any idea if this works with the DT? Or if the DT has the same functionality even if it requires different messages? Can you send the hold function command, the press no command, and the release function command to perform a reload from saved (assuming the MD works the way the DT does…)

This is a subject for a different topic. There is no published SysEx implementation for the Digitakt, although certain developers have been investigating this for both the DT and the DN.

1 Like

No one has tried this on the new machines? I might this week, but don’t want to brick mine :[

Edit: I tried Play / Pause with the DN and it doesn’t work

1 Like

This is rad, thanks for sharing!

If you happen to find out a way to dump the screen, I’m sure this must exist :smiley: this would be amazing for making a full editor.

Wow, thanks so much for figuring this out and posting!

I’m trying to send my MD a SYSEX message that will perform kit reload, ie [FUNCTION]+[CLASSIC/EXTENDED]
The “hold function” & “release function” commands (0x25 a> 0x64 & 0x25 a<=0x64) don’t seem to be working for me, though :weary:
The other commands I’ve tested and they all work! Any thoughts on why this may be?

What is the whole sysex string you are sending that isn’t working?
Can you post it here? Is the MD reacting to it at all in any way?

SYSES string is as follows

F0 00 20 3C 02 00 40 25 65 F7 for “hold function”

and

F0 00 20 3C 02 00 40 25 63 F7 for “release function”

The commands don’t seem to do anything.

I’ve tried many other of these undocumented SYSEX commands, both toggles and hold/release combo’s, and I’ve got those working fine. It’s only the “hold/release function” command that’s unresponsive.

If I’m not mistaken, you need another 1 or 2 sysex between those.
That appears to only press and release the function button by itself, which doesn’t do anything w/o another key press.

Have you tried putting the string for toggle classic/extended between those 2. If I’m having to fathom a guess being away from my device and unable to test, you probably have to send all 3 sommands in a string.

  • holdfunction
  • toggle classic/extended
  • release function

I can try in a bit on my end as I’m actually in the middle of filling up a new controller with MD sysex strings…

sysexy

1 Like