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

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


    Ссылки


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


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


    Поделиться публикацией

    Комментарии 15

      0
      USB-MIDI шнур по каким критериям не подошел? на ардуино тоже были преобразователи USB-MIDI
        0
        Ему тоже нужен USB Host.

        Или бывают шнуры, которые можно одной стороной воткнуть в синт по MIDI, другой стороной в синт по USB, и при этом стоят в пределах $20-30?
        Если есть это было бы идеально.

        Arduino я не стал смотреть, потому что если что-то колхозить, лучше это сделать на том, что лучше знаешь. Моя цель была не поиграться с устройством, а соединить два устройства.
          0
          Про хост лично мне из текста непонятно. Можно тогда блок-схему приложить и пытаться двигать это решение как коммерческий продукт.
          На рынке их есть пара штук, от зарубежных товарищей и тоже на малине.
            0
            Коммерческие продукты я видел от $70-100 (и снятые с производства), что кмк дороговато для такой штуки.

            По ссылкам в конце статьи в обсуждениях тоже про коммерческие продукты что-то говорится, но я эти ссылки уже нашел после того как собрал себе устройство на малине.
              0
              Это не так дорого, за кастом вещь, с низким спросом. Да и реальность весьма сурова, даже просто приличный корпус встанет в кругленькую сумму.
                0
                Мне Raspberry Pi первой модели (с корпусом) + пересылка по России + SDCard к ней встала в общей сумме в 1500р или около того.

                Проблема в том, что чем закидывать $100 в миди-роутер можно закинуть эти же $100 в покупку синта или контроллера, у которых есть нормальные MIDI In/Out.
                Т.е. целевая аудитория еще сильнее сужается.
                  +1
                  Это разовая удача, а не система. Мне Pi ZeroW обошелся в 1200р, без сд карт, только в корпусе а-ля два кусочка оргстекла.

                  Музыканты — это особая каста. Может оказаться любимая мастерклава на 2 октавы, такие как, правило, не умеют в MIDI, а только USB. Или еще какая ситуация. Многие не приемлют ПК, к примеру.
                  Кроме того, линукс — не реалтайм, а значит начнет прилетать «аларм, лагает задержки, играть невозможно!»
                    +1
                    вот по последнему предложению неистово плюсую.
                    миди+комп — это всегда была зубная боль, в силу разных микролагов и приоритетов прерываний трек мог уплыть запросто. Штайнберг даже в своем midex 8 использовал фирменную технологию чтобы синхронизировать выдачу мидисообщений с тактами композиции.
                    Попадались и другие решения, вроде тактирования миди-переходника отдельной звуковой дорожкой, которая (с ASIO) не имела такого разброса по таймингу какой был у обычных миди-переходников и плат.
                    Не знаю как там ALSA от расбиан, насколько она дружит с JACK чтобы понять есть там вероятность появления задержки или нет, этот момент интересен.
                      0
                      Ну это был эксперимент, который оказался удачным :-)
              0
              на классической ардуине это и не сделаешь, она не увидится ни как миди-устройство на как USB-host.
              в принципе можно сделать на STM32.
              смысла особого не вижу, в студии можно и через комп гонять (там и роутер не нужен, обычно пишется все потреково), а таскать на лайвы/репетиции тяжелые старинные синты, которые могут помереть в любой момент от старости — так себе идея.
              хорошо сгодится только для стримов с dawless jamming :)
                0
                Мне нужно было на Novation Xiosynth подать секвенцию с Arturia Keystep.
                Это, конечно, не последнее слово техники, но тяжелым старинным синтом я это не назову.

                Другой случай, который потенциально я вижу — подключить Launchpad к синту в качестве клавиатуры.

                Студию не рассматриваю, это отдельный мир со своими законами :-)
                  +1
                  Ради лола и фана делал из arduino micro, линейного потенциометра и сенсорной резистивной полоски девайс, определяющийся как USB-HID MIDI. Так же я нагуглил несколько примеров подключения через USB-host шилд к ардуине разных девайсов (например, мыши) и что-то мне думается, что если задаться целью, то и USB-HID MIDI устройство к ней можно подключить.
                    0
                    почитал, да, некоторые модели могут. просто у меня как-то отложилось что ардуина — это в первую очередь 8битный AVR+FTDI чип для связи по USB. А там где FTDI эмулируется самим контроллером — конечно можно и другой HID сделать.
              0
              Причем, по понятным причинам хочется все это сделать не используя компьютер.

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


              Вы уж определитесь, нужен компьютер или не нужен. :)
              Такие вещи, конечно, надо делать на микроконтроллере, если нужен хороший реалтайм.
                +1
                Есть и готовый продукт — USB Host Controller Board за 15 фунтов (без пересылки), но они-же продают и сам PIC24FJ64GB002 (£5.40) с соответствуюшим фирмваром. Правда, они сами пишут, что МИДИ хост не умеет работать с усб хабом — «Some Complex MIDI devices use a built-in USB Hub. These MIDI devices are not supported and will NOT work with our USB Host Board».

                Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                Самое читаемое