Как бы я начал программно взаимодействовать с VST (i) плагинами для синтеза аудио? - PullRequest
10 голосов
/ 26 июня 2010

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

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

Давайтескажем, у меня есть Triforce , и я пытаюсь написать программу на моем языке по выбору, которая могла бы взаимодействовать с VSTi, отправив записку А4 для синтеза и автоматически сохранив ее в файле в системе?

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

Как мне поступить, и на на каком языке мне следует искать для создания базовой платформы?

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

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

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

1 Ответ

8 голосов
/ 26 июня 2010

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

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

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

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

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

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

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

...