Universal Controller MIDI
Blog SysEx 9 min read

SysEx Commands from a Gamepad — A Deep Dive

System Exclusive is the secret API of every MIDI synth. Here is how to fire vendor-specific SysEx from a DualSense button, with real examples for DX7, Volca, and Elektron gear.

By Aidxn Design

Every MIDI synth has a hidden API. The manual calls it SysEx — System Exclusive — and it's how the manufacturer let you load patches, edit parameters that don't fit on a CC, dump entire memory contents, and trigger features the front panel doesn't even expose. Spoiler: most of these features are dramatically more interesting than CC 1. Behold the actual depth of MIDI, and how a gamepad button becomes a one-touch SysEx weapon.

TL;DR
  • What SysEx is: manufacturer-specific MIDI messages, framed by F0 and F7, of arbitrary length.
  • What it can do: patch dumps, parameter changes, mode switches, voice locks, hidden features.
  • Why it matters on a gamepad: single button presses fire complex hardware commands instantly — randomize patch, lock voice, write to memory.
  • Bridge support: opt-in, with templates for DX7, Volca, Elektron, Korg, Roland, OP-1.

What is SysEx

SysEx messages are MIDI's escape hatch. The spec allocates them as messages starting with status byte 0xF0 (System Exclusive begin) and ending with 0xF7 (End of Exclusive). In between is a manufacturer ID followed by arbitrary bytes — the receiver decides what they mean. Channel Voice messages (notes, CCs, pitch bend) are limited to fixed sizes; SysEx can be 4 bytes or 4 megabytes.

Every synth manual has a SysEx implementation chart in the back. Most users ignore it. Most users are wrong to ignore it. The OP-1 has a SysEx command to swap synth engines. The Volca FM2 has SysEx for the entire DX7-compatible patch format. The Elektron MachineDrum has SysEx for per-step parameter locks. None of these are exposed as CCs.

The wire format

A SysEx message has this structure:

F0  <manufacturer ID>  <model bytes>  <command>  <data...>  F7

# Examples
# DX7 parameter change — change algorithm to 1
F0 43 10 01 01 06 00 F7
#  ^  ^  ^  ^  ^  ^  ^
#  |  |  |  |  |  |  end
#  |  |  |  |  |  value (algorithm number, 0-31)
#  |  |  |  |  parameter group (voice)
#  |  |  |  parameter number (algorithm)
#  |  |  sub-status (1 = parameter change)
#  |  device ID + channel
#  Yamaha manufacturer ID
# start of SysEx

# Volca FM2 voice dump request
F0 42 30 00 01 36 10 F7

# OP-1 swap synth engine
F0 7D 01 00 02 7F F7

Why a gamepad is great for SysEx

SysEx on a regular MIDI keyboard means dragging out a laptop, opening a SysEx librarian, and clicking "send". On a gamepad, it's a button press. Map F0 43 10 01 01 06 00 F7 to the triangle button and you have a one-touch "randomize algorithm" on a DX7. Map a sweep of F0 7E 7F 06 01 F7 to L1 and you've got an Identity Request that asks every synth on the bus to introduce itself. Stick analog values into the data bytes and you've got a SysEx-driven parameter sweep that hardware CC mapping never offered.

How the bridge handles it

SysEx is opt-in for safety reasons (a malformed SysEx can occasionally crash older gear). Enable it in Settings → MIDI → Advanced. The mapping editor then exposes a SysEx message type with a hex-string field. You can also reference analog inputs as template variables — the bridge interpolates them at send time.

{`{
  "input": "trigger.r2",
  "type": "sysex",
  "throttleMs": 8,
  "bytes": "F0 43 10 01 01 06 \${value:0-31} F7",
  "valueScaling": {
    "from": [0.0, 1.0],
    "to":   [0, 31],
    "curve": "linear"
  }
}`}

The {'${value:0-31}'} token gets substituted at runtime with the trigger value scaled into 0–31. Pull R2 from 0% to 100% and the DX7 algorithm walks from 1 to 32 in real time.

Get Universal Controller MIDI Pro — $49 →

Real-world SysEx recipes

Volca FM2 — patch random + dump

Map triangle to "randomize patch":

F0 42 30 00 01 36 51 F7   # Volca FM2 random patch

DX7 — algorithm sweep on R2

{`F0 43 10 01 01 06 \${value:0-31} F7`}

Elektron MachineDrum — parameter lock current step

{`F0 00 20 3C 02 00 6B \${step:0-15} \${param:0-127} \${value:0-127} F7`}

OP-1 — engine swap on d-pad

{`F0 7D 01 00 02 \${engine:0-7} F7
# 0=cluster, 1=DNA, 2=digital, 3=dsynth, 4=FM, 5=phase, 6=pulse, 7=string`}

Universal — Identity Request (debug all devices on bus)

F0 7E 7F 06 01 F7

Two gotchas that bite everyone

  • SysEx data bytes are 7-bit. Every byte between F0 and F7 must be 0x00–0x7F. Inserting 0x80 aborts the message. The bridge clamps automatically; if you build SysEx in code, clamp it yourself.
  • Throttle long SysEx. A 256-byte SysEx at full bridge rate floods the receive buffer on older synths. Set throttleMs: 8 minimum on continuous SysEx (analog input → SysEx). 16 ms is safer for vintage hardware.

Building a SysEx library entry

Templates live as JSON in the user library. The schema lets you declare named parameters with type annotations, then bind gamepad inputs to those parameters:

{`{
  "name": "Volca FM2",
  "manufacturerId": "42",
  "modelId": "01 36",
  "parameters": {
    "algorithm":  { "addr": "00 00", "range": [0, 31] },
    "feedback":   { "addr": "00 02", "range": [0, 7]  },
    "lfoSpeed":   { "addr": "00 12", "range": [0, 99] }
  },
  "presetActions": [
    { "name": "Random patch", "bytes": "F0 42 30 00 01 36 51 F7" },
    { "name": "Dump current", "bytes": "F0 42 30 00 01 36 10 F7" }
  ]
}`}

Limitations and roadmap

  • Manufacturer-specific. No two synths speak the same SysEx. Templates exist for the popular ones; obscure gear means reading the manual.
  • Some hardware drops SysEx during note storms. Mid-performance SysEx is risky — schedule it on song boundaries.
  • Length limits. The bridge handles SysEx up to 4 KB. Patch dumps beyond that need to be split or sent via the file API.
  • Roadmap: visual SysEx editor with named parameters in v1.4, two-way SysEx (receive + respond) in v1.5.

SysEx is the part of MIDI that producers never use because it's too painful to wire up. With a gamepad and the bridge, it becomes a single button press. Grab Universal Controller MIDI, enable SysEx, and tell your synth things its front panel can't.

Keep reading

More setup walkthroughs