====== 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]]