According to the MIDI protocol, certain MIDI messages are never sent over MIDI ports but exist in MIDI files. These messages are called meta messages.
MIDI meta messages are messages that contain information about the MIDI sequence and that are not to be sent over MIDI ports.
Meta messages have the following standard structure.
Field | Length | Starts at byte | Value |
Status byte | One byte | 0x00 | 0xFF always |
Meta type | One byte | 0x01 | Variable, see below |
Length | Variable | 0x02 | 0-255 |
Data | Variable | 0x03 | variable |
Status byte – the first byte of the MIDI meta message is the "status byte" as with any other MIDI message. The status byte of a MIDI meta message is always 0xFF.
Meta type – the "meta type" byte defines how the rest of the message should be interpreted (see below for a table of defined meta types).
Length – the "length" contains the length in bytes of the data to follow so that MIDI devices know how much data to expect (not including the status byte, meta type, and the length itself). The length of certain meta messages (see below) is predefined, whereas other meta messages have variable length. The length itself is a variable-length quantity (for an example of a variable-length quantity in MIDI, see the description of delta time in the topic Track chunk (of a MIDI file)).
Data – the "data" portion of the message defines, obviously, something that the MIDI device must interpret.
The following is a list of defined meta messages.
Message | Meta type | Data length | Contains | Occurs at |
Sequence number | 0x00 | 2 bytes | The number of a sequence | At delta time 0 |
Text | 0x01 | variable | Some text | Anywhere |
Copyright notice | 0x02 | variable | A copyright notice | At delta time 0 in the first track |
Track name | 0x03 | variable | A track name | At delta time 0 |
Instrument name | 0x04 | variable | The name of an instrument in the current track | Anywhere |
Lyrics | 0x05 | variable | Lyrics, usually a syllable per quarter note | Anywhere |
Marker | 0x06 | variable | The text of a marker | Anywhere |
Cue point | 0x07 | variable | The text of a cue, usually to prompt for some action from the user | Anywhere |
Channel prefix | 0x20 | 1 byte | A channel number (following meta messages will apply to this channel) | Anywhere |
End of track | 0x2F | 0 | At the end of each track | |
Set tempo | 0x51 | 3 | The number of microseconds per beat | Anywhere, but usually in the first track |
SMPTE offset | 0x54 | 5 | SMPTE time to denote playback offset from the beginning | At the beginning of a track and in the first track of files with MIDI format type 1 |
Time signature | 0x58 | 4 | Time signature, metronome clicks, and size of a beat in 32nd notes | Anywhere |
Key signature | 0x59 | 2 | A key signature | Anywhere |
Sequencer specific | 0x7F | variable | Something specific to the MIDI device manufacturer | Anywhere |
Note on status byte 0xFF
The reset message (a system realtime message) carries the same status byte as a meta message: 0xFF. By convention, the MIDI reset message is never placed in MIDI files but is only sent over MIDI ports upon a request by the user. Thus, if a MIDI device receives the status byte 0xFF over a MIDI port, the device will interpret it as a "reset" message. If the MIDI device reads the status byte 0xFF from within some MIDI file, the device will interpret the message as a meta message.
Note on meta types
Since all meta messages have the same status byte (0xFF), the MIDI meta type ensures that MIDI devices can distinguish between different meta messages. For example, if the meta type in the second byte of a meta message is equal to 0x02 then the message contains a copyright notice (see the table above).
Comments
Older comments
admin: First posted on 2011 01 13
Simon, 2011 01 13: This is great information, thank you very much! It was exactly what I need and in all the detail I needed. Great good :)
The length field
The length field, the 3rd field, is stored as a variable-length quantity and varies from 1 to 4 bytes.
Right...
You are right and a variable-length quantity makes sense. The topic will be fixed.
Add new comment