В дополнение к получению MIDI-событий мы также можем отправлять MIDI-события для запуска и управления внешними аппаратными синтезаторами, клавиатурами и другими устройствами. Sonic Pi предоставляет полный набор функций для отправки различных MIDI-сообщений, таких как:
midi_note_on
midi_note_off
midi_cc
midi_pitch_bend
midi_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 одной командой. Для получения дополнительной информации ознакомьтесь с документацией).