Podstawą MIDI jest reprezentacja muzyki jako dyskretnych zdarzeń nutowych, z których każda ma statyczny ton. Jest to idealne rozwiązanie do przedstawiania muzyki odtwarzanej na instrumentach klawiszowych. Możesz przekonwertować dowolną częstotliwość odpowiadającą nucie w temperowanej skali na numer nuty MIDI, używając:
69+12×log2frequency440
Przy założeniu, że odbiornik MIDI jest skalibrowany dla A4 = 440 Hz.
Ta reprezentacja jest odpowiednia w przypadku muzyki fortepianowej, ale problem polega na tym, jak reprezentować wysokości, które nie są odwzorowane na temperowaną skalę (muzyka niezachodnia, dźwięki niemuzyczne) oraz jak reprezentować zmiany wysokości w trakcie trwania nuty (glissando, vibrato).
Odbywa się to w MIDI za pomocą „komunikatów pitch bend”, które instruują syntezator, aby przesunąć wysokość aktualnie odtwarzanej nuty o mały odstęp. Większość syntezatorów jest domyślnie skalibrowana dla +/- 2 półtonów w całym zakresie komunikatów wysokości tonu (0 .. 16383). 8192 odpowiada brakowi gięcia wysokości - emitowana wysokość jest dokładnie równa wartości nuty. Odwzorowanie między wartością zgięcia wysokości a współczynnikiem przesunięcia częstotliwości jest określone przez:
femitted_notefnote_message=2pitchbend−81924096×12
W ten sposób można uzyskać częstotliwość nuty granej przez syntezator z następującego wzoru:
440×2note−6912.0+pitchbend−81924096×12
Gdzie nuta jest 7-bitowym numerem nuty MIDI ostatnio odebranej wiadomości Note On ; a pitchbend to 14-bitowa wartość ostatnio odebranej wiadomości Pitch Bend . Syntezator uruchamia się z rejestrem pitch bend ustawionym na 8192, a ta wartość jest również resetowana podczas odbierania komunikatu „Resetuj wszystkie sterowniki”.
Weźmy następujący przykład. Chcesz wyrazić tryl fletu z następującą trajektorią częstotliwości: 500 Hz, 510 Hz, 500 Hz, jako komunikaty MIDI.
Numer nuty bazowej to:
round(69+12×log2(500/440))=71 .
Tak więc wysyłasz wiadomość „uwaga na” z uwagą # równą 71. Odpowiada to wysokości:
440×2(71−69)/12=493.88
Który jest najbliższym skokiem na temperowanej skali. Musisz wysłać komunikat pochylenia wysokości, aby podnieść wysokość dźwięku o współczynnik:
500493.88=1.0124
I weź 500 Hz. Odpowiednia wartość pochyłości skoku wynosi:
round(8192+4096×12×log21.0124)=9065
Aby uzyskać 510 Hz, wartość pitch bend wynosiłaby:
round(8192+4096×12×log2510493.88)=10469
Zatem twoja sekwencja komunikatów MIDI dla 500, 510, 500 Hz wyglądałaby następująco:
- UWAGA 71
- PITCH BEND 9065
- ...
- PITCH BEND 10469
- ...
- PITCH BEND 9065
Możesz myśleć o numerze nuty MIDI jako „integralnej” części wysokości; a pitch bend jako redundantna „ułamkowa” część pitch.