我正在用XCode 4.6编写一个Steinberg VST插件。
我已经实现了一个可以正常工作的Highpass-filter。现在我试着用一个二次函数来做一些非线性失真。在我实现了下面的几行代码并将插件加载到主机中之后,我立即得到了插件的输出--你什么也听不到,但是计时器已经很高了。
我真的不知道为什么。发生数学运算的processReplacing函数应该只在播放声音时调用,而不是在加载插件时调用。当我删除下面的几行代码时,一切都是正常的,听起来也是正确的,所以我假设它与插件代码的其余部分没有任何关系。
这个问题发生在两台主机上,所以可能不是VST-bug。有没有人遇到过类似的问题?
非常感谢,法比安
void Exciter::processReplacing(float** inputs, float** outputs, VstInt32 sampleFrames){
for(int i = 0; i < sampleFrames; i++) {
tempsample = inputs[0][i];
//Exciter - Transformation in positive region, quadratic distortion and backscaling
tempsample = tempsample + 1.0f;
tempsample = powf(tempsample, 2.0f);
tempsample = tempsample / 2.0f;
tempsample -= 1.0f;
//Mix-Knob: Dry/Wet ------------------------------------------------
outputs[0][i] = mix*(tempsample) + (1-mix)*inputs[0][i];编辑:我添加了日志文件输出到每个函数,它发生了,processReplacing函数被永久调用,而不仅仅是当播放打开时……但是为什么呢?
发布于 2013-05-24 01:48:11
你用你的编辑几乎自己回答了这个问题。重复调用processReplacing。这是VST规范的一部分。
VST插件面向实时效果处理。不要将其混淆或误解为先行处理。所谓实时,我指的是将插件插入到通道中,并在DAW录制时播放乐器。因此,您可以看到,为了减少延迟,主机总是向插件发送音频缓冲区(无论是否处于静默状态)。
https://stackoverflow.com/questions/16719881
复制相似问题