湿/干控制在果汁卷积混响插件

Wet/dry control in Juce convolution reverb plugin

本文关键字:卷积 插件 果汁 控制      更新时间:2023-10-16

我正在为大学创建一个卷积混响插件,我已经设法获得一个简单的插件工作,其中输出是通过脉冲响应的输入。我想知道我如何改变代码,使一个湿/干参数。

我为这个添加了一个"blend"参数:

const float defaultBlend = 0.5f;
addParameter(blendParam = new FloatParameter (defaultBlend, "Blend"));

然后初始化卷积器:

convolver.init (512, buffer.getReadPointer(0), buffer.getNumSamples());

和这里处理的

 for (int channel = 0; channel < getNumInputChannels(); ++channel)
    {
        float* channelData = buffer.getWritePointer (channel);
        const float* inputData = buffer.getReadPointer(channel);
        for (int i = 0; i < buffer.getNumSamples(); ++i)
            channelData[i] = inputData[i] * level / 20;
        //convolver stuff
        convolver.process (inputData, channelData, buffer.getNumSamples());
    }

任何想法?

考虑您的问题,您似乎正在寻找以下属性:

  1. 给定0.0fblendParam,只需传递音频不变。
  2. 给定blendParam1.0f,将音频处理到最大容量
  3. 给定blendParam0.5f,将一半未处理的音频与处理过的音频混合。

我建议你在继续之前写一些以上的单元测试。

下面的代码似乎满足这些属性:
channelData[i] = level * (inputData[i] * (1.0f - blendValue) + convolvedData[i] * blendValue);
  • convolvedData是你"完全处理"的数据。
  • blendValueblendParam.getValue()
  • 的缓存值。

你可以通过调用convolver.process获得convolvedData,就像你现在做的那样,用一个单独的数组convolvedData作为你的输出参数。

注意,这并没有考虑到将结果数字夹入范围[-1.0f, 1.0f],可能有更有效的方法,但这是一个起点。