Building a Portable OSC/MIDI Control Surface for Live Performance
Learning objectives
- Learner can author an Open Stage Control JSON surface with faders, buttons and XY pads that emit OSC messages to a tablet or second screen.
- Learner can bridge that surface into Ableton Live by routing its OSC through a Max for Live device that drives parameters via the LOM.
- Learner can create persistent MidiMap CC assignments to device parameters over AbletonOSC, so mappings survive without a Max for Live host.
- Learner can justify surface design choices by weighing OSC's 32-bit float resolution against MIDI's 7-bit range for each control.
Capstone — one whole task that evidences the objectives
Author a portable OSC/MIDI control surface: build an Open Stage Control JSON layout on a tablet/second screen, wire it into a running Ableton Live set through a Max for Live OSC bridge plus persistent AbletonOSC MidiMap CC assignments, then perform a hands-on tweak of the live set from the surface, choosing OSC vs MIDI per control based on the resolution each parameter needs.
Prerequisite modules
The whole task here is the performer’s dream rig: a tablet on a mic stand running a control surface you designed, tweaking an Ableton Live set with no laptop-touching mid-set. Off-the-shelf controllers force their layout on you; a JSON-defined Open Stage Control surface is yours — versioned in the project repo, restored on any machine, laid out exactly for the set you’re playing. That portability matters when your rig is a laptop, an audio interface, and whatever screen the venue lets you prop up.
The arc starts supported: load a ready-made JSON surface (stop, play, one clip knob) and pair its UDP ports with the Max for Live bridge device — the atom on the M4L OSC-to-LOM bridge is your JIT how-to for that port handshake. Once messages flow both ways, you edit the JSON to add faders, buttons, and an XY pad, drilling the widget-authoring loop until adding a control is reflexive. Then you go beyond the M4L host: the MidiMap API atom shows how one /live/midimap/map_cc call registers a CC assignment inside Live itself, so hardware-speed mappings persist even without the bridge device loaded. Finally, the resolution concept — 32-bit OSC floats versus MIDI’s 128 steps — is what you invoke when deciding, control by control, which path each parameter deserves (filter cutoff wants smooth floats; a mute toggle doesn’t care).
Every required atom gates the capstone: no surface without the JSON format, no Live connection without the bridge, no persistent mappings without MidiMap, and no defensible per-control routing choice without the resolution trade-off. The supporting atom on open SDKs and protocol adoption enriches the picture — it explains why this OSC/MIDI ecosystem is so pluggable in the first place — but the capstone stands without it.
Atoms in this module
Required — these gate the capstone
Supporting — enrichment, not gating
Part of curricula
- Audio-Visual Performer — integrated, synced live AV — Lock the clock (tempo-synced, transport-driven set) recommended
- VJ — visual performance with projection, light & video — Lock to the music: sync to a DJ or band optional