...

воскресенье, 24 марта 2019 г.

MIDI-router на Raspberry Pi

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

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

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

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

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

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

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


ALSA Midi

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

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

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

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

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


aconnect

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

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

# Вывести список MIDI-устройств, имеющихся в системе
aconnect -l

# Пересылать весь вывод с Arturia Keystep на Xio
aconnect 'Arturia KeyStep 32' 'Xio'

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


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

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


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

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


Ссылки

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

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


Let's block ads! (Why?)

Комментариев нет:

Отправить комментарий