Плагин VST: как реализовать & quot; lookahead & quot; буфер?

Моя цель — написать VST плагин, который должен работать в прослушивание а также дерзость, так что я планирую перейти с VST v2.x. Я новичок в разработке VST, но я изучил примеры Вот. И до сих пор большинство вещей выглядит довольно просто. Основная «магия», кажется, происходит в процесс() или же processReplace () функция. Не совсем уверен, какова польза / недостаток этих двух функций, хотя.

Теперь «проблема» в том, что моему фильтру понадобится буфер «Lookahead» на несколько секунд (возможно, дольше, зависит от настройки). Это означает, что в начале процесса мне нужно будет заполнить внутренний буфер. И, в конце процесса, мне нужно будет очистить отложенные образцы из внутренний буфер.

Я кодирую фильтры для SoX (Sound eXchange) и их API на первый взгляд очень похожи на VST. Что вызвано процесс() в VST, называется течь() в SoX API. Но есть одно важное отличие: течь() Функция в SoX API получает в качестве параметров количество сэмплов, доступных в вход буфер, а также количество образцов, которые вписываются в выход буфер. течь() Затем функция возвращает количество образцов, взятых из вход буфер, а также количество образцов он записал в выход буфер. Это означает, что мне не нужно обрабатывать все доступные входные выборки при каждом вызове. И один вызов может вернуть меньше выборок, чем потреблял. Следовательно, в начале процесса я могу потреблять все вход образцы, но возвращение нет выход образцы вообще! Таким образом, я могу заполнить свой буфер «lookahead» в начале. Наконец, SoX API имеет слива () функция, которая будет вызываться основным приложением в конце процесса, чтобы очистить ожидающие выборки от фильтра внутренний буфер.

Из того, что я понимаю о VST, процесс() Функция имеет только один параметр для указания количества вход а также выход образцы. И это никак не ограничивает количество выходных выборок. По-видимому, процесс() предполагает простое поведение «N сэмплов, N сэмплов». Это правильно ???

Если так, то каков рекомендуемый способ заполнить мой внутренний буфер буфера в VST? И каков рекомендуемый способ смыть мой внутренний буфер в конце в VST?


Кстати, я знаю, что я мог бы, конечно, заполнить свой внутренний буфер, возвращая только «молчание» в первые несколько процесс() звонки, в начале процесса. Но это задержит / сместит весь аудио файл, который не в розыске! Также это делает не решить проблему, как очистить внутренний буфер в конце процесса.

Спасибо за любые советы! 😉

3

Решение

Ладно, думаю, я нашел решение. Eсть setInitialDelay () функция в VST. Так что я думаю, мне нужно будет самому задержать вывод, а затем компенсировать его, установив правильное значение setInitialDelay ().

[ОБНОВИТЬ]

Кажется, это хорошо работает с прослушивание, но не с дерзость. Похоже дерзость игнорирует значение, установленное setInitialDelay (), так что аудио заканчивается задержкой. Есть ли обходной путь для дерзость ???

0

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector