Хабрахабр

MIDI-router на Raspberry Pi

Хочу рассказать о том, как решить проблему, которая наверняка знакома любителям аппаратных синтезаторов.

Причем, по понятным причинам хочется все это сделать не используя компьютер. Что делать, если хочется состыковать MIDI-контроллер и синтезатор, но у одного из них есть только USB разъем и нет MIDI?

Я несколько раз перерывал интернет в поисках устройства для этого, но так ничего и не нашел — кроме пары ссылок на пару малотиражных устройств за немалые деньги, которые уже сняты с производства.

В какой-то момент меня осенило: можно же взять Raspberry Pi и сделать все на нем — это самый настоящий компьютер, а на нем такие вещи делаются легко.

Он, наверное, будет слабоват для полноценной обработки звука, но поток сообщений MIDI уж должен прокачать.

[К слову, существует звуковой эффект процессор для Raspberry Pi, но он требует последней модели Raspberry Pi, которая намного дороже, плюс дополнительного шилда, который тоже недешев, и я решил не заморачиваться].

Обзавелся Raspberry Pi самой первой модели и за пару вечеров собрал рабочий прототип. Сказано — сделано. В двух словах как он работает.

ALSA Midi

Сперва я планировал взять PureData и написать для него несложный патч, который будет перекладывать midi-сообщения из одного порта в другой.

Но когда я начал заводить в нем MIDI на линуксе я нашел гораздо более простой подход.

Она поддерживает работу как со звуковыми потоками, так и с MIDI. В Linux есть стандартная система звукового ввода-вывода — ALSA.

Но это же именно то, что нам нужно для решения этой задачи! Для того, чтобы какая-то программа могла принимать MIDI-сообщениям через ALSA сперва нужно ее подключить к источнику этих сообщений. Недолго думая я выкинул PureData и сделал все родными средствами ALSA.

Вот что получилось в итоге.

aconnect

Нас интересует команда aconnect, которая как раз производит подключение-отключение портов. При подключении MIDI-устройства в систему оно появляется в устройствах ALSA и с ним можно проводить разные операции стандартными командами. Подробную документацию на нее можно прочитать здесь.

Реально же нам нужны всего две операции: вывести список имеющихся устройств и подключить одно устройство к другому:

# Вывести список MIDI-устройств, имеющихся в системе
aconnect -l # Пересылать весь вывод с Arturia Keystep на Xio
aconnect 'Arturia KeyStep 32' 'Xio'

Я обернул эти команды systemd-скриптами для автостарта и настроил, чтобы запускались постоянно в цикле, можно посмотреть как я это сделал здесь.

Альтернативы

Если нужно все же как-то обрабатывать MIDI-поток до пересылки его на выход, можно воспользоваться несколькими вариантами:

  • Каким-то из языков обработки звука:
  • Mididings

Если знаете еще варианты — присылайте.

Ссылки

Когда я в прошлый раз изучал этот вопрос почему-то мне не удалось ничего найти.

На этот раз нашлось довольно много всего, выложу ссылки сюда, чтобы вам не повторять мой путь, если возникнет такая же проблема.

Теги
Показать больше

Похожие статьи

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»
Закрыть