Make Roto-Control do anything
Both APIs are published in full, and the source for Melbourne Instruments' own Ableton Live, Bitwig and Logic Pro integrations is on GitHub to read and learn from.
The specs and the three integrations are on GitHub: an Ableton Live remote script, a Bitwig extension and a Logic Pro control surface. Everything else Melbourne Instruments has published is at github.com/Melbourne-Instruments.
The three layers, briefly
The serial API is the configuration layer, and the only one of the three that is not MIDI at all. Over USB serial it writes whole setups and reads them back, which is how you generate mappings programmatically.
SysEx is MIDI: the part of it set aside for messages specific to one manufacturer. It is live and two-way. Put your own text on the eight screens, push meter levels, and receive knob touches and page changes back.
Ordinary MIDI needs nothing special. Every knob sends 14-bit CC on channel 16, with its own touch message, so anything that speaks MIDI can use it without knowing what a Roto-Control is.
Beyond the DAW
The motorized knobs make this an output device as much as an input one. Software can move somebody's hands to a state rather than telling them about it. Recall a snapshot and watch the panel travel to it.
None of that is specific to music software. A lighting desk recalling a state, a color grade, a rig with no computer in it at all: because the plain MIDI layer needs no protocol, none of those need the API either.
The Ableton Live and Bitwig integrations are worth reading first, whatever you are building.
Starting from scratch
Paste the block below into Claude, Cursor or Copilot, fill in the last line, and start there. It points the assistant at both specs and at our own integrations, so it reads them before it writes anything.
I want to write software that talks to a Melbourne Instruments Roto-Control, a motorized MIDI controller with 8 touch-sensitive knobs, 8 buttons and a screen above each knob, arranged in 4 switchable pages. There are three ways to talk to it, and I want you to read the specs before writing code: 1. Serial API (USB serial, 115200 8N1) - the configuration layer. Reads and writes all 64 MIDI setups of 32 knobs and 32 buttons: message type, channel, CC or NRPN number, min and max, a 12-character name, a color from a fixed 83-entry palette, and the haptics (smooth 300-degree sweep, a center indent, arbitrary indents, or 2-16 detents with a label per detent). 2. SysEx API (USB MIDI, messages begin F0 00 22 03 02) - the live layer, bidirectional. Push track names, RGB track colors, plugin parameter names, VU meter levels, and arbitrary text to any of the 8 screens. The device pushes back knob selection, page changes, mode changes and learn events. 3. Plain MIDI, no protocol needed - every knob sends 14-bit CC on channel 16, every button sends 7-bit, and knob TOUCH is its own CC per knob. So it works as a high-resolution touch-sensing surface for anything at all. Both specs, and the source of Melbourne Instruments' own integrations (an Ableton Live remote script, a Bitwig extension and a Logic Pro control surface), are at: https://github.com/Melbourne-Instruments/roto_control The unusual capability: the knobs are motorized, so they are an OUTPUT device as well as an input. Software can move the user's hands to a state rather than telling them about it. What I want to build: [DESCRIBE IT HERE] Read the relevant spec first and tell me which of the three layers this needs before you write anything.