湿/干控制在果汁卷积混响插件
Wet/dry control in Juce convolution reverb plugin
我正在为大学创建一个卷积混响插件,我已经设法获得一个简单的插件工作,其中输出是通过脉冲响应的输入。我想知道我如何改变代码,使一个湿/干参数。
我为这个添加了一个"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.0f
的blendParam
,只需传递音频不变。 - 给定
blendParam
或1.0f
,将音频处理到最大容量 - 给定
blendParam
的0.5f
,将一半未处理的音频与处理过的音频混合。
我建议你在继续之前写一些以上的单元测试。
下面的代码似乎满足这些属性:channelData[i] = level * (inputData[i] * (1.0f - blendValue) + convolvedData[i] * blendValue);
-
convolvedData
是你"完全处理"的数据。 -
blendValue
是blendParam.getValue()
的缓存值。
你可以通过调用convolver.process
获得convolvedData
,就像你现在做的那样,用一个单独的数组convolvedData
作为你的输出参数。
注意,这并没有考虑到将结果数字夹入范围[-1.0f, 1.0f]
,可能有更有效的方法,但这是一个起点。
相关文章:
- 具有可分离内核的 2D 模糊卷积
- CUDA 使用共享内存平铺 3D 卷积实现
- OpneCV - 保留十进制的卷积
- C++中复向量与实向量的二维卷积
- 如何在张量流上使用 fp16(Eigen::half) 进行卷积
- 如何在卷积程序的 c++ 中优化嵌套循环
- 带有多通道内核的图像卷积
- 在 Caffe 中,如何修改特定卷积层的行为?
- 使用膨胀卷积的语义分割中的上采样
- 使用 OpenCL 进行图像卷积中的参数大小无效
- C++的全卷积网络训练
- 卷积二维与深度卷积二维计算
- 优化的图像卷积算法
- 我没有从使用 FFTW 的重叠添加 FFT 卷积中获得预期结果
- 卷积:卷积中的最后一个元素永远不会正确
- 如何在Caffe中对复发性卷积神经网络进行建模
- 如何在C 中而不是Prototext中启动卷积层
- 使用高斯模糊进行图像卷积,可以加速
- 自定义Caffe Windows CPP中的卷积层
- 湿/干控制在果汁卷积混响插件