Виртуальный MIDI-кабель

Виртуальный MIDI — кабель может быть полезен, если нужно без лишних затей управлять каким-либо приложением, поддерживающим MIDI-триггеры для выполнения внутренних команд. Представим себе, что у нас есть входной порт MIDI-in, в который можно неким программным образом посылать сигналы. Тогда легко сделать, например, пульт управления через Bluetooth записью звука, скажем в Adobe Audition. Уровень экзотичности вариантов использования зависит только от фантазии разработчика и насущных потребностей.

Небольшое исследование показало, что для Windows 7, пожалуй единственным вариантом является ipMIDI , и бесплатная версия LoopBe1, которой для вышеуказанных целей вполне достаточно — ограничение бесплатной версии в том, что создается только один виртуальный MIDI-порт.

После установки программы в системе появляется один выходной порт MIDI LoopBe Internal и соответствующий ему входной. Используя .NET библиотеку NAudio можно подавать сигналы на выходной порт LoopBe, которые в свою очередь будут переданы на виртуальный порт MIDI-in. Для Adobe Audition MIDI триггеры настраиваются с помощью команды Edit-Keyboard shortcuts and MIDI triggers. На скриншоте ниже показана привязка ноты D3 к действию остановки/продолжения воспроизведения звука.

Задержка звука и ее минимизация

Копипаста с сайта DrumSpeech.com
На сайте компании CEntrance выложен документ Latency Explanation в котором описан интересный опыт. На специальном оборудовании меняли задержку аудиотракта, варьируя от 0 до 50 мс. В качестве добровольцев были приглашены два музыканта: бас-гитарист и DJ-электронщик (крутящий рукой диски). При задержке 50 мс ни одни из них не смог адекватно играть под тестовый драм-луп. Стали понижать до тех пор пока кто-нибудь не переставал замечать задержку. Проведя серию раздельных опытов для статистической достоверности установили, что DJ замечает задержку начиная с 12 мс, а басист с 9 мс. Разумеется, все люди индивидуальны но этот опыт может дать некое представление о том какая задержка тракта является максимально допустимой. Теперь рассмотрим всю цепочку временных промежутков обратной связи барабанщика и его ударов в случае применения компьютера:

  1. Промежуток между срабатыванием триггера и фактическим началом передачи миди-сигнала по кабелю. К сожалению, у меня нет данных о величине этой задержки в модулях, а замерить время отклика без специального оборудования вряд ли удастся. Остается надеяться что в «хороших» модулях она мала и не слишком влияет на общий итог. Однако в сети встречаются ужастики о задержках некоторых клавиатур, доходящие до десятков миллисекунд! Были случаи обращения в техподдержку производителя карт E-MU с жалобой по поводу неудовлетворительной скорости их драйверов, в то время причина, как оказалось, была в самом синтезаторе. За неимением точных сведений эту задержку я учитывать не буду, но имейте ввиду что она возможна.
  2. Время передачи миди-сигнала по кабелю. Здесь жесткий стандарт. Интерфейс последовательный, скорость передачи данных 31,2 кбит/c. С учетом того, что логический байт равняется 10 техническим битам (1-старт, 8-данные, 1-стоп) и для передачи ноты требуется 3 байта (код сообщения, pitch, velocity), получается что задержка удара в кабеле составляет около 1 мс (31200 / 30 = 1040).
  3. Задержка передачи миди сообщения хост-приложению (Sonar, Cubase, etc.). Как правило для PCI-карт имеющих собственный midi-вход это очень небольшая величина не требующая учета, но для внешних устройств уже может принимать какое-то значение (от 2 мс и выше, в зависимости от переходника и настроек контроллера материнской платы).
  4. Задержка ASIO. Необходима для работы программных синтезаторов, таких как BFD или EZdrummer. Она зависит от выбора карты, используемых драйверов и настроек хоста. Косвенно зависит и от мощности компьютера. В профессиональных картах обычно стартует с 2 мс и это хороший выбор, однако если сэмплер требовательный а процессор слабый то может потребоваться ее увеличить до величины не приводящей к хрипам или зависаниям. Некоторые драйвера разрешают устанавливать задержку ниже 2 мс и даже ниже 1 мс, однако на практике столь низкие значения в большинстве случаев непригодны к использованию (хотя попробовать можно). USB и Firewire дают более высокую задержку, связанную с расходами на интерфейс. Эмпирически установлено что прибавляется от 2 мс и выше. Если учесть повышенную нагрузку на CPU, то реально при той же нагрузке от VSTi буфер придется сместить на один-два значения вверх (вместо 2 мс – 4 мс, вместо 4 мс – 6 мс, и т.д.) Читать далее Задержка звука и ее минимизация