MIDI 2.0 Property Exchange: JSON Patch Names
MIDI 2.0 revolutionizes musical instrument communication by replacing static, manual patch name lists with dynamic, bi-directional discovery through MIDI Capability Inquiry (MIDI-CI) Property Exchange. By leveraging standard JSON payloads encapsulated within System Exclusive messages, modern hardware synthesizers and software DAWs can directly negotiate and query device states. This article explains how MIDI 2.0 Property Exchange formats, requests, and transfers patch and preset names via JSON, eliminating legacy workarounds like static instrument definition files.
Understanding MIDI 2.0 Property Exchange
Property Exchange is a foundational feature of MIDI-CI, acting as a standardized application-layer protocol between MIDI 2.0 devices. Rather than relying on rigid, proprietary byte-streams, Property Exchange uses modern web-standard paradigms. It operates on a request-and-response model where devices send queries using JSON-formatted headers and payloads wrapped in Universal MIDI Packet (UMP) System Exclusive (SysEx) containers.
The Shift to JSON Payloads
Historically, DAWs required manually maintained XML, text, or
proprietary patch maps (such as .midnam or
.ins files) to display the patch names of external
synthesizers. MIDI 2.0 replaces this workflow by using JSON (JavaScript
Object Notation).
JSON provides a lightweight, human-readable, and machine-parsable format that allows complex data hierarchies—such as sound categories, banks, and preset names—to be modeled natively. Because JSON schemas are standardized by the MIDI Manufacturers Association (MMA) and AMEI, both controllers and sound generators share a common vocabulary for describing patches.
The Patch Retrieval Workflow
The exchange of patch names between an initiator (such as a DAW or hardware controller) and a responder (such as a sound module) follows a structured sequence:
- Inquiry and Discovery: The initiator sends a MIDI-CI Inquiry to discover the device's capabilities. Once Property Exchange support is confirmed, the initiator queries the device's resource list.
- Resource Request: The initiator issues a
getPropertyDatarequest specifying a patch-related resource, typically namedProgramListorResourceList. - Chunking and Transport: If the patch list is large, the responder fragments the JSON payload across multiple Universal MIDI Packets using Property Exchange chunking mechanisms.
- Delivery and Parsing: The responder sends a
getPropertyDataReplycontaining the complete or assembled JSON object, which the initiator parses to populate its user interface.
Structure of JSON Patch Data
The JSON data returned by the sound generator defines how Bank Select (MSB and LSB) and Program Change values map to human-readable names. A typical payload contains structured arrays defining program hierarchy:
{
"resource": "ProgramList",
"bankList": [
{
"bankMSB": 0,
"bankLSB": 0,
"name": "Factory Lead",
"programList": [
{ "program": 0, "name": "Analog Saw Lead" },
{ "program": 1, "name": "Poly Pulse 80s" },
{ "program": 2, "name": "Modular Sync" }
]
},
{
"bankMSB": 0,
"bankLSB": 1,
"name": "Factory Bass",
"programList": [
{ "program": 0, "name": "Deep Sub Bass" },
{ "program": 1, "name": "Acid Resonant Bass" }
]
}
]
}In addition to basic names and program numbers, the schema allows devices to include metadata such as patch author, sound categories, tags, and whether a preset is factory-locked or user-editable.
Real-Time Synchronization
MIDI 2.0 Property Exchange also supports publish/subscribe
notifications. If a musician edits a patch name or saves a new preset
directly on a synthesizer's hardware panel, the synth can send a
Property Exchange set or subscription update
containing the updated JSON fragment to the connected DAW. The DAW
updates its track inspector instantly, ensuring the software environment
remains perfectly synchronized with the hardware state.