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):
sry falls ich mich täusche oder was falsch wiedergegeben habe.. korrigiert mich bitte!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 } } } }
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







Zitieren

Lesezeichen