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 and System Real Time Messages
There are only a few system common messages . Those deal primarily with instrument's on-board sequencers or drum machines, which may have pre-recorded MIDI sequences. System common messages have both a status byte beginning with 11110001 (241) and one or more data bytes.
A song position pointer is a register that holds the number of MIDI beats since the start of a song (sequence). Other system common messages select which song to play and also a 'tune request' for analog synthesizers to tune their oscillators (those were the days...). Because of the potentially large number of beats, the song position pointer uses two data bytes for a 14-bit message, similar to Pitch Bend.
System real time messages include a timing clock, which sends 24 'clocks' per quarter note (note that this depends on the tempo setting and so is 'relative' time). Timing clocks of an instrument's internal sequencer can also control the rates of LFO's and other patch parameters (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 can also send a START and STOP messages to an on-board sequencer. "Active sensing" was an optional message that sent a status byte every 300 ms. when there was no other MIDI activity. More recent instruments seem to have dropped this, but the Yamaha DX7 sends active sensing which is recorded on our sequencing software if not input filtered out, making for larger files. The last real time message is a system reset, which should return the condition of the receiver to the start-up condition. System Real Time messages begin with 11111000 (248) and have no data bytes.
Below is a chart of the implemented system common and system real time messages.
Status Byte | Data Byte 1 | Data Byte 2 | Description |
---|---|---|---|
System Common | |||
11110010 | 0lllllll | 0hhhhhhh | Song Position Pointer (l=least significant bit, h=most significant bit) |
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 (song) | |
11111011 | 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 internal patches of their own and consequently depended on SysEx patch dumps 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 a universal one that could edit many different instruments (called Galaxy), as did Mark of the Unicorn with Unisyn. Believe it or not, there are now editor/librarian mobile apps available now that edit vintage instruments. MIDI Quest, for example, currently edits and stores patches for over 700 instruments on an iPad!
Opcode DX7 Editor/Librarian
But the internal structure of a Yamaha DX7 was different than a Roland Juno. Sending a DX7 patch to a Juno would be useless. So instruments manufacturers would register with the MIDI Manufacturers Association and be given and 'exclusive' number or SysEx ID that would identify their manufacturer and their specific instruments that these SysEx messages were intended for (ID #1 went to Sequential Circuits).
A System Exclusive code set begins with 11110000 (240 decimal or F0 hex), followed by the manufacturer ID#, then by an unspecified number of data bytes of any ranges from 0-127) and ends with 11110111 (decimal 247 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). 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, most instruments have a SysEx ID # separate from the Basic MIDI Channel setting so more than one of the same instruments can be on a network but not necessarily respond to a patch dump not intended for it.