vielleicht hilft dir das:
http://de.wikipedia.org/wiki/MIDI#Fu...IDI-Protokolls
soweit ich sehe werden (häufig) jeweils 3 bytes übertragen, "0x9n kk vv" beim anschlag einer taste.
das (hex) 9 in den ersten 4 bit wäre für dich wichtig, wenn du die anschlagsdynamik und den notenwert erfassen willst, danach evtl. noch die zweiten 4 bit für den channel 0-15. darauf folgt die angespielte note (0-127) und die dynamik (0-127). nix klar?
dein µC empfängt ein 144-127-63 (alles dezimal). weil das erste byte >127 ist, weiß dein µC, dass ein neuer datensatz anfängt.
144 ist binär 10010000 -> die erste bytehälfte (binär 1001) ist der code für "Beginnt das Spielen einer Note", die zweite bytehälfte (man sagt nibble, ich weiss..) ist 0 also der erste kanal.
bei den nächsten 2 bytes ist das erste bit 0 (also dezimal 0-127), daran erkennt das gerät, dass es sich um den teil eines datensatzen handelt. als nächstes byte folgt die note (127 = der "höchste ton"), darauf die dynamik (63 dez), also "mittel starker" anschlag.
vielleicht würde folgendes klappen (pseudo-code, kanns leider nicht testen):
Code:
int byte;
while(1)
{
read(byte);
if(byte>127) //erstes byte ist statusbyte für attack (anschlag)
{
if(byte%127==2) // 3tter channel
{
read(byte); // note
led_an(byte%12); // 12 halbtonschritte angenommen, eine von 12 leds leuchten lassen
read(byte); // dynamik
if(byte>(63+32)) // anschlagsdynamik im oberen drittel
{
led2_an(); // stärkerer anschlag
}
}
}
}
sry falls ich mich täusche oder was falsch wiedergegeben habe.. korrigiert mich bitte!
p.s. bin fast sicher da stimmt irgendwas nicht 
p.p.s. helge war mal echt gut, aber in dem fall eher nicht.
gruesse von der katz
Lesezeichen