gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:16:09 26 4
gpt4 key购买 nike

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

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

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. 给定 1.0fblendParam,将音频处理到最大容量。
  3. 给定 0.5fblendParam,将一半未处理的音频与已处理的音频混合。

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

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

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

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

请注意,这并没有考虑将结果数字限制在 [-1.0f, 1.0f] 范围内,并且可能有更有效的方法来执行此操作,但这只是一个开始给你点。

关于c++ - Juce 卷积混响插件中的湿/干控制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33345173/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com