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
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.
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)
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.
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
The other commands Iâve tested and they all work! Any thoughts on why this may be?
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âŠ
As far as I can tell, that isnât the correct way to interpret these SysEx commands in most cases. There is a specific SysEx command for (for example) âtoggle ACCENT windowâ rather than having to send âhold FUNCTIONâ, âhold bank B/Fâ, ârelease bank B/Fâ, ârelease FUNCTIONâ commands.
However, âhold FUNCTIONâ, âhold down arrowâ, ârelease down arrowâ, ârelease FUNCTIONâ does work to, for example, quickly scroll through the list of kits in Load Kit screen.
@JustinValer did not include a command for reloading the saved kit in the original list; such a SysEx command may exist in the Elektron OS, but it isnât listed above.
The unofficial OS has added an additional SysEx command to load the âUndo kitâ if you have already loaded another kit and want to revert.