LINUX.ORG.RU

VST2 vs VST3

 


0

1

Озадачили на работе разработкой VST-плагина. Увидел, что уже очень давно (с 2008) есть VST3 - сел разбираться с ним. Наткнулся на следующий неприятный момент: обработка данных в плагине происходит посредством вызова метода process, в который передают входной и выходной буфер, но что делать, если необходимо накапливать данные, прежде чем вернуть какой-то результат?

Вроде как нашел возможность асинхронной обработки в VST2 плагинах, но в VST3 ничего подобного не вижу. Погуглив, не понял ситуацию с VST3 - они что, никому не сдались и стандартом так и остался VST2.4?

Если кто-нибудь в теме, подскажите: VST3 - нужен или нет.

★★

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

m0rph ★★★★★
()
Ответ на: комментарий от m0rph

А что если я обрабатываю данные окном с некоторым шагом? Мне могут дать буфер размером простое число вместо степени двойки - и все посыпется...

kulti ★★
() автор топика
Ответ на: комментарий от kulti

Заведи дополнительные внутренние кольцевые буферы на вход и на выход. Пока входной не наполнится на размер твоего окна клади в выходной нули, потом начинай складывать туда актуальные данные.

m0rph ★★★★★
()
Ответ на: комментарий от m0rph

Предположим, что я обрабатываю данные окном 128 с шагом 40. Мне дают во входном буфере 130 - я обработал только 128, а два отложил в буфер. Как host узнает, что в последних 2-х байтах шлак?

Для VST2 нашел возможность асинхронной работы плагина со своим собственным буфером. Для VST3 ничего подобного не вижу...

kulti ★★
() автор топика
Ответ на: комментарий от kulti

Ты обработал 128, положил их в выходной буфер (2 у тебя осталось во входном буфере) и ждешь следующую порцию данных. По приходу данных (еще 130) ты из них берешь 126 + 2 у тебя уже есть, обрабатываешь их и на выход отдаешь 130 (126 остается в выходном буфере до следующего запроса). Как-то так.

m0rph ★★★★★
()
Ответ на: комментарий от m0rph

обработка данных в плагине происходит посредством вызова метода process, в который передают входной и выходной буфер

Т.е. мне дали 130 и ждут наружу тоже 130 и никакой возможности сообщить, что их меньше нет.

В общем, я уже подумываю забить на VST3 и попробовать VST2. В связи с этим и возник вопрос, на сколько VST3 нужен. (Судя по всему популярностью он не пользуется)

kulti ★★
() автор топика
Ответ на: комментарий от kulti

Т.е. мне дали 130 и ждут наружу тоже 130 и никакой возможности сообщить, что их меньше нет.

Все что я описывал выше - простая буферизация. Работа ведется порциями, назовем их кадрами. Тебе дают на вход кадр информации и ожидают кадр на выход. Ты обрабатываешь входную информацию и даешь на выход кадры с нулями до тех пор, пока накопленной обработанной информации у тебя меньше, чем размер кадра. После этого у тебя уже нормальные данные пойдут непрерывно.

m0rph ★★★★★
()
Ответ на: комментарий от m0rph

Попробую сформулировать еще раз, но по другому.

Эта схема работает до тех пор, пока во внутреннем буфере достаточно данных, чтобы писать в выходной буфер(кадр).

Обрабатываем данные окном 128 и шагом 40.

Если кадры одинакового размера и они больше размера шага, то вроде все хорошо.

А вот если кадр плавающий, и тем более меньше размера шага может быть, то все станет плохо.

Никаких гарантий на то, в каких объемах данные должны поставляться, в документации я не нашел. Только максимальное значение можно выставить. Странные они какие-то...

kulti ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.