Musisz dobrać taki kwarc, który da się podzielić tak by uzyskać częstotliwość pracy UART = 31250 Hz +/- 1%
Komunikat MIDI składa się z 2 lub 3 bajtów. Jeżeli bajt ma ustawiony najstarszy bit to jest on (ten bajt) traktowany jako rozkaz a jezeli nie to są to dane do rozkazu (ogólnie dane są przesyłane w porcjach 7 bitowych). Dekodowanie jest dość złożone, bo w strumieniu danych są wymieszane różne informacje.
Zwyke
Rozkazy są wysyłane tylko przy zmianie danego elementu sterującego (wciśnięcie lub zwolnienie).
rozkaz ma 10 bitów - bit startu, 8 bitów danych, 1 bit stopu (bez kontroli parzystości)
1 bajt trwa 320 µs, jeden rozkaz 640 lub 960 µs
Występuje czasami przesyłanie typu running status tzn. przy przesyłaniu ciągu tych samych rozkazów (np. 10 klawiszy) wysyła się 1 bajt rozkazu np. 9x i 20 bajtów danych dla 10 klawiszy. Jezeli jednak w trakcie przesyłania pójdzie inny rozkaz (np. pitch bend) to następne dane klawiszowe zostaną porzedzone kodem rozkazu.
Podstawowe rozkazy:
oznaczenia
x - numer kanału MIDI-1 (kanały 1-16 -> xε<0..15>)
nn - numer klawisza 0-127
vv - prędkość ataku lub zwalniania klawisza (0-127) - większość
instrumentów nie interpretuje tego parametru przy zwalnianiu
8x nn vv - Note off - Wyłączenie tonu, wysyłane przy zwalnianiu klawisza
9x nn vv - Note on - włączenie tonu nn z prędkością vv
Ax nn vv - Polyphonic Key Pressure - niektóre klawiatury wysyłają komunikat o zmianie nacisku vv na klawisz nn. Dotyczy nuty poprzednio włączonej.
Bx cc vv - zmiana wartości kontrolera cc (0-127) w kanale x (0-15) na wartość vv (0-127)
dotyczy np. pedałów, pokręteł, suwaków nie dotyczy (Pitch wheel)
Cx pp - zmiana programu w kanale x na pp (0-127) (np. zmiana barwy z trąbki na pompkę
Dx cc - Channel pressure - dotyczy klawiszy nie wysyłających informacji Polyphonic key Pressure (Ax) dla oddzielnych klawiszy. Zamiast tego wysyłana jest największa wartość nacisku na klawisz w kanale x. Wartość cc z zakresu (0..127).
Ex ll hh - Pitch bend - odstrojenie tonu w kanale x. Podawane z dokładnością 14 bitów (hh*128+ll) - wartość środkowa (spoczynkowa) = 8192 (2000H) ll,hh z zakresu 0-127.
F0 - system exclusive - informacje związane z konkretnym typem instrumentu (np. nastawy parametrów specyficznych dla modelu)
ciąg zaczyna się od F0 a kończy kodem F7
F0 id dd dd dd F7 -> id 7 bitowy identyfikator producenta (są to numeracje stałe przydzielane przez organizację producentów sprżetu z MIDI)
dd - dane
F7 - koniec sysex
tylko komunikaty czasu rzeczywistego mogą być przeplatane ciągiem sysex.
F1- niezdefiniowane
F2 ll hh - Song Position Pointer - 14 bitowy wskaźnik (hh*128+ll) przechowujący ilość jednostek MIDI od startu melodii (jedna jednostka midi to 6 komunikatów zegara MIDI
F3 ss - song select - wybór sekwencji do odtwarzania (zwykle sekwencery tego używają)
F4 - niezdefiniowany
F5 - niezdefiniowany
F6 - Tune Request. - po tym komunikacie systezatory analogowe powinny zestroić swoje generatory (np. do A=440Hz)
F7 End of Exclusive (F0)
Komunikaty czasu rzeczywistego
F8 - MIDI Clock - wysyłany 24 razy na ćwierćnutę gdy wymagana jest synchronizacja
F9 - niezdefiniowany
FA - Start wybranej sekwencji (po tym rozkazie idą komunikaty F8)
FB - Kontynuacja odtwarzania od miejsca zatrzymania
FC - Stop - zatrzymanie aktualnie granej sekwencji
FD - niezdefiniowany
FE - Active sensing - Użycie tego komunikatu jest opcjonalne. Jeżeli został odebrany to odbiornik będzie oczekiwał na kolejny w czasie maksymalnym 300 ms (lub innego komunikatu). Jeżeli Komunikat nie pojawi się w oknie 300 ms to odbiornik przyjmuje, że łącze zostało przerwane (lub nadajnik wyłączony) i wyłącza wszystkie głosy oraz powraca do trybu normalnego (bez active sensing)
FF - Reset. Wszystkie odbiorniki w stan jak po włączeni zasilania. Nie powinien być wysyłany przy włączaniu zasilania(groźba zapętlenia)
Do tego dochodzą różne znaczenia parametrów specyficzne dla instrumentu.
PROSTE NIE ?
Jak Musical Instrument Digital Interface !