According to the MIDI protocol a MIDI event is a piece of data sent to a MIDI device to prompt it to do something at a certain time. The MIDI event contains two pieces of information: 1) the MIDI tick, which specifies at what time something should be done; and 2) the MIDI message, which specifies what should be done.
The status byte of a MIDI message is the first byte of the MIDI message, the value of which defines the type of the MIDI message.
The following are possible status bytes.
|Status byte||MIDI message||MIDI message category||MIDI device action|
|0x80 to 0x8F||Note off||Voice||Release a note and stop playing it|
|0x90 to 0x9F||Note on||Voice||Play a note and start sounding it|
|0xA0 to 0xAF||Aftertouch / key pressure||Voice||Apply pressure to a note playing, similar to applying pressure to electronic keyboard keys|
|0xB0 to 0xBF||Controller||Voice||Affect a controller, such as a slider, knob, or switch|
|0xC0 to 0xCF||Program change||Voice||Assign a program to a MIDI channel, such as an instrument, patch, or preset|
|0xD0 to 0xDF||Channel pressure||Voice||Apply pressure to a MIDI channel, similar to applying pressure to electronic keyboard keys|
|0xE0 to 0xEF||Pitch / modulation wheel||Voice||Change a channel pitch up or down|
|0xF0||System exclusive (sysex) message||System common||Perform some device specific task|
|0xF1||MIDI time code quarter frame||System common||Set the MIDI time to keep in line with some other device|
|0xF2||Song position pointer||System common||Cue to a point in the MIDI sequence to be ready to play|
|0xF3||Song select||System common||Set a sequence for playback|
|0xF6||Tune request||System common||Tune|
|0xF8||MIDI clock||System realtime||Understand the position of the MIDI clock (when synchronized to another device)|
|0xFA||MIDI start||System realtime||Start playback of some MIDI sequence|
|0xFB||MIDI continue||Systemreal time||Resume playback of some MIDI sequence|
|0xFC||MIDI stop||System realtime||Stop playback of some MIDI sequence|
|0xFE||Active sense||System realtime||Understand that a MIDI connection exists (if there are no other MIDI messages)|
|0xFF||Reset||System realtime||Reset to default state|
Note on status byte 0xFF
Sent over MIDI ports, the 0xFF status byte describes a "reset" message. The MIDI device that receives this message will reset itself to a default state, which usually means stopping all playback, resetting the song position to zero, and so on.
In a MIDI file, however, the 0xFF status byte means a "meta" message. Meta messages carry meta information about the MIDI song, including track names, end of track events, various text events, and other.
"Reset" messages and "meta" messages are completely different, even though they have the same status byte. One can distinguish between the two, however. The reset message is sent over MIDI ports and is usually user generated (e.g., by pressing a button, rather than stored in a MIDI song). The meta message is stored in MIDI files, but never sent over MIDI ports.