2

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

我为此添加了一个“混合”参数:

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());

    }

有任何想法吗?

4

1 回答 1

1

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

  1. 给定 a blendParamof 0.0f,只需将音频原封不动地传递。
  2. 给定 a blendParam1.0f将音频处理到最大容量。
  3. 给定 a blendParam0.5f将一半未处理的音频与已处理的音频混合。

我建议您在继续之前为上述(以及更多)编写一些单元测试。

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

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

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

请注意,这并没有考虑将结果数字限制在 range[-1.0f, 1.0f]中,并且可能有一种更有效的方法来执行此操作,但这对您来说是一个起点。

于 2015-10-26T19:40:27.380 回答