Expression & MIDI 2.0

MIDI-CI: Capability Inquiry

Spec: MIDI-CI (M2-101-UM) MIDI 2.0 overview

MIDI-CI lets two devices find each other, see what the other supports, and agree on how to work together, all without user setup. It is made of Universal System Exclusive messages, so it works over MIDI 1.0 byte streams as well as over UMP.

MIDI-CI covers four areas:

  • Management: discovery, MUIDs, ACK/NAK.
  • Profile Configuration: switch on standard behaviors such as "Drawbar Organ", "MPE" or "Orchestral Articulation".
  • Property Exchange: get and set structured data (patch lists, device info, parameter state) as JSON.
  • Process Inquiry: ask a device for its current MIDI state, such as controller values (added in v1.2).

Scope of this page

This is a structural summary of MIDI-CI 1.2 meant for orientation. Field-level layouts, timeouts and the full Property Exchange resource definitions are in the official specifications (M2-101-UM and the M2-103/M2-105 Property Exchange documents), which are free to download after registering at midi.org.

Message layout

Every MIDI-CI message starts with the same header:

Byte(s)ValueMeaning
1F0Start of SysEx
27EUniversal SysEx, non-real time
3ddDevice ID / destination: 00–0F = a MIDI channel, 7E = the whole group, 7F = the whole Function Block (earlier versions: the whole port)
40DSub-ID#1: MIDI-CI
5ssSub-ID#2: the message (tables below)
6vvMIDI-CI message version/format (01 = v1.1, 02 = v1.2)
7–10MUIDSource MUID, 28 bits as four 7-bit bytes, LSB first
11–14MUIDDestination MUID (7F 7F 7F 7F = broadcast)
15……Message-specific data
lastF7End of SysEx

MUIDs

A MUID (MIDI Unique Identifier) is a random 28-bit number that a device makes for itself when it starts MIDI-CI. It identifies the device for the rest of the session. 0x0FFFFFFF is reserved for broadcast and 0x0FFFFF00–0x0FFFFFFE are reserved. If a device sees another device using its MUID, it picks a new one and sends Invalidate MUID.

Management and discovery

Sub-ID#2MessageNotes
0x70DiscoveryInquiry broadcast to find MIDI-CI devices; carries identity and capabilities
0x71Reply to DiscoveryResponder identity, capabilities and its MUID
0x72Inquiry: Endpoint InformationAsk for endpoint data such as a product instance ID (v1.2)
0x73Reply to Endpoint Information(v1.2)
0x7DACKGeneric acknowledgement with status code and optional text (v1.2)
0x7EInvalidate MUIDTell others to forget a MUID (e.g. on reset or collision)
0x7FNAKNegative acknowledgement; v1.2 adds status codes and an optional message

Discovery is the first step. An Initiator broadcasts a Discovery Inquiry, and each Responder answers with its own MUID, its identity (SysEx manufacturer ID, family, model and software revision, the same fields as a Device Inquiry reply), a capability category bitmap saying which MIDI-CI areas it supports, and the largest SysEx message it can receive. After that, the two devices address each other directly by MUID.

Protocol Negotiation is deprecated

MIDI-CI 1.1 had messages for switching between the MIDI 1.0 and MIDI 2.0 Protocols. MIDI-CI 1.2 deprecated them. Protocol selection now uses UMP Stream Configuration messages.

Profile Configuration

A Profile is a published agreement about how a device of some kind responds to MIDI: which controllers do what, how notes map, and similar rules. Turning a profile on is a promise to behave that way. Profiles are named by a 5-byte Profile ID. Standard profiles begin with 7E; manufacturer-specific ones begin with the manufacturer's SysEx ID. A profile can apply to a single channel, several channels, a whole group, or a whole Function Block.

Sub-ID#2Message
0x20Profile Inquiry
0x21Reply to Profile Inquiry
0x22Set Profile On
0x23Set Profile Off
0x24Profile Enabled Report
0x25Profile Disabled Report
0x26Profile Added Report
0x27Profile Removed Report
0x28Profile Details Inquiry
0x29Reply to Profile Details Inquiry
0x2FProfile Specific Data

Adopted and in-progress profiles include the MPE Profile, Drawbar Organ, Rotary Speaker, Orchestral Articulation, Default Control Change Mapping, and others. See midi.org for the current list.

Property Exchange

Property Exchange (PE) moves structured data between devices: what patches exist, what the device is called, what its parameters are. Each request has a JSON header naming a resource, and an optional body that is usually JSON too. Large payloads are split into numbered chunks to fit the receiver's maximum SysEx size.

Sub-ID#2Message
0x30Inquiry: Property Exchange Capabilities
0x31Reply to Property Exchange Capabilities
0x34Inquiry: Get Property Data
0x35Reply to Get Property Data
0x36Inquiry: Set Property Data
0x37Reply to Set Property Data
0x38Subscription
0x39Reply to Subscription
0x3FNotify

A Get for the device info resource looks roughly like this (shown with the JSON header as text):

F0 7E 7F 0D 34 02  <src MUID>  <dst MUID>
   01                       request ID
   19 00                    header length (25, 14-bit LSB first)
   {"resource":"DeviceInfo"}
   01 00                    number of chunks = 1
   01 00                    this chunk = 1
   00 00                    property data length = 0
F7

Commonly used resources:

ResourceContains
ResourceListWhich resources this device supports. Usually the first thing requested.
DeviceInfoManufacturer, family, model and version strings, serial number
ChannelListWhich channels are in use and what each one is for
ProgramListPatch names with their bank and program numbers
StateOpaque snapshot of a device's state, for save and recall
Controller listsNames, ranges and defaults of controllers, so a host can label them automatically

With Subscription, an Initiator can ask to hear about changes to a resource, and the Responder sends updates as they happen. A DAW can use this to keep a patch name on screen in sync with the hardware.

Process Inquiry

Added in MIDI-CI 1.2, Process Inquiry asks a device to report its current MIDI state, such as the present value of each controller or pitch bend on chosen channels. The device answers with ordinary MIDI messages, framed between a reply and an end marker.

Sub-ID#2Message
0x40Inquiry: Process Inquiry Capabilities
0x41Reply to Process Inquiry Capabilities
0x42Inquiry: MIDI Message Report
0x43Reply to MIDI Message Report
0x44End of MIDI Message Report

In practice

  • MIDI-CI needs a bidirectional connection: a cable or port pair in each direction, USB, or a UMP Endpoint.
  • Over UMP, MIDI-CI messages are carried as SysEx7 (MT 0x3) in the group that the Function Block uses.
  • Devices must ignore MIDI-CI messages they don't understand. A Responder that doesn't support something answers with NAK.
  • The MIDI 2.0 Workbench is the reference tool for testing MIDI-CI. The libraries listed under MIDI 2.0 include CI implementations.