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

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

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

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

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

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

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

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

10
задан Cœur 16 November 2019 в 12:01
поделиться

1 ответ

Итак, раз уж вы спросили, идеальным языком для такого проекта будет 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.

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

8
ответ дан 4 December 2019 в 02:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: