Es sind nicht immer 3 Byte Befehle:
Es gibt auch 2 Byte Befehle, z.B. channel Aftertouch, ProgrammChange
sowie auch 1 Byte Befehle, z.B. MIDI Clock, Start, Stop, Continue, Tune
Request.
Nicht zu vergessen MTC, da sind es 32 Bytes, noch schlimmer wird's bei
SysEx Befehlen, da ist die Anzahl der Bytes ungewiss. Man weiß erst nach
Eintreffen von F7 wie viele Bytes eingetrudelt sind.
Dann ist auf jeden Fall noch der Running Status zu berücksichtigen,
wobei Status-redundanten Channel Befehle nicht gesendet werden und zwar
so lange bis der Status gewechselt wird. Ausnahme sind System- und
Realtime messages. All dies muss berücksichtigt werden um einen
MIDI-Analyzer erfolgreich zu programmieren.
Ist aber kein Hexenwerk.
Man muss nur die eingehenden Daten in der richtigen Reihenfolge
abfragen.
1st System messages, alle Daten & 0xF0
2nd Channel messages, alle Daten & 0x80
3rd running status, dazu am besten eine eigene RS_Byte Variable
verwenden:
RS_Byte is cleared at power up
RS_Byte stores the status when a ChannelMessage 0x80...0xEF is received.
RS_Byte is cleared when a SystemMessage 0xF0...0xF7 is received.
Nothing is done to RS_Byte when a RealTimeMessage is received.
Any data bytes are ignored when RS_Byte is cleared.
Das sollte helfen
lg Rolf