====== M-Audio Code 61 Reverse Engineering Project ======
===== Preface =====
It's a MIDI keyboard controller with a ton of programmable knobs, it comes with some editor software to edit these knobs with up to 12 presets on it, downloadable on M-Audio's website, only available on Windows and MacOS. Here we try to reverse engineer that preset editor software...
===== MIDI ports =====
There's 4 ports available:
Dir Device Name
IO hw:x,0,0 Code 61 USB MIDI
IO hw:x,0,1 Code 61 MIDI DIN
IO hw:x,0,2 Code 61 Mackie/HUI
IO hw:x,0,3 Code 61 Editor
The last one in particular is used by the preset editor.
===== SysEx messages =====
SysEx messages generally have the following format:
|Start|''f0''|
|Manufacturer ID|''7e'' (non real-time) or ''00 01 05'' (M-Audio)|
|Device ID|''7f'' (all devices)|
|...||
|End|''f7''|
=> sent to keyboard
<= reply from keyboard
On Linux, try ''amidi -p hw:x,0,3 -S '' -d''
==== ??? ====
=> ''f0 00 01 05 7f 31 06 6d 00 01 01 f7''
The LCD says ''SYS'' for a second
==== Device enquiry ====
=> ''f0 7e 7f 06 01 f7''
<= ''f0 7e 7f 06 02 00 01 05 31 06 31 30 34 34 f7''
==== Receive preset ====
=> ''f0 00 01 05 7f 31 06 62 nn f7''
where ''nn'' is a preset number between ''01'' and ''0c'', or ''00'' for RAM
<= ''f0 00 01 05 7f 31 06 63 0a 3b nn [xx xx xx xx xx xx] ... f7''
''xx'' is a 6-byte ASCII preset name
==== Send preset ====
=> ''f0 00 01 05 7f 31 06 61 0a 3b nn [xx xx xx xx xx xx] ... f7''
===== See also =====
* [[https://github.com/ahlstromcj/midicvt/blob/master/contrib/sysex-format.txt]]