This is an old revision of the document!
MIDI Specifications
The MIDI Protocol constists of a package list, that normally contains one or more packages. Each Package contains (depending on it's message type) 2 or 3 bytes.
The First Byte is called the Status Byte because it's defining the Event (eg NOTE_ON or CONTROLLER) and the channel on which this event occurs.
The Second Byte is called the Data Byte because it contains the Data (wow!)
The Third Byte is optional (depending on the event type) and contains another value, eg. for Controllers the (most important) value!
Here's an Example:
1st Byte 144 (0x90): NOTE_ON on Channel 0 (Channel 1 would be 0x91)
2nd Byte 65 (0x40): A Note
3rd Byte 100 (0x64): Velocity 100
If you want to send this message with MIOS (programmed in C) it would look like this:
MIOS_MIDI_BeginStream(); MIOS_MIDI_TxBufferPut(0x90); MIOS_MIDI_TxBufferPut(0x40); MIOS_MIDI_TxBufferPut(0x64); MIOS_MIDI_EndStream();
More informations can be found online:
Official MIDI Specifications Index from the MIDI Manufacturer's Association