Juce卷积混响插件中的湿/干控制

时间:2015-10-26 11:56:22

标签: c++ audio signal-processing convolution juce

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

我为此添加了“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 :(得分:1)

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

  1. 鉴于blendParam 0.0f,只需传递音频不变。
  2. 鉴于blendParam 1.0f,请将音频处理为最大容量。
  3. 鉴于blendParam 0.5f,将一半未经处理的音频与已处理的音频混合。
  4. 我建议你在继续之前为上述(以及更多)编写一些单元测试。

    以下代码似乎满足这些属性:

    channelData[i] = level * (inputData[i] * (1.0f - blendValue) + convolvedData[i] * blendValue);
    
    • convolvedData是您的“完整处理”数据。
    • blendValueblendParam.getValue()
    • 的缓存值

    您可以通过调用convolvedData来获取convolver.process,并使用名为convolvedData的单独数组作为输出参数。

    请注意,这不会将结果数量限制在[-1.0f, 1.0f]范围内,并且可能有更有效的方法,但这是您的起点。