Как бы я пошел программически взаимодействовать с плагинами VST (i) для синтеза звука?

StackOverflow https://stackoverflow.com/questions/3122709

Вопрос

Возьмите, например, VSTI Тройник, на Tweakbench. При нагрузке на любой хост VST на рынке он позволяет хосту отправлять (предположительно MIDI) сигнал VSTI. Затем VSTI будет обработать этот сигнал и вывод синтезированного звука, как создается программный инструмент в VSTI.

Например, посылать A4 (MIDI-обратите внимание, я верю) к VSTI, заставит его синтезировать выше средний C. Он отправляет аудиоданные данные обратно в хосту VST, который затем может либо играть в моих динамиках или сохранить его к .wav или какой-то другой формат аудиофайла.

Скажем, у меня есть Тройник, И я пытаюсь написать программу на своем выборе, которые могут взаимодействовать с VSTI, отправив в ноту A4, чтобы быть синтезированным и автоматически сохранять его в файл в системе?

В конце концов, я хотел бы иметь возможность разбирать целый однолетний MIDI-файл (используя установленные, стабильные библиотеки, уже доступные для этой цели) и отправьте его в VSTI на «Render» / синтезировать его в аудиофайл.

Как бы я пошел об этом, а в какой язык Должен ли я посмотреть, чтобы построить основные рамки?

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

Тем не менее, я просто пытаюсь понять в основном Как работает API VSTI. Отказ (Я понял, что этот вопрос очень сильно связан с вопросом построения VST-хоста в первую очередь, хотя и тот, который может сохранять только выходы VST, чтобы подать и не воспроизводить их обратно, а также с значительно меньшим объемом)

Заранее спасибо за любую помощь =)

Это было полезно?

Решение

Ну, так как вы спросили, идеальный язык для проекта, как будто это будет C ++. Хотя есть обертки для языков более высокого уровня, такие как Java & .Net для VST SDK, я не мог найти один для Ruby (хотя я нашел этот довольно классный проект, который позволяет вам Программа плагинов VST в Ruby). Таким образом, вы будете застрять, выполняя определенную степень интеграции C / C ++ самостоятельно.

Тем не менее, вы имеете в основном два варианта:

  1. Напишите VST-хост в C ++ и запустите его как отдельный процесс из Ruby.
  2. Интегрируйте свой код RUBY непосредственно на VST SDK и загрузите плагин DLL / пучки напрямую из вашего кода. Это, наверное, уборщик, но сложный способ достичь вашей цели.

Я записал Учебное пособие в размере VST В моем блоге некоторое время назад вы можете найти полезное в любом случае. Он подробно описывает, как вы открываете и общаетесь с плагинами VST как на Mac OSX, так и в Windows. Как только вы получили свой хост, чтобы загрузить плагины, вам нужно иметь возможность либо отправлять мероприятия MIDI непосредственно на плагин, либо считывая их из файла или некоторых типов связи между вашим RUBY-кодом и VST-хостом (т. Е. названная труба, розетка, файл и т. Д.). Если вы не знакомы с протоколом MIDI, проверьте эти ссылки:

Как вы уже выяснили, VST принципиально является протокол на основе блоков. Вы запрашиваете небольшие блоки аудиоданных данных из плагина, и вы отправляете любые мероприятия MIDI к плагину прямо до того, как он обрабатывает этот соответствующий блок. Быть уверенным нет игнорировать поле MIDI DELTA; Это гарантирует, что плагин начинает обрабатывать мероприятие MIDI непосредственно на желаемом образце. В противном случае плагин будет звучать немного без темпов, особенно в случае приборов.

VST SDK также основан вокруг блоков с плавающей точкой, поэтому любые данные, которые вы возвращаете, будут содержать отдельных образцов в диапазоне {-1.0 .. 1.0}. В зависимости от желаемого формата вывода вам может потребоваться преобразовать их в какой-то другой формат. К счастью, кажется, что Рубиновая привязка для аудиофиофильной библиотеки, Таким образом, вы можете отправить свой выход в это, чтобы сгенерировать правильный файл AIFF / WAV.

Во всем, это будет справедливая работа, чтобы добраться до желаемой цели, но это не невозможно. Удачи!

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top