MIDI Out

В дополнение к получению MIDI-событий мы также можем отправлять MIDI-события для запуска и управления внешними аппаратными синтезаторами, клавиатурами и другими устройствами. Sonic Pi предоставляет полный набор функций для отправки различных MIDI-сообщений, таких как:

  1. Note on - midi_note_on
  2. Note off - midi_note_off
  3. Control change - midi_cc
  4. Pitch bend - midi_pitch_bend
  5. Clock ticks - midi_clock_tick

Также есть много других поддерживаемых MIDI-сообщений - ознакомьтесь с документацией API для остальных функций, начинающихся с midi_.

Подсоединение MIDI-устройств

Чтобы отправить MIDI-сообщение на внешнее устройство, мы должны сначала подключить его. Ознакомьтесь с подразделом «Подключение MIDI-контроллера» в разделе 11.1 для получения более подробной информации. Обратите внимание, что если вы используете USB, подключение к устройству, на которое вы отправляете сообщение (а не получаете от него), является той же процедурой. Однако, если вы используете классические DIN-разъемы, убедитесь, что вы подключены к MIDI-выходу вашего компьютера. Вы должны увидеть ваше 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

Выбор MIDI-устройства

По умолчанию 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-синтезатора к одному из аудиовходов вашей звуковой карты. Тогда вы сможете управлять синтезатором с помощью кода посредством функций 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 одной командой. Для получения дополнительной информации ознакомьтесь с документацией).