Возьмите, например, 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 в файл и не воспроизвести их, и со значительно меньшим объемом),
Итак, раз уж вы спросили, идеальным языком для такого проекта будет C ++. Хотя существуют оболочки для языков более высокого уровня, таких как Java и .NET для VST SDK, я не смог найти ни одной для Ruby (хотя я нашел этот довольно крутой проект, который позволяет программировать плагины VST на Ruby ]). Так что вам придется самостоятельно выполнять некоторую степень интеграции C / C ++.
Тем не менее, у вас есть два основных варианта:
Я написал руководство по программированию хоста VST в своем блоге некоторое время назад, которое вы можете найти полезным в любом случае. В нем подробно описано, как вы открываете плагины VST и общаетесь с ними как в Mac OSX, так и в Windows. После того, как вы получили свой хост для загрузки плагинов, вам необходимо иметь возможность отправлять MIDI-события непосредственно в плагин, либо считывая их из файла, либо посредством какого-либо типа связи между вашим кодом Ruby и хостом VST (т. Е. именованный канал, сокет, файл и т. д.). Если вы не знакомы с протоколом MIDI, просмотрите эти ссылки:
Как вы, возможно, уже догадались, VST по сути является блочным протоколом.Вы запрашиваете у плагина небольшие блоки аудиоданных и отправляете любые MIDI-события в плагин прямо перед тем, как он обработает соответствующий блок. Убедитесь, что , а не игнорируют поле дельты MIDI; это гарантирует, что плагин начнет обработку MIDI-события непосредственно на желаемом сэмпле. В противном случае плагин будет звучать немного не в темпе, особенно в случае инструментов.
VST SDK также основан на блоках с плавающей запятой, поэтому любые данные, которые вы получите, будут содержать отдельные образцы в диапазоне {-1.0 .. 1.0}. В зависимости от желаемого формата вывода вам может потребоваться преобразовать их в какой-либо другой формат. К счастью, для библиотеки аудиофайлов , похоже, существует привязка Ruby, так что вы можете отправить свой вывод в нее, чтобы сгенерировать правильный файл AIFF / WAV.
В целом, для достижения желаемой конечной цели потребуется немало усилий, но это ни в коем случае не невозможно. Удачи!