The MIDI system exclusive message, also known as a "MIDI sysex message", carries information that is specific to the manufacturer of the MIDI device receiving the message. The action that this message prompts for can be anything.
A manufacturer, such as Lexicon, for example, could send a message that only Lexicon devices will understand and other devices will simply ignore.
This message belongs to the category of MIDI system common messages.
The MIDI system exclusive message consists of virtually unlimited bytes of data. The first byte is the status byte and has the hexadecimal value 0xF0. The second byte is the manufacturer ID. Various MIDI device manufacturers have assigned IDs and those IDs are used in the system exclusive message so that the devices produced by those manufacturers know that the system exclusive message should be acted upon (if the message is from the right manufacturer) or ignored (if the message is from another manufacturer). A list of assigned manufacturer IDs is provided below. Several (unlimited number) of bytes of data will follow the manufacturer ID. The one common thing among these bytes of data is the fact that the top bit of each byte is 0, and thus these bytes can only carry values between 0x00 and 0x7F (0 and 127). The last byte of the message is 0xF7 and signifies the end of the message. When encountering this last byte MIDI devices that are from different manufacturers and do not understand the message will know when the message ends.
The following is an example of a MIDI "system exclusive" message.
0xF0 0x41 0x01 0x34 0xF7
The status byte 0xF0 shows that this is a system exclusive message. The manufacturer ID is 0x41 which shows that this is a Roland system exclusive message. The data of the message is 0x01 0x34, which prompts the Roland device to do something (this is only an example and such a Roland message probably does not actually exist). The 0xF7 byte shows that the message is finished.
Note that, since all bytes in the data portion after the manufacturer ID and before 0xF7 must have a top bit of 0, any status byte that comes after the manufacturer ID will be interpreted by devices that do not understand the message as the end of the message (since status bytes have a top bit of 1).
The following is a list of assigned manufacturer IDs.
Hexadecimal value | Decimal value | Manufacturer |
0x01 | 1 | Sequential Circuits |
0x02 | 2 | Big Briar |
0x03 | 3 | Octave / Plateau |
0x04 | 4 | Moog |
0x05 | 5 | Passport Designs |
0x06 | 6 | Lexicon |
0x07 | 7 | Kurzweil |
0x08 | 8 | Fender |
0x09 | 9 | Gulbransen |
0x0A | 10 | Delta Labs |
0x0B | 11 | Sound Comp. |
0x0C | 12 | General Electro |
0x0D | 13 | Techmar |
0x0E | 14 | Matthews Research |
0x10 | 16 | Oberheim |
0x11 | 17 | PAIA |
0x12 | 18 | Simmons |
0x13 | 19 | Gentle Electric |
0x14 | 20 | Fairlight |
0x15 | 21 | JL Cooper |
0x16 | 22 | Lowery |
0x17 | 23 | Lin |
0x18 | 24 | Emu |
0x1B | 27 | Peavey |
0x20 | 32 | Bon Tempi |
0x21 | 33 | S.I.E.L. |
0x23 | 35 | SyntheAxe |
0x24 | 36 | Hohner |
0x25 | 37 | Crumar |
0x26 | 38 | Solton |
0x27 | 39 | Jellinghous Ms |
0x28 | 40 | CTS |
0x29 | 41 | PPG |
0x2F | 47 | Elka |
0x40 | 64 | Kawai |
0x41 | 65 | Roland |
0x42 | 66 | Korg |
0x43 | 67 | Yamaha |
0x44 | 68 | Casio |
0x45 | 69 | Akai |
A manufacturer can obtain an ID from the International MIDI Association. Otherwise the manufacturer has two alternative options of defining his own system exclusive message. First, one can use a manufacturer ID that is specifically reserved for educational and development purposes. This ID, however, should not be used for commercial purposes. This ID is 0x7D. Second, one can use someone else’s ID as long as the format of the system exclusive message is used as it is and without changes.
Universal system exclusive messages
There are two universal IDs that can be used by system exclusive messages instead of the specific manufacturer IDs above. Since these two IDs are not specific to a manufacturer, but universal, all MIDI devices should consider responding to those. These IDs are as follows.
Hexadecimal value | Decimal value | Description |
0x7E | 126 | Non-real time |
0x7F | 127 | Real time |
In other words, 0x7F is carried by system exclusive messages to which all MIDI devices should respond to in real time (immediately) and 0x7E is carried by system exclusive messages to which all MIDI devices will respond to, but not in real time (not necessarily immediately). For example, the MIDI full frame message is a system exclusive message with manufacturer ID 0x7F. This message prompts all MIDI devices to immediately cue up to a certain point in time.
The first byte after the real time / non-real time ID is the "system exclusive channel". Normal system exclusive messages do not have a channel, but universal system exclusive messages do have a channel that could be from 0x00 to 0x7F (from 0 to 127). Normally, the system exclusive channel will actually be the manufacturer ID in the table above (e.g., 0x41 for Roland), so that the message can be sent to a specific MIDI device. If the system exclusive channel is 0x7F then this message is for all MIDI devices.
The two bytes after the system exclusive channel are sub-IDs and describe what the message is about. For example, the two bytes “0x01 0x01” show that the message is the MIDI Full Frame message and that the rest of the data should be used to discern time to which the MIDI device should cue.
Examples of universal MIDI system exclusive messages include the MIDI master volume message, the MIDI full frame message, and the general MIDI system enable / disable message.
Comments
Music
Excellent
Real TIme Messages within SySex
The statement "Note that, since all bytes in the data portion after the manufacturer ID and before 0xF7 must have a top bit of 0, any status byte that comes after the manufacturer ID will be interpreted by devices that do not understand the message as the end of the message (since status bytes have a top bit of 1)." is wrong!
Real Time MIDI messages have top bit set to 1 BUT ARE ALLOWED to be sent WITHIN a SysEx message.
I don't see a contradiction
I cannot pretend to know every detail of the MIDI standard, but I don't see a contradiction in the two statements above. A sysex message itself can be a realtime message (like the General MIDI System Enable/Disable message, which itself is not device specific). That doesn't mean that the realtime message is sent within the sysex message. The sysex message is the realtime message.
You could feasibly also have a different scenario - one in which a device defines its own specific message and, in that message, include realtime data. My understanding in this case, however, is that the device should not add status bytes. The device can handle this in any which way it wants, including in real time.
There is a typo or a contradiction in the article.
The text reads "In other words, 0x7F is carried by system exclusive messages to which all MIDI devices should respond to in real time (immediately) and 0x7E is carried by system exclusive messages to which all MIDI devices will respond to, but not in real time (not necessarily immediately)" but in the table immediately above this seems to be exactly the opposite.
Fixed
You are correct. The table was wrong. The text was right. It is fixed now.
Add new comment