我的目标很简单:我想用C ++编写一个算法混响,听起来确实不错。或更准确地说,最好的选择是让最终用户选择质量和cpu使用率之间的折衷。
到目前为止,我发现要创建一个混响,必须将干燥信号馈入早期反射算法,然后馈入后期反射算法。这个对吗 ?
现在,我发现了使用反馈延迟网络(使用时变反馈延迟网络来减少人工去重化要求)的有关后期反射部分的大量文章。根据我的阅读,FDN是一种高质量的模拟后期反射的方法,但不是太宽泛(在cpu方面)。此外,我想您可以通过更改延迟线的数量来控制质量/ cpu电荷的权衡。
但是我绝对不知道如何对早期反射算法进行编程(还记得吗?我在DSP领域真的很无知)。
使用一种多重延迟在我看来是合乎逻辑的,它具有易于编程和计算便宜的优点。但这听起来太简单了,难以置信。
此外,我的直觉告诉我,信号路径中的某处必须包含一个或几个滤波器。
能不能请您为我澄清一下这个话题?
两个注意事项:
我不是在卷积之后混响。我不太在意混响的真实性,但是我想要一个听起来不错,可调节的混响,而不是渴望CPU的混响。
而且,编码部分也不是让我担心的地方否则在stackoverflow上。这实际上是DSP部分,也是我要使用的部分:)
#1 楼
您需要产生一些延迟,以产生早期反射(=与少数狄拉克之和进行卷积);以及通常通过全通(AP)和梳状滤波器网络实现的“尾部”。第一部分实现起来很简单,但听起来很难做到。可能有助于查看峰值在预先记录的脉冲响应顶部的位置,以了解哪种响应是“自然的”。很难通过一些设置使其易于参数化,尽管您可以通过为该部件提供一堆预设来获得“混合”混响,以达到Virsyn Reflect的目的。
尾巴是算法混响发亮的地方(无双关语),因为它很容易参数化。算法混响的祖父是施罗德算法。请注意,它只会产生一个“尾巴”,而不是早期的反射-您可以通过稍加延迟来增强它的头部。听起来不太好(非常“粒状”),但是这是一个不错的开始-您可能会遇到一些麻烦,并且有助于理解每个参数的影响。许多广受赞誉的算法混响,尤其是80年代的混响(Lexicon,Eventide,Publison)只是对全通滤波器和梳状滤波器的拓扑进行了微调。我怀疑这是由训练有素的耳朵进行的大量试验和错误,他们非常擅长弄清参数或拓扑的变化听起来如何,而不是任何科学方法。这是另一篇有趣的文章-显示了基思·巴尔(Keith Barr)最喜欢的混响拓扑。最初的midiverb可能不是您对“高质量算法混响”的定义,但听起来很甜美,这使人了解到它是由“ dsp”制成的,该“ dsp”仅能够用于系数为0.5的MAC。 />
Valhalla room是我最喜欢的软件算法混响-花一些时间阅读其开发者的博客,以找到有助于使其正确使用的事物的灵感。
#2 楼
进行良好的混响并不容易。反馈延迟网络绝对是必经之路。具有所有通过和梳状滤波器的原始Schroeder算法遭受“频谱稀化”的困扰,这使其具有金属感。您需要在代表混响时间(作为频率的函数)的不同延迟线上输入与频率相关的衰减。可以通过抽头延迟线进行早期反射,同时还具有一些频率相关的衰减和一些扩散器以使它们不相关。进行立体声还需要一些去相关的方法。有一个相当不错的开源实现,称为GVerb,它用于Audacity。谷歌搜索应该让您获得源代码的(合法)副本。
评论
$ \ begingroup $
从您的帖子中听起来很简单!好吧,至少我能理解,除了有关去相关的部分。你到底是什么意思?关于频率相关的衰减,我想您的意思是扔掉一些滤波器并通过耳朵对其每一行的频率进行微调。我们到底在谈论哪种过滤器?生命值 ? LP? BP?谢谢 !
$ \ endgroup $
–迪纳兹
2012年7月4日在22:40
评论
$ \ begingroup $
忘记提及Freeverb是Schroeder算法的一种更现代的变体(有可用的代码,例如,可以在csound或ladspa代码库中找到)。
$ \ endgroup $
–小食
2012年7月4日在21:12
$ \ begingroup $
非常有趣!我也喜欢Valhalla产品(ValhallaShimmer发光,也没有双关语:))。您为什么提到卷积以进行早期反射?将正常延迟设置为multitap延迟就足够了吗?
$ \ endgroup $
–迪纳兹
2012年7月4日在22:36
$ \ begingroup $
我提到了卷积,因为“多次抽头延迟”只是一种特殊的卷积(具有一些非空系数,因此可以以幼稚的方式进行计算,而没有与“密集”卷积相关的炮兵)。无论如何,正如Hilmar指出的那样,多次抽头延迟可能有点天真,经过几次反射,因此在时间上扩展(=低通滤波)回声听起来会更加自然。可以通过对每个抽头使用简单LP的多次抽头延迟来完成;或者使用卷积引擎和预设IR直接计算混响的整个早期反射部分。
$ \ endgroup $
–小食
2012年7月4日23:42