В основе MIDI лежит представление музыки в виде отдельных нотных событий, каждое из которых имеет статическую высоту звука. Это идеально подходит для представления музыки, исполняемой на клавишных инструментах. Вы можете преобразовать любую частоту, соответствующую ноте на темперированной шкале, в номер ноты MIDI, используя:
69+12×log2frequency440
Предполагается, что MIDI-приемник откалиброван на А4 = 440 Гц.
Это представление хорошо для фортепианной музыки, но проблема заключается в том, как представлять высоты звука, которые не отображаются в темперированном масштабе (не западная музыка, не музыкальные звуки), и как представлять изменения высоты звука в течение длительности ноты (глиссандо, вибрато).
Это делается в MIDI с помощью «сообщений изменения высоты звука», которые инструктируют синтезатор смещать высоту звучания текущей воспроизводимой ноты на небольшой интервал. Большинство синтезаторов калибруются по умолчанию для +/- 2 полутонов по всему диапазону сообщений об изменении высоты звука (0 .. 16383). 8192 соответствует отсутствию изгиба основного тона - излучаемый шаг в точности соответствует значению ноты. Отображение между значением основного тона и коэффициентом сдвига частоты определяется как:
femitted_notefnote_message=2pitchbend−81924096×12
Таким образом, вы можете получить частоту ноты, которую играет синтезатор, по следующей формуле:
440×2note−6912.0+pitchbend−81924096×12
Где note - это 7-битный номер ноты MIDI последнего полученного сообщения Note On ; и pitchbend является 14- битным значением последнего принятого сообщения Pitch Bend . Синтезатор запускается с регистром изменения высоты тона, установленным на 8192, и это значение также сбрасывается во время приема сообщения «Сброс всех контроллеров».
Давайте возьмем следующий пример. Вы хотите выразить трель флейты со следующей траекторией частоты: 500 Гц, 510 Гц, 500 Гц, как сообщения MIDI.
Номер основной ноты:
round(69+12×log2(500/440))=71
Таким образом, вы отправляете сообщение «note on» с примечанием #, равным 71. Это эквивалентно шагу:
440×2(71−69)/12=493.88
Который является ближайшим шагом по умеренной шкале. Вам необходимо отправить сообщение об изменении высоты тона, чтобы увеличить высоту тона в:
500493.88=1.0124
И получи свои 500 Гц. Соответствующее значение высоты тона:
round(8192+4096×12×log21.0124)=9065
Чтобы получить 510 Гц, значение высоты тона будет:
round(8192+4096×12×log2510493.88)=10469
Таким образом, ваша последовательность MIDI-сообщений для 500, 510, 500 Гц будет:
- ПРИМЕЧАНИЕ 71
- PITCH BEND 9065
- ...
- PITCH BEND 10469
- ...
- PITCH BEND 9065
Вы можете думать о номере ноты MIDI как о «неотъемлемой» части высоты тона; и изгиб основного тона в качестве избыточной «дробной» части основного тона.