This may only be of interest to some of you, but it’s something I wanted to have documented somewhere, so that’s why I made a blog post out of it.

I just got my Modal Electronics CRAFT synth, a surprisingly powerful little synthesizer that comes in a very interesting form factor.

(Update: Today, the app(s) came out and I updated some information in the gist and in this article).

Most of the parameters of the synth are directly accesible by the knobs on the synth itself, but not all of them. Modal Electronics also have an app for iPad and Mac, but that wasn’t out when I first got the synth. Luckily, the manual documents the MIDI implementation (up to a certain point, more on that later) to change all of the available parameters via so called Control Change messages. So, I immediately got to work and built a Max4Live device, similar to the available devices for the Meeblip Anode. Fortunately, as the CRAFT uses USB for MIDI, I can also receive changes from the device and update the controls in the M4L device accordingly.

The CRAFT has 16 preset slots you can also overwrite by some awkward “press this button longer until the LEDs flash and then press the button again to select the patch and then hold the button again until the LEDs flash again” procedure. Of course it would be great to be able to do that from the Max4Live device, too. So, I’ve opened up my trusty MIDI Monitor app and switched around some presets to see if the CRAFT synth would send something interesting. And indeed, it sends two SysEx messages whenever you recall or save a preset. Unfortunately these messages are not documented in the manual. I find that kind of disappointing, of course, but on the other hand, here’s a proper challenge: I only needed to find out how the 31 device controls are mapped within those SysEx messages.

The sysex messages started off with the usual header data identifying the manufacturer and the model, plus what seemed to be a message id (always 0x02 with the first message and 0x03 with the second) and the patch number. All in all that made up for the first seven bytes of the message. Together with the SysEx delimiter (0xF7), this left exactly 32 bytes for patch data in the first message. Close enough.

The second sysex message, always quite a bit shorter than the first, and of variable length, was easy to decipher: It contained useful ASCII characters. Turns out, this is the patch name.

The first message, like I said, had 32 bytes and now my only job was it to identify each of these bytes. I used by editor and simply set each parameter to a unique value. Then I saved the current state as a preset, exported the resulting SysEx from the MIDI Monitor app, loaded it up in my Hex editor and then just went through the list. That was easy. The last byte seems to be reserved, as it was always zero. Maybe they’re planning to introduce some sort of checksum there?

Now that the app is out, I was also able to figure out how to save presets and how to make the LEDs blink with additional messages. Yay!

I’ve documented by findings in a gist, if you’re interested in the details.

Unfortunately, this won’t help me much with the Max4Live editor, as Ableton Live doesn’t really support SysEx handling which is a shame. But I’m pretty sure I’ll find a way to make good use of this information in the future.