我正在为大学创建一个卷积混响插件,我设法让一个简单的插件工作,输出是通过脉冲响应的输入。我想知道如何改变代码来制作湿/干参数。
我为此添加了“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());
}
任何想法?
答案 0 :(得分:1)
考虑到您的问题,您似乎正在寻找以下属性:
blendParam
0.0f
,只需传递音频不变。blendParam
1.0f
,请将音频处理为最大容量。blendParam
0.5f
,将一半未经处理的音频与已处理的音频混合。我建议你在继续之前为上述(以及更多)编写一些单元测试。
以下代码似乎满足这些属性:
channelData[i] = level * (inputData[i] * (1.0f - blendValue) + convolvedData[i] * blendValue);
convolvedData
是您的“完整处理”数据。blendValue
是blendParam.getValue()
您可以通过调用convolvedData
来获取convolver.process
,并使用名为convolvedData
的单独数组作为输出参数。
请注意,这不会将结果数量限制在[-1.0f, 1.0f]
范围内,并且可能有更有效的方法,但这是您的起点。