neige d'aout

knowledge, art, and other stuff

User Tools

Site Tools


code61_re

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:

amidi -l
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:

Startf0
Manufacturer ID7e (non real-time) or 00 01 05 (M-Audio)
Device ID7f (all devices)
…
Endf7

⇒ sent to keyboard

⇐ reply from keyboard

On Linux, try amidi -p hw:x,0,3 -S '<message>' -d

The LCD says SYS for a second for most of these commands.

Mode

⇒ f0 00 01 05 7f 31 06 6d 00 01 01 f7

Other messages seem to not work until this one is issued. Last byte set to 00 seems to lock it and 01 (or anything else up to 7f) unlocks it.

Device enquiry

⇒ f0 7e 7f 06 01 f7

⇐ f0 7e 7f 06 02 00 01 05 31 06 31 30 34 34 f7

Manufacturer ID (00 01 05) and model ID (31 06)

Receive preset

⇒ f0 00 01 05 7f 31 06 62 nn f7

⇐ f0 00 01 05 7f 31 06 63 0a 3b nn [xx xx xx xx xx xx] … f7

nn is a preset number between 01 and 0c, or 00 for RAM
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

Get settings

⇒ f0 00 01 05 7f 31 06 6b 00 02 nn nn f7

⇐ f0 00 01 05 7f 31 06 6c 00 04 nn nn xx xx f7

nn: setting address (00 00, 00 04-00 10)
xx: value

Set settings

⇒ f0 00 01 05 7f 31 06 6a 00 04 nn nn xx xx f7

See also

code61_re.txt · Last modified: by Yuki