Chapter Three: MIDI

7. MIDI Data Format: System Messages

System messages fall into one of three categories: System Common, System Real Time and System Exclusive (SysEx). They do not include channel numbers and are intended to address all devices in a system.

System Common Messages

There are only a few system common messages. Those deal primarily with instruments' on-board sequencers or drum machines, which may have pre-recorded MIDI sequences. System common messages have status bytes from 11110001 (241) to 11110111 (247) and up to two data bytes, though Tune Request and EOX have none.

A song position pointer is a register that holds the number of MIDI beats (a MIDI beat is a sixteenth note) since the start of a song (sequence). Because of the potentially large number of beats, the song position pointer uses two data bytes for a 14-bit value, least significant byte first as in Pitch Bend: up to 16,384 sixteenth notes, or 1,024 bars of 4/4. Other system common messages select which song to play (Song Select) or send a 'tune request' asking analog synthesizers to tune their oscillators (those were the days...).

System Real Time Messages

System real time messages include the timing clock, a single byte sent 24 times per quarter note. Because its rate follows the tempo, it measures 'relative' time rather than clock time; six clocks make one MIDI beat, the sixteenth note counted by the song position pointer. An instrument can also lock the rates of its LFOs, arpeggiator, delays and other patch parameters to the timing clock, whether from its own sequencer or arriving over MIDI from a DAW (for example, on the Kurzweil K2xxx series, if the clock source is left on internal, the A Clock and B Clock parameters will use the sequencer tempo).

Real time messages also include START, CONTINUE and STOP, which control a sequencer, drum machine or DAW: START begins at the top of the song, while CONTINUE resumes from where STOP left off (or from a song position pointer). "Active sensing" is an optional message, a single byte sent at least every 300 ms when there is no other MIDI activity. Once a receiver has seen one, a longer silence tells it the cable has been disconnected, and it turns its notes off. Not every instrument sends it, but many do—the Yamaha DX7 sends it constantly—so most sequencers and DAWs filter it out on input; if yours doesn't, it gets recorded, making for larger files. The last real time message is a system reset, which returns every receiver to its power-up state. The specification asks that it be used sparingly, and never sent automatically at power-up. System real time status bytes run from 11111000 (248) to 11111111 (255), and the messages have no data bytes, so one can be slipped in anywhere, even between the bytes of another message, without delay.

One bar of 4/4. The dashed line marks where playback stopped and later continued.

One bar of 4/4 shown three ways, aligned left to right. Top: four quarter notes, numbered 1 to 4. Middle: sixteen MIDI beats, or sixteenth notes, with their boundaries numbered 0 to 16 as song positions. Bottom: 96 timing clock ticks, with a taller tick every 6 clocks and the tallest every 24; brackets show that 24 clocks make one quarter note and 6 clocks make one MIDI beat. Below, an amber bar labeled START runs from the beginning of the bar to STOP at clock 54, and a teal bar labeled CONTINUE runs from that point to the end of the bar. A dashed vertical line at clock 54, which is song position 9, is labeled song position pointer equals 9, from 54 clocks divided by 6.

Below is a chart of the system common and system real time messages.

Status Byte Data Byte 1 Data Byte 2 Description
System Common
11110001 0nnndddd MIDI Time Code Quarter Frame (n=message type, d=value; see MIDI Time Code)
11110010 0lllllll 0hhhhhhh Song Position Pointer (l=least significant 7 bits, h=most significant 7 bits)
11110011 0sssssss Song Select (s=song number)
11110110 none   Tune Request
11110111 none EOX (end of system exclusive message)
System Real Time
11111000 none Timing Clock
11111010 none Start (from the beginning)
11111011 none Continue
11111100 none Stop
11111110 none Active Sensing
11111111 none System Reset

System Exclusive Messages

System Exclusive (or simply SysEx) messages expanded the functionality of MIDI in many ways. At first, this code class was used primarily for editor/librarian functions. Large patch banks could be stored on a computer through SysEx codes and then sent back into the instrument when necessary. Certain instruments, such as the Yamaha TX816, had no way to edit sounds from their own front panels and so depended on SysEx patch dumps from a DX7 or a computer to change their programming. In addition, once these large patch sets were in the computer, the editor part of the editor/librarian could make changes to the programs before sending them back into the instrument. Eventually, manipulating the patch parameters with SysEx in real time directly on the instrument also became possible. The now-defunct Opcode company made several editors, including Galaxy, a universal librarian whose Galaxy Plus Editors version could also edit many different instruments; Mark of the Unicorn offered a similar program, Unisyn. Believe it or not, there are now editor/librarian mobile apps available that edit vintage instruments. MidiQuesti, Sound Quest's iPad version of its MIDI Quest editor/librarian, claims support for some 900 instruments!

A black-and-white Macintosh screen from Opcode's Yamaha DX7II and TX802 Editor/Librarian, with the program's title panel overlaid in the center. Across the top is a menu bar reading File, Edit, Load/Send, Voice, Function/Scaling, Play and Windows. The edit window for voice 55, SesameSeed, shows the six FM operators in numbered columns, each marked Car for carrier or Mod for modulator, with a small drawing of its envelope and rows of numeric settings below. At lower left is the algorithm diagram, set to algorithm 2, showing how the six operators connect. At lower right a bar graph shows the level scaling for operator 3 across the keyboard.

Opcode's Yamaha DX7II and TX802 Editor/Librarian

But the internal structure of a Yamaha DX7 was different from that of a Roland Juno-106. Sending a DX7 patch to a Juno would be useless. So instrument manufacturers would register with the MIDI Manufacturers Association (or, in Japan, the body now called AMEI) and be given an 'exclusive' number or SysEx ID that identifies the manufacturer a SysEx message is intended for (ID #1 went to Sequential Circuits). When the one-byte IDs began to run out, three-byte IDs beginning with 00 were added.

A System Exclusive code set begins with 11110000 (240 decimal or F0 hex), followed by the manufacturer ID, then by any number of data bytes (each 0–127) and ends with 11110111 (247 decimal or F7 hex), meaning End of SysEx message (EOX). No other codes are to be transmitted during a SysEx message (except a system real time message).

Values in hexadecimal, with binary below. Status bytes are amber, manufacturer IDs teal and data bytes gray.

Three rows of byte boxes, each value in hexadecimal with its binary form beneath. Row one, a manufacturer's SysEx message: F0, the start of SysEx; 43, the manufacturer ID for Yamaha; a model and device byte; a run of data bytes, as many as needed, each 0 to 127; and F7, the end of SysEx, or EOX. Row two is the same kind of message with a three-byte manufacturer ID, 00 20 29, which belongs to Novation. Row three shows F0, 43 and a data byte followed by F8, a timing clock byte, ringed and labeled as allowed in the middle of the message, before the data resumes and F7 ends it.

Normally, after the manufacturer ID, each maker will have its own instrument model subcode, so a Yamaha DX7 will ignore a Yamaha SY77's patch dump. In addition, many instruments have a device ID separate from their basic channel, so several units of the same model can share a MIDI setup, each responding only to the patch dumps addressed to it.

Update

SysEx is far from retired. Web browsers that support Web MIDI—Chrome, Edge and Firefox, though not Safari—can send and receive SysEx once you give a site permission, so some manufacturers, Novation among them, now offer their editor/librarians as web pages, with nothing to install. And two IDs, 7E and 7F, are set aside for universal SysEx messages that any manufacturer's equipment can respond to; the next section covers the most important of them.