- PVSM.RU - https://www.pvsm.ru -
Хочу рассказать о том, как решить проблему, которая наверняка знакома любителям аппаратных синтезаторов.
Что делать, если хочется состыковать MIDI-контроллер и синтезатор, но у одного из них есть только USB разъем и нет MIDI? Причем, по понятным причинам хочется все это сделать не используя компьютер.
Я несколько раз перерывал интернет в поисках устройства для этого, но так ничего и не нашел — кроме пары ссылок на пару малотиражных устройств за немалые деньги, которые уже сняты с производства.
В какой-то момент меня осенило: можно же взять Raspberry Pi и сделать все на нем — это самый настоящий компьютер, а на нем такие вещи делаются легко.
Он, наверное, будет слабоват для полноценной обработки звука, но поток сообщений MIDI уж должен прокачать.
[К слову, существует звуковой эффект процессор для Raspberry Pi [1], но он требует последней модели Raspberry Pi, которая намного дороже, плюс дополнительного шилда, который тоже недешев, и я решил не заморачиваться].
Сказано — сделано. Обзавелся Raspberry Pi самой первой модели и за пару вечеров собрал рабочий прототип. В двух словах как он работает.
Сперва я планировал взять PureData [2] и написать для него несложный патч, который будет перекладывать midi-сообщения из одного порта в другой.
Но когда я начал заводить в нем MIDI на линуксе я нашел гораздо более простой подход.
В Linux есть стандартная система звукового ввода-вывода — ALSA. Она поддерживает работу как со звуковыми потоками, так и с MIDI.
Для того, чтобы какая-то программа могла принимать MIDI-сообщениям через ALSA сперва нужно ее подключить к источнику этих сообщений. Но это же именно то, что нам нужно для решения этой задачи! Недолго думая я выкинул PureData и сделал все родными средствами ALSA.
Вот что получилось в итоге.
При подключении MIDI-устройства в систему оно появляется в устройствах ALSA и с ним можно проводить разные операции стандартными командами. Нас интересует команда aconnect
, которая как раз производит подключение-отключение портов. Подробную документацию на нее можно прочитать здесь [3].
Реально же нам нужны всего две операции: вывести список имеющихся устройств и подключить одно устройство к другому:
# Вывести список MIDI-устройств, имеющихся в системе
aconnect -l
# Пересылать весь вывод с Arturia Keystep на Xio
aconnect 'Arturia KeyStep 32' 'Xio'
Я обернул эти команды systemd-скриптами для автостарта и настроил, чтобы запускались постоянно в цикле, можно посмотреть как я это сделал здесь [4].
Если нужно все же как-то обрабатывать MIDI-поток до пересылки его на выход, можно воспользоваться несколькими вариантами:
Если знаете еще варианты — присылайте.
Когда я в прошлый раз изучал этот вопрос почему-то мне не удалось ничего найти.
На этот раз нашлось довольно много всего, выложу ссылки сюда, чтобы вам не повторять мой путь, если возникнет такая же проблема.
Автор: erthad
Источник [13]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/raspberry-pi/312541
Ссылки в тексте:
[1] процессор для Raspberry Pi: https://blokas.io/modep
[2] PureData: http://puredata.info/
[3] прочитать здесь: https://linux.die.net/man/1/aconnect
[4] здесь: https://github.com/timurb/pimidirouter
[5] PureData: http://puredata.info
[6] SuperCollider: https://supercollider.github.io/
[7] ChucK: http://chuck.cs.princeton.edu/
[8] Mididings: http://das.nasophon.de/mididings/
[9] https://www.youtube.com/watch?v=neXswJJcatc: https://www.youtube.com/watch?v=neXswJJcatc
[10] http://forums.synthstrom.com/discussion/1271/usb-host-midi-interface-with-raspberry-zero: http://forums.synthstrom.com/discussion/1271/usb-host-midi-interface-with-raspberry-zero
[11] https://github.com/nuc/Midi-Connector: https://github.com/nuc/Midi-Connector
[12] https://stimresp.wordpress.com/2016/02/08/using-a-raspberry-pi-as-usb-midi-host/: https://stimresp.wordpress.com/2016/02/08/using-a-raspberry-pi-as-usb-midi-host/
[13] Источник: https://habr.com/ru/post/440294/?utm_campaign=440294
Нажмите здесь для печати.