MIDI (ang. Musical Instrument Digital Interface – cyfrowy interfejs instrumentów muzycznych) był pomysłem prezesa firmy Roland, Ikutaro Kakehashiego, który doszedł do wniosku, że istniejące wcześniej standardy łączności między instrumentami elektronicznymi były ograniczone przez brak kompatybilności. Tylko standard CV, używany w syntezatorach analogowych, był w miarę popularny, ale miał liczne ograniczenia, zwłaszcza gdy rosła popularność instrumentów cyfrowych i komputerów. Kakehashi uznał, iż jeden, tani i prosty standard, wspólny dla wszystkich, będzie dobry dla rozwoju branży instrumentów elektronicznych. Z początku nad projektem pracowały firmy japońskie: Roland, Kawai, Yamaha i Korg, a także amerykańska firma Sequential Circuits. Standard został zaprezentowany pierwszego lutego 1983 roku. Pierwsza specyfikacja została opublikowana w sierpniu tego samego roku. W bazowej formie obejmował on jedynie protokół komunikacyjny: warstwę fizyczną i format komunikatów. W późniejszych latach dodano format plików MIDI (.mid) przechowujący sekwencje komunikatów tworzące utwór muzyczny. W 1991 roku protokół został uzupełniony o standard General MIDI (GM, GM-1), który dokładnie określał, co oznaczają poszczególne komunikaty protokołu MIDI, narzucał minimalne wymagania względem kompatybilnych instrumentów (na przykład 24-głosową polifonię), a także określał listę 128 brzmień i efektów, które każdy instrument i moduł brzmieniowy muszą posiadać. Przedtem bowiem różne urządzenia odtwarzały zupełnie inne brzmienia po otrzymaniu tego samego komunikatu, z taką samą wartością parametru Program Number. Choć do każdej wartości Program Number przypisany jest konkretny instrument, to w praktyce implementacja jego brzmienia była już w gestii poszczególnych producentów. Nawet teraz, w dobie powszechnego stosowania gotowych próbek PCM, różne urządzenia mogą oferować nieco odmienne od siebie brzmienia.
Standard MIDI doczekał się też implementacji USB, FireWire, a nawet Bluetooth. Obecnie wdrażany jest bardziej rozbudowany standard MIDI 2.0, zaprezentowany w 2020 roku, a pierwsze kompatybilne z nim produkty pojawiły się pod koniec 2023 roku. Mimo to wiele istniejących produktów wciąż implementuje standard MIDI 1.0, choć nowy protokół jest w pełni kompatybilny wstecznie. W tym artykule skupimy się na jednej klasie urządzeń MIDI, mianowicie na kontrolerach, które to pozwalają na fizyczne sterowanie sprzętowymi i programowymi instrumentami, syntezatorami, sekwencerami, a także programami DAW. Wiele z nich wygląda i działa standardowo, choć istnieją też bardziej unikalne kontrolery.
Specyfikacja techniczna standardu MIDI
Standard MIDI opiera się na przesyłaniu relatywnie krótkich komunikatów za pomocą transmisji szeregowej. Warstwa fizyczna protokołu bazuje na pętli prądowej z izolacją optyczną po stronie odbiorcy. Taka forma łączności pozwala na zachowanie wysokiej odporności na zakłócenia i pełnej, galwanicznej izolacji, jako że tylko strona nadawcza ma przyłączony ekran. Do połączeń wykorzystuje się 5-pinowe gniazda DIN, z czego tylko trzy są użyte po stronie nadawczej, a dwa po stronie odbiorczej. Niekiedy spotykało się też wariant oparty na złączach TRS (jack 6,3 mm), a w mniejszych urządzeniach – miniDIN. Fizyczną implementację przedstawia rysunek 1.
Domyślnym stanem jest stan wysoki, każdy bajt transmitowany jest z bitem startu (stan niski) i zawiera osiem bitów danych, zwieńczonych bitem stopu (stan wysoki). Protokół nie przewiduje bitów parzystości. Prędkość transmisji to 31250 bps, typowy komunikat MIDI zawiera trzy bajty, a jego przesłanie zajmuje niespełna milisekundę. Implementacje USB czy Bluetooth są bardziej złożone; Czytelnik może się z nimi zapoznać sięgając do stosownych specyfikacji, choć od strony protokołu komunikaty są te same.
Pierwszy bajt wiadomości MIDI definiuje jej znaczenie. Najbardziej znaczący bit określa, czy wiadomość informuje o statusie, czy jest poleceniem, czy też bajtem danych. W przypadku komunikatów o statusie kolejne trzy bity określają typ polecenia, a pozostałe cztery – kanał. Standard MIDI przewiduje 16 kanałów. Tabela 1 zestawia wszystkie podstawowe polecenia protokołu MIDI.
Każdy komunikat statusu, z wyjątkiem komunikatu System, zawiera numer kanału MIDI. Spośród 16 wspomnianych kanałów, ten o numerze 10 jest przypisany zestawom perkusyjnym. Dla zaoszczędzenia czasu protokół MIDI dopuszcza wysłanie jednego bajtu statusu (np. Note on), po którym następują kolejne pary bajtów danych. Wartość bajtu velocity dla Note on równa 0 jest równoznaczna z wysłaniem komunikatu Note off. Komunikat Program Change zmienia przypisane do kanału brzmienie. Komunikaty Polyphonic Pressure i Channel Pressure realizują funkcję aftertouch w wersji polifonicznej i monofonicznej. Warto nadmienić, że producenci dodali pewną modyfikację do sposobu wykorzystywania komunikatów Pressure, Velocity i Pitch Bend – zakładając, iż użytkownik może zazwyczaj zagrać maksymalnie dziesięć tonów, każde zdarzenie Note on zostaje przypisane do własnego kanału (0...15, za wyjątkiem kanału 10), dzięki czemu każdy ton może dostać własną wartość Pitch Bend, Channel Pressure i Polyphonic Pressure. Rozwiązanie to nazywane jest MIDI Polyphonic Expression i oznaczane jest skrótem MPE.
Komunikaty Control Change są z kolei używane do przesyłania parametrów kontrolnych. Ponieważ każdy komunikat CC zawiera numer kanału oraz numer kontrolera, to jeden kontroler MIDI w teorii może sterować do 2048 parametrami. W praktyce niektóre komunikaty CC mają przypisane stałe znaczenia. Przykłady zestawia tabela 2.
Komunikaty System (0xF) realizują szereg funkcji kontrolnych. Jeśli pierwszy bit w drugiej połówce bajtu Status jest ustawiony na 1, komunikat jest typu System Real Time, co oznacza, że jest to komunikat priorytetowy. Tabela 3 zestawia znaczenie poszczególnych komunikatów.
Poza tymi komunikatami istnieje jeszcze grupa komunikatów specjalnych, System Common Message. Dwa komunikaty, 0xF0 i 0xF7 mają szczególne znaczenie: pierwszy z nich zaczyna transmisję System Exclusive, a drugi ją kończy. Ten typ komunikacji oznacza się jako SysEx, a jego format i zawartość zależą od producenta. Za pomocą SysEx można stworzyć lub załadować kopię zapasową ustawień i parametrów urządzenia MIDI, przesłać nowe próbki lub uzyskać dostęp do głębszych parametrów, niedostępnych przez standardowe komunikaty MIDI. Tą drogą realizowano też aktualizację oprogramowania urządzenia. Warto nadmienić, że bajty danych nadal mają formę 0b0xxxxxx co oznacza, że nie da się łatwo przesłać wartości ośmiobitowych. Stosuje się wtedy dwie metody: albo w kolejnych komunikatach przesyła się pierwszą, a potem drugą połowę bajtu, albo w drugiej wysyła się siedem bajtów bez bitów MSB, te zaś wysyła się „zbiorczo” ósmym bajtem.
Komunikat 0xF1 pozwala przesłać dokładną wartość czasu MTC – MIDI Time Code. Po tym bajcie następuje oktet danych w formacie 0b0nnndddd. Część nnn wskazuje, którą cyfrę 8-cyfrowego kodu przesyłamy, zaś dddd to wartość tej cyfry. Komunikat ten jest używany do synchronizacji urządzeń MIDI, na przykład z oświetleniem, odtwarzaczami kasetowymi lub video. Pokrewnym komunikatem jest 0xF2, Song Position Pointer (SPP), czyli wskaźnik miejsca w utworze. Po tym komunikacie następują dwa bajty danych, z czego pierwszy zawiera wartość LSB, a drugi MSB 14-bitowego słowa wskazującego, jak daleko od początku utworu powinien być wskaźnik w wielokrotnościach nuty szesnastkowej. Dla przykładu: komunikat 0xF2 0x10 0x00 przesuwa wskaźnik o 16 szesnastek od początku utworu. Przekłada się to na dokładnie 4 ćwierćnuty, co przy tempie 120 BPM oznacza umieszczenie wskaźnika dokładnie w 2. sekundzie nagrania. Komenda 0xF3 to komunikat Song Select, po którym następuje jeden bajt danych pozwalający wybrać jeden z 128 utworów. W połączeniu z komunikatami System Real Time Start, Stop i Continue oraz z komunikatem SPP pozwala to kontrolować występ na żywo.
Standard MIDI 2.0 wprowadza względem wersji 1.0 szereg kluczowych zmian. Przede wszystkim komunikacja między hostem, a kontrolerem jest dwukierunkowa, komunikaty nie są więc wysyłane „w ciemno”. Co więcej, przy podłączeniu urządzenia host może się „dowiedzieć”, co dane urządzenie potrafi. Dla przykładu: program DAW może automatycznie zmapować kontrolowane parametry i funkcje na fizycznym kontrolerze, ponieważ ten przekazał informacje o swoich możliwościach i konfiguracji. Drugą istotną zmianą jest stosowanie 32-bitowych wartości zamiast 7- i 14-bitowych, jak w MIDI 1.0. Zwiększa to wydatnie precyzję kontroli, szczególnie przy emulacji wirtualnych instrumentów analogowych. Trzecia zmiana dotyczy sposobu realizacji zdarzeń Note on: w standardzie 2.0 każda nuta ma przypisany szereg parametrów ekspresji co oznacza, iż nie potrzeba implementować MPE. Ostatnią, wyróżniającą cechą jest timestamping każdego komunikatu MIDI. Dzięki temu synchronizacja instrumentów i urządzeń jest dużo precyzyjniejsza i nie trzeba już generować globalnego zegara systemowego. Standard pozostaje jednak kompatybilny wstecznie z urządzeniami MIDI 1.0, szczególnie przy używaniu połączeń DIN.
Keyboardy i klawiatury sterujące
Pierwszymi seryjnie produkowanymi instrumentami z interfejsem MIDI były syntezatory Roland Jupiter 6 (fotografia 1), JX-3P oraz Sequential Circuits Prophet 600 (fotografia 2), które pojawiły się na rynku w 1983 roku.
Początkowo zakładano, że nowy standard posłuży przede wszystkim do zdalnej kontroli innych instrumentów – do tego właśnie przeznaczone były wcześniejsze rozwiązania. W 1984 roku na rynek weszła klawiatura sterująca Roland MKB-1000 (fotografia 3), która jest uznawana za pierwszy, dedykowany kontroler MIDI.
Klawiatura ta miała 88 ważonych, drewnianych klawiszy, które całkiem dobrze naśladowały odczucia podczas gry na klasycznym fortepianie. Klawiatura ta miała kontrolować inne instrumenty, dlatego też producent dodał pamięć 128 nastaw (patches – nazwa wywodzi się od nazwy kabli używanych w modularnych syntezatorach analogowych do łączenia modułów). Równolegle Roland wypuścił model MKB-300 – krótszy o oktawę, w którym klawiatura była w stylu „syntezatorowym”. Oba modele rejestrowały też prędkość naciśnięcia (ang. velocity – parametr wpływający na głośność, a czasem i tembr instrumentu). W 1985 roku Yamaha wprowadziła swój model KX88, który jako pierwszy pozwalał kontrolować dowolny parametr dostępny w standardzie MIDI. Oczywiście żadna z tych klawiatur sama z siebie nie wydawała dźwięków, czym odróżniały się od syntezatorów i keyboardów. W 1984 roku Roland wypuścił też kartę MIDI dla komputerów PC, model MPU-401, a zastosowany w niej układ scalony był potem udostępniony innym producentom sprzętu. Karta ta pozwalała komputerowi kontrolować kompatybilne instrumenty, a także zapisywać zagrane sekwencje w pamięci, by potem odtwarzać je ponownie. Komputer PC stał się dzięki temu narzędziem do komponowania muzyki, choć dopiero trzy lata później pojawiły się na rynku karty dźwiękowe AdLib czy Sound Blaster.
W 1986 roku na rynku pojawił się komputer Commodore Amiga wyposażony w porty MIDI oraz układ dźwiękowy, zdolny do odtwarzania do czterech próbek PCM naraz. Cenowo rozwiązanie Commodore było znacznie tańsze od zakupu komputera PC, a przy tym łatwiejsze w użyciu. Amiga dość szybko doczekała się szeregu aplikacji do tworzenia muzyki, a jedną z najważniejszych był stworzony w 1987 roku przez niemieckiego programistę Karstena Obarskiego Ultimate Soundtracker. Program ten oferował cztery kanały próbek, które były odtwarzane równolegle według zapisanej w kolumnach sekwencji. Obarski stworzył też format plików MOD, który zawierał w sobie zarówno zapis sekwencji do odtworzenia, jak i same próbki, dzięki czemu plik brzmiał zawsze tak samo. Ten program nie odniósł sukcesu i wkrótce powstały dwa inne: NoiseTracker, który naprawiał błędy oryginału oraz ProTracker, który stał się de facto standardem. Początkowo trackery w ogóle nie korzystały z portów MIDI, dopiero OctaMED w 1989 roku zaczął je wspierać, ProTracker zaś doczekał się takiej implementacji dopiero w latach 90. Inaczej sprawa ma się z sekwencerami MIDI – jednym z nich był Dr. T’s Keyboard Controlled Sequencer (KCS) z 1987 roku. Program pozwalał na zaawansowaną pracę z MIDI, ale miał skomplikowany, tekstowy interfejs.