In the MIDI file in an RMI file’s data
chunk, a system exclusive message
whose manufacturer ID is 7E or 7F is universal: it belongs to no
maker, and its meaning is registered with the MIDI Association. The first byte says
whether it is for use at any time (7E, non-real time) or the moment it
arrives (7F, real time). The next three bytes say what it is:
| Byte | Meaning |
|---|---|
| 1 | 7E non-real time, 7F real time |
| 2 | Device ID, the channel of the receiver: 7F addresses every device |
| 3 | Sub-ID #1 |
| 4 | Sub-ID #2, for the sub-IDs that have one |
The tables list every value the MIDI Association lists. Sub-IDs not listed are reserved, and the explorer shows them as “not defined”. Some of the documents behind these messages are for members of the MIDI Association and were not read for this site; where that is so, the page says so and the explorer names the message but leaves its body as bytes.
Non-real time (7E)
| Sub-ID #1 | Sub-ID #2 | Message |
|---|---|---|
01 | Sample dump header | |
02 | Sample data packet | |
03 | Sample dump request | |
04 | 00–0E | MIDI Time Code cueing |
05 | 01–07 | Sample dump extensions |
06 | 01, 02 | Identity request, identity reply |
07 | 01–03 | File dump |
08 | 00–09 | MIDI Tuning Standard |
09 | 01–03 | General MIDI system on and off |
0A | 01–04 | Downloadable Sounds |
0B | 01–04 | File reference |
0C | MIDI Visual Control | |
0D | MIDI Capability Inquiry | |
7B–7F | End of file, Wait, Cancel, NAK, ACK |
Sample dump (01, 02, 03)
A dump of audio data, a sample at a time. Numbers across several bytes hold seven bits a byte, the least significant byte first.
| Message | Bytes after the sub-ID | Fields |
|---|---|---|
01 header | sl sh ee pp pp pp ll ll ll ss ss ss ee ee ee tt | Sample number (14 bits); sample format, bits a sample; period in nanoseconds (21 bits); length in words; loop start; loop end; loop type: 0 forward, 1 alternating, 7F off |
02 data packet | kk dd … ll | Packet number, modulo 128; 120 data bytes; a checksum, the XOR of every byte from 7E to the last data byte, held to seven bits |
03 request | sl sh | Sample number |
MIDI Time Code cueing (04)
Bytes after the sub-IDs: hr mn sc fr ff sl sh and additional
information. The hours byte holds the frame rate in bits 5 and 6, as in MIDI Time
Code itself. sl sh is an event number. Additional information is a run
of bytes split into two nibbles each, the low nibble first.
| Sub-ID #2 | Message |
|---|---|
00 | Special. Its event number chooses: 0 time code offset, 1 enable event list, 2 disable event list, 3 clear event list, 4 system stop, 5 event list request |
01, 02 | Punch in point, punch out point |
03, 04 | Delete punch in point, delete punch out point |
05, 06 | Event start point, event stop point |
07, 08 | Event start point and event stop point with additional information |
09, 0A | Delete event start point, delete event stop point |
0B, 0C | Cue point, cue point with additional information |
0D | Delete cue point |
0E | Event name in additional information |
Sample dump extensions (05)
| Sub-ID #2 | Message | Fields |
|---|---|---|
01 | Loop points transmission | sl sh lp lp tt ss ss ss ee ee ee: sample number, loop number (7F 7F deletes all), loop type, loop start, loop end |
02 | Loop points request | sl sh lp lp |
03 | Sample name transmission | sl sh tl tag… nl name…: sample number, language tag length and tag, name length and name |
04 | Sample name request | sl sh |
05 | Extended dump header | Defined in CA-019, for members; shown as bytes |
06 | Extended loop points transmission | CA-019; shown as bytes |
07 | Extended loop points request | CA-019; shown as bytes |
Identity request and reply (06)
06 01 asks a device to identify itself and has no body. The reply is:
7E <device> 06 02 <manufacturer> <family> <member> <software revision>
The manufacturer is one byte or 00 and two more; the
list of IDs gives their
names. Family and member are 14-bit numbers, LSB first, and the software revision is
four bytes; what they mean is up to the maker.
File dump (07)
| Sub-ID #2 | Message | Fields |
|---|---|---|
01 | Header | Sender device ID; file type, four ASCII characters; file length, 4 bytes of 7 bits; file name |
02 | Data packet | Packet number; byte count, the number of data bytes minus one; the data in 7-bit encoding; checksum |
03 | Request | Sender device ID; file type; file name |
MIDI Tuning Standard (08)
A tuning program gives each MIDI key a pitch as a semitone number
xx and a 14-bit fraction yy zz of a semitone, in steps of
100/16384 of a cent; 7F 7F 7F means no change.
| Sub-ID #2 | Message | Fields |
|---|---|---|
00 | Bulk dump request | tt, a tuning program |
01 | Bulk dump reply | tt, a 16-character name, 128 × xx yy zz, checksum |
03 | Tuning dump request | Bank, tuning program |
04 | Key-based tuning dump | Bank, tuning program, name, 128 × xx yy zz, checksum |
05 | Scale/octave tuning dump, 1-byte format | Bank, program, name, 12 bytes of cents offset from 40 hex, checksum |
06 | Scale/octave tuning dump, 2-byte format | Bank, program, name, 12 × 2 bytes, checksum |
07 | Single note tuning change with bank select | Bank, program, count, then kk xx yy zz for each key |
08 | Scale/octave tuning, 1-byte format | Channel mask (ff gg hh), 12 bytes, cents offset from 40 hex |
09 | Scale/octave tuning, 2-byte format | Channel mask, 12 × 2 bytes, a 14-bit offset from 40 00, in steps of 100/8192 of a cent |
General MIDI (09)
01 General MIDI 1 system on; 02 General MIDI system off;
03 General MIDI 2 system on. Files often send one at the start. No
body.
Downloadable Sounds (0A)
01 turn DLS on, 02 turn DLS off, 03 turn DLS
voice allocation off, 04 turn DLS voice allocation on. No body.
File reference (0B)
01 open file, 02 select or reselect contents, 03
open file and select contents, 04 close file. Each carries a two-byte
context number, a two-byte byte count and then its data: a four-character file type
and a URL or a selection. The exact layout of the selection is in a document for
members, so the explorer shows the fields after the context and count as text.
MIDI Visual Control (0C)
Sub-IDs 00 to 7F are the commands of MIDI Visual Control.
Their definitions are in the MVC documentation, which is not publicly available;
the explorer names the message and shows the command as bytes.
MIDI Capability Inquiry (0D)
MIDI-CI messages share a header after the sub-IDs: one byte, the MIDI-CI version,
then two 28-bit MUIDs, source and destination, each four bytes of seven bits, LSB
first. 0FFFFFFF as the destination is a broadcast. The sub-ID #2 names
the message; the explorer shows the rest as bytes, as the bodies are defined in
the MIDI-CI specification, which needs a registration with the MIDI Association.
| Sub-ID #2 | Message |
|---|---|
10–15 | Protocol negotiation: initiate, reply, set new protocol, test new protocol (either way), confirm |
20–29 | Profile inquiry and reply; set profile on, off; profile enabled, disabled, added, removed reports; profile details inquiry and reply |
2F | Profile-specific data |
30, 31 | Property exchange capabilities and reply |
34–39, 3F | Get, set and subscribe to property data and their replies; notify |
40–44 | Process inquiry capabilities and reply; MIDI message report and reply; end of report |
70–73 | Discovery and reply; endpoint message and reply |
7D, 7E, 7F | ACK, invalidate MUID, NAK |
Handshaking (7B to 7F)
The replies a device gives during a dump: 7B end of file, 7C
wait, 7D cancel, 7E NAK, 7F ACK. Each has one
byte after the sub-ID, the packet number it refers to.
Other sub-IDs
Any other sub-ID #1 is reserved. The explorer names it “not defined” and shows its bytes.
Real time (7F)
| Sub-ID #1 | Sub-ID #2 | Message |
|---|---|---|
01 | 01, 02 | MIDI Time Code: full message, user bits |
02 | MIDI Show Control | |
03 | 01, 02, 42 | Notation information |
04 | 01–05 | Device control |
05 | 00–0E | Real-time MTC cueing |
06 | MIDI Machine Control commands | |
07 | MIDI Machine Control responses | |
08 | 02, 07–09 | MIDI Tuning Standard |
09 | 01–03 | Controller destination setting |
0A | 01 | Key-based instrument control |
0B | 01 | Scalable Polyphony MIDI MIP message |
0C | 00 | Mobile phone control message |
MIDI Time Code (01)
01 full message: hr mn sc fr, the hours byte carrying
the frame rate in bits 5 and 6 (0 = 24, 1 = 25, 2 = 29.97 drop-frame, 3 = 30).
02 user bits: nine bytes for the eight user-bit nibbles and the two
binary group flags.
MIDI Show Control (02)
Sub-ID #2 is the command format, the kind of equipment; the byte after it is the command; then its data as text, separated by zero bytes.
| Command format | Meaning |
|---|---|
00 | Extensions |
01–06 | Lighting (general), moving lights, colour changers, strobes, lasers, chasers |
10–18 | Sound (general), music, CD players, EPROM playback, audio tape machines, intercoms, amplifiers, audio effects devices, equalisers |
20–2A | Machinery (general), rigging, flys, lifts, turntables, trusses, robots, animation, floats, breakaways, barges |
30–38 | Video (general), tape machines, cassette machines, disc players, switchers, effects, character generators, still stores, monitors |
40–45 | Projection (general), film projectors, slide projectors, video projectors, dissolvers, shutter controls |
50–58 | Process control (general), hydraulic oil, H2O, CO2, compressed air, natural gas, fog, smoke, cracked haze |
60–64 | Pyro (general), fireworks, explosions, flame, smoke pots |
7F | All types |
Commands: 01 GO, 02 STOP, 03 RESUME,
04 TIMED_GO, 05 LOAD, 06 SET, 07
FIRE, 08 ALL_OFF, 09 RESTORE, 0A RESET,
0B GO_OFF, 10 GO/JAM_CLOCK, 11 STANDBY_+,
12 STANDBY_-, 13 SEQUENCE_+, 14 SEQUENCE_-,
15 START_CLOCK, 16 STOP_CLOCK, 17 ZERO_CLOCK,
18 SET_CLOCK, 19 MTC_CHASE_ON, 1A MTC_CHASE_OFF,
1B OPEN_CUE_LIST, 1C CLOSE_CUE_LIST, 1D
OPEN_CUE_PATH, 1E CLOSE_CUE_PATH.
Notation information (03)
01 bar number: a signed 14-bit number, LSB first. 02 time
signature, immediate, and 42, delayed: a byte count, then for each
signature nn dd qq: numerator, denominator as a power of two, and
thirty-second notes to a quarter note.
Device control (04)
| Sub-ID #2 | Message | Fields |
|---|---|---|
01 | Master volume | 14 bits, LSB first, 0 to 16,383 |
02 | Master balance | 14 bits; 8,192 is the centre |
03 | Master fine tuning | 14 bits; 8,192 is A440, with 100/8192 of a cent a step |
04 | Master coarse tuning | A fine-tuning byte, then the semitones as an offset from 64 |
05 | Global parameter control | Slot path length, parameter width, value width; slot paths (two bytes each; 01 01 reverb, 01 02 chorus in General MIDI 2); then parameter and value pairs |
Real-time MTC cueing (05)
As non-real-time cueing, for sub-IDs 00–02,
05–08, 0B, 0C and 0E,
but only an event number and additional information follow, with no time; the event
happens now. 03, 04, 09, 0A and
0D are reserved.
MIDI Machine Control (06, 07)
06 carries commands, one after another. Commands 01 to
0F and 7F are a single byte; commands 40 to
77 are the command, a byte count and that many bytes. 07
carries responses; its information fields are defined in the MMC section of the MIDI
1.0 specification and the explorer shows them as bytes.
| Command | Meaning | Command | Meaning |
|---|---|---|---|
01 | Stop | 40 | Write |
02 | Play | 41 | Masked write |
03 | Deferred play | 42 | Read |
04 | Fast forward | 43 | Update |
05 | Rewind | 44 | Locate |
06 | Record strobe | 45 | Variable play |
07 | Record exit | 46 | Search |
08 | Record pause | 47 | Shuttle |
09 | Pause | 48 | Step |
0A | Eject | 49 | Assign system master |
0B | Chase | 4A | Generator command |
0C | Command error reset | 4B | MIDI Time Code command |
0D | MMC reset | 4C | Move |
4D | Add | ||
4E | Subtract | ||
4F | Drop frame adjust | ||
50 | Procedure | ||
51 | Event | ||
52 | Group | ||
53 | Command segment | ||
54 | Deferred variable play | ||
55 | Record strobe variable | ||
7C | Wait | 7F | Resume |
MIDI Tuning Standard, real time (08)
02 single note tuning change: tt nn then kk xx yy
zz for each key. 07 the same with a bank before the program.
08 and 09 scale/octave tuning, as in the
non-real-time messages of the same numbers.
Controller destination setting (09)
Used with General MIDI 2. 01 channel pressure and 02 poly
pressure: a channel, then pairs of destination and range. 03 a control
change: a channel, a controller number, then pairs. Destinations are 00
pitch, 01 filter cutoff, 02 amplitude, 03 LFO
pitch depth, 04 LFO filter depth, 05 LFO amplitude depth; the
range is an offset from 40.
Key-based instrument control (0A)
01: a channel and a key, then pairs of controller number and value,
for that key only: 07 volume, 0A pan, 5B
reverb send and 5D chorus send are the ones General MIDI 2 names.
Scalable Polyphony MIDI (0B)
01: pairs of channel and maximum instantaneous polyphony, the number
of voices the channels up to and including that one need, used to drop parts on
devices with few voices.
Mobile phone control message (0C)
00. The body is defined in a document for members of the MIDI
Association and is not publicly available; the explorer names the message and shows
the body as bytes.
Other sub-IDs
Any other sub-ID #1 is reserved. The explorer names it “not defined” and shows its bytes.
In the explorer
A universal message that is complete in one event is shown field by field, with each code named. A message split into F7 packets is decoded as a whole at the packet that ends it, and the System exclusive messages table shows every message with its packets joined.
Sources
- Universal System Exclusive Messages – the MIDI Association’s table of sub-IDs