我正在尝试使用FFT创建/实现实时混响算法。我已经尝试过FDN和其他更简单的算法,但它们听起来不够好。 因此,通过将变换后的信号与变换后的脉冲响应相乘来进行快速卷积是有效的,听起来很棒。
我看到的问题是,如果我想要一个持续数秒的混响,那么脉冲响应包含100 000+个值,因为我的输入缓冲区是256个样本,所以卷积的结果是100个255+结果值必须与之前的卷积结果一起添加,更不用说为256个输入样本的每个缓冲区计算100 000+值的FFT。
必须有一个更好的解决方案来解决这个问题。是否可以仅为256个值计算FFT(+ 256个填充零,因为它不是循环信号)。 混响不必绝对正确,只需听起来不错。
答案 0 :(得分:2)
您可能希望考虑“频率延迟线”,或者称为分区卷积。简而言之,您可以将混响IR分解为多个分区,进行FFT,与输入信号进行卷积,然后以设置为相关分区延迟的延迟将其插入输出。对于几秒钟的完整IR,这仍然是CPU密集型的,所以......
其他技巧包括将头部相关传递函数(HRTF)馈送到更传统的混响合成算法中。这就是在第一组反射中表示房间频率响应的理念。然后可以将HRTF馈送到更传统的平坦响应混响合成算法中,以便产生多次反射。使用HRTF代替传统的梳状滤波器。
更具体地指出你的问题,看看Fons Adriaensen的工作。 http://kokkinizita.linuxaudio.org/papers/aella.pdf http://kokkinizita.linuxaudio.org/papers/index.html(更有趣的论文)
浏览他的网站,了解其他有趣的插件和源代码。
CCRMA(斯坦福大学)的Julius O Smith也有很多很好的信息。我不能在这里详细回答,但我希望Fons的论文回答你的问题。