C++ XCode 4.6上的VST-插件在加载时直接提供高输出

C++ XCode 4.6上的VST-插件在加载时直接提供高输出,c++,vst,C++,Vst,我正在用XCode 4.6编写一个Steinberg VST插件 我已经实现了一个正常工作的高通滤波器。现在我试着用二次函数做一些非线性失真。在我实现了下面的几行代码并将插件加载到主机中之后,我立即从插件中得到了一个输出——你什么也听不到,但是仪表已经升得很高了 我真的无法想象为什么。只有在播放声音时,才应调用进行数学运算的processReplacing函数,而不是在加载插件时。当我删除下面的几行代码时,一切都正常,听起来也不错,所以我认为这与插件代码的其余部分无关 问题发生在两台主机上,因此

我正在用XCode 4.6编写一个Steinberg VST插件

我已经实现了一个正常工作的高通滤波器。现在我试着用二次函数做一些非线性失真。在我实现了下面的几行代码并将插件加载到主机中之后,我立即从插件中得到了一个输出——你什么也听不到,但是仪表已经升得很高了

我真的无法想象为什么。只有在播放声音时,才应调用进行数学运算的processReplacing函数,而不是在加载插件时。当我删除下面的几行代码时,一切都正常,听起来也不错,所以我认为这与插件代码的其余部分无关

问题发生在两台主机上,因此可能不是VST错误。 有没有人经历过类似的问题

非常感谢,, 费边

void励磁机::processreplacement(浮点**输入,浮点**输出,VstInt32采样帧){
对于(int i=0;i

编辑:我向每个函数添加了日志文件输出,并且发生了永久调用processReplacing函数的情况,不仅是在播放打开时…而且是为什么?

您自己用编辑回答了这个问题。
processReplacing
被重复调用。这是VST规范的一部分


VST插件的目标是实时特效处理。不要混淆或误解为前瞻。所谓实时,我指的是在DAW录制时将插件插入频道并播放乐器。因此,您可以看到,为了减少延迟,主机总是向插件发送音频缓冲区(无论是否静音)。

谢谢!我以为processReplacing只会在DAW录制和/或播放时调用,而不会在DAW停止时调用。你知道当播放/录制停止时DAW会发送给插件什么吗?一个充满零的采样缓冲区?非常感谢,FabianYes,这是一个充满零的缓冲区。
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];