В дополнение к получению MIDI-событий мы также можем отправлять MIDI-события для запуска и управления внешними аппаратными синтезаторами, клавиатурами и другими устройствами. Sonic Pi предоставляет полный набор функций для отправки различных MIDI-сообщений, таких как:
midi_note_onmidi_note_offmidi_ccmidi_pitch_bendmidi_clock_tickТакже есть много других поддерживаемых MIDI-сообщений - ознакомьтесь с документацией API для остальных функций, начинающихся с midi_.
Чтобы отправить MIDI-сообщение на внешнее устройство, мы должны сначала подключить его. Ознакомьтесь с подразделом «Подключение MIDI-контроллера» в разделе 11.1 для получения более подробной информации. Обратите внимание, что если вы используете USB, подключение к устройству, на которое вы отправляете сообщение (а не получаете от него), является той же процедурой. Однако, если вы используете классические DIN-разъемы, убедитесь, что вы подключены к MIDI-выходу вашего компьютера. Вы должны увидеть ваше MIDI-устройство в списке в панели настроек.
Многие midi_ * функции работают так же, как play, sample и synth, так как они отправляют сообщение в текущее (логическое) время. Например, чтобы распределить вызовы функций midi_ * , вам нужно использовать sleep, как вы это делали с play. Давайте взглянем:
midi_note_on :e3, 50
Это отправит событие MIDI-note on на подключенное MIDI-устройство со скоростью нажатия клавиши 50. (Обратите внимание, что Sonic Pi автоматически преобразует ноты в форме : e3 в соответствующий им номер MIDI, например, 52)
Если подключенное MIDI-устройство является синтезатором, вы должны услышать, как он воспроизводит ноту. Чтобы отключить ноту, используйте midi_note_off:
midi_note_off :e3
По умолчанию Sonic Pi отправляет каждое MIDI-сообщение на все подключенные устройства на всех MIDI-каналах. Это облегчает работу с одним подключенным устройством без необходимости что-либо настраивать. Однако иногда MIDI-устройство будет обрабатывать MIDI-каналы особым образом, к примеру, если каждая нота имеет отдельный канал, или же если вы подключили более одного MIDI-устройства одновременно. В более сложных настройках вашего оборудования, вы можете пожелать иметь больше возможности выбирать относительно того, какое MIDI-устройство будет получает то или иное сообщение и по какому каналу.
Посредством опции port:и имени устройства, каким оно отображается в настройках, мы можем указать, к какому устройству желаем обратиться:
midi_note_on :e3, port: "moog_minitaur"
Мы также можем указать канал для отправки посредством опции channel: (используя значение в диапазоне 1-16):
midi_note_on :e3, channel: 3
Конечно, мы также можем задействовать обе опции одновременно для отправки информации на конкретное устройство по определенному каналу:
midi_note_on :e3, port: "moog_minitaur", channel: 5
Наконец, действительно забавная вещь - подключить аудиовыход вашего MIDI-синтезатора к одному из аудиовходов вашей звуковой карты. Тогда вы сможете управлять синтезатором с помощью кода посредством функций midi_ *, а также манипулировать звуком с помощью live_audio и FX:
with_fx :reverb, room: 1 do
live_audio :moog
end
live_loop :moog_trigger do
use_real_time
midi (octs :e1, 3).tick, sustain: 0.1
sleep 0.125
end
(Функция midi доступна в виде удобных сокращений для отправки событий note on и note off одной командой. Для получения дополнительной информации ознакомьтесь с документацией).