混响是音频在数字信号处理当中所能实现的最有趣的效果之一。它是一种非常适合使用数字方式进行处理的效果,而对于模拟电子设备来说,则是非常难以实现的。
正因如此,数字信号处理的使用对于我们将空间感融入音乐元素的能力带来了非常深远的影响。
在数字信号处理被应用在创建混响效果之前,人们是通过换能器的使用来创建混响效果的,也就是在物理延迟元件的两端分别使用一个扬声器和一个麦克风。
这里所述的延迟元件通常是指一组金属材质的弹簧,也可以使用一块悬挂起来的金属板,还可以是一个实际存在的房间。
使用物理延迟元件来创建混响效果时,我们很难对声音的变化做出控制。而且使用它们来创建混响,并不是件轻松方便的事情。使用金属弹簧作为物理延迟元件来创造混响效果实际上是其中唯一一个还算是轻便,并且费用较低的解决方案。
尽管如此,就声音本身的效果来说,这些方法都非常的糟糕。
首先,让我们快速的了解一下混响的定义:自然混响是指声音在有限空间/密闭空间中,经过表面的反射所产生的效果。声音从其声源处发出,以每秒1100英尺(约335米)的速度进行传播,并撞击到密闭空间的墙壁表面,从而产生各种角度的反射。
其中的某些反射会很快的传播到我们的耳朵(也就是我们所说的“早期反射”),而其他的一些(没有被传播到我们耳朵位置的)反射会在这个密闭空间中继续传播并撞击其他的表面,持续不断的发生反射,直到声波传达到我们的耳朵。
对于那些坚硬且厚重的表面(例如混凝土墙面)来说,声波经过反射后的衰减不会很大,然而对于那些柔软的表面来说,声波中的很多的能量会被这些表面所吸收,尤其是声波中高频部分的衰减最为明显。
房间的大小,墙壁的复杂性和角度,房间内所摆放的物品以及表面的密度这些因素共同决定了这个房间的“声音特征”。
在使用数字信号处理时,原始的延迟时间仅受到可用内存的约束;而反射次数以及与频率相关的效果(滤波)模拟器只会受到处理速度的制约。
两种模拟混响的方法
接下来让我们看一看两种用于模拟混响的数字化方法。第一个就是:暴力法,也叫强制法。
混响效果是一种时变效果(即随着时间的变化而变化的效果)。也就是说混响效果其实跟我们所演奏的音符没有什么关系,无论我们演奏的音符怎么变换,我们所得到的混响效果依然是相同的。
时不变系统(即指特性不会随着时间的变化而变化的系统)可以完全由其脉冲响应来表征。
您是否曾经站在一个空旷的大空间中(比如健身房或者是建筑物的大厅),发出一个很短促的声音(击掌就是个产生短促声音很好的方式),然后我们就能够听到这个声音的混响效果在逐渐减弱。其实这个过程,我们就是在聆听房间的脉冲响应。
通过脉冲响应,我们能够了解到有关这个空间的所有信息。通过那一下短促的击掌,我们就能够立即感受到混响的强度,混响消逝的时间以及房间的混响效果是否够“好”。
通过聆听房间的脉冲响应我们的不仅可以靠自己的耳朵对房间进行分类,而且我们可以对混响进行记录并进行复杂的信号分析。所以我才说,脉冲响应能够告诉我们关于这个空间的所有信息。
脉冲响应的之所以这么好用,是因为脉冲在理想的状况下是一种瞬时声音,并且它在所有频率上所承载的能量都是相等的。而当声波以混响的形式反射回来时,它所携带的信息就是这个空间对这个瞬时全频脉冲的响应效果。
脉冲及其响应
在现实世界中,击掌的声音,气球破裂的声音,或者鞭炮爆炸的声音,还有通过气体的电气放电的声音都是脉冲信号。
如果将一个房间的脉冲响应数字化,然后将其导入到声音编辑软件中进行查看,它的形状看起来会像是正在衰减的噪声信号。在信号的密度达到一定程度之后,它会逐渐平滑地衰减到零。实际上,声音空间越平滑这种衰减就会越平滑。
就数字音频处理而言,我们很容易理解脉冲响应中的每一个采样点都可以被看作是脉冲的离散回波。
在理想的情况下,由于脉冲是单一的非零样本,因此不难理解当我们使用了一系列的样本时(即在房间中播放的音乐),我们得到的响应将是所有的样本在各自的时间点上的响应之和,这被称为叠加。
换句话说,如果我们已经拥有了某个空间的数字化的脉冲响应数据,那么我们就可以轻松地将这个空间的特征添加到任何一个数字化的干声音中去。
用脉冲响应中的每一个点乘以样本的振幅即可得出这个空间内该样本的响应;因此我们只需要对被“放入”该空间中的每一个声音样本进行乘法操作就能够得到整个声音样本的响应。通过这种方法,我们只需将结果叠加在一起,即可所获得一系列(数量与我们使用的样本数量相等)重叠的响应。
这个方法十分简单,但是计算量却非常的庞大。我们所输入的每一个样本都需要和脉冲响应中所对应的样本相乘,然后再添加到混音中。
如果我们需要处理的样本数量为n个,而脉冲响应拥有的样本数量是m个,那么在这个方法中我们需要执行n + m个乘法和加法运算。因此,如果我们的脉冲响应的长度是三秒钟(对应一个大房间的情况),而我们需要处理的音乐的长度是一分钟,那么在采样率为44.1KHz的情况下,我们在整个过程中需要进行约350万亿次的乘法运算和相同数量的加法运算,这简直是个天文数字。
如果我们有一整天的时间去等待计算机进行计算处理,那这不会是什么问题,但是如果我们想获得实时的效果,这种方法显然是不可能的。
这是件非常遗憾的事,因为这种方法在很多方面都具有非常大的优势。特别是通过它我们可以精确的模拟出世界上任何一个房间的脉冲响应,而且我们还能够轻松的制作出专属于自己的脉冲响应,也就意味着我们能够创造出专属于自己的“房间”。
事实上,还有一种更加实用的方法能够帮助我们解决这个问题。
我们之前一直在讨论的是时域处理,而其中将两个采样信号进行乘法处理的过程被称为“卷积”。虽然在时域中进行卷积需要进行大量的运算,但是在频域中进行等效的卷积处理所需的计算量却能够得到大幅的减少(时域中的卷积等效于频域中的乘法运算)。
具体的解释我就不在这篇文章里展开了。
一种实用的数字混响方法
我们所熟知和喜爱的那些数字混响效果器都采用了和上面所述的不同的方法。基本上来说,它们会通过多个延迟和反馈的使用创建出一系列密集的回声,这些回声会随着时间的流逝而消失。
想要实现这个效果,我们所需的基本元素/模块都是差不多的,然而我们可以通过变量的设置和模块组合的方式来获得不同的结果,从而给我们的数字混响单元赋予独特的声音特征。
最简单的操作方法是使用单个延迟,将部分信号反馈到该延迟中,从而产生一个随时间逐渐消失的重复的回波(反馈的增益必须小于1)。
将类似但是不同长度的延迟进行混合能够增加回声的密度,从而达到更加接近混响的效果。例如,如果我们将延迟长度设置为不同的质数,就能够让每个回波都落在其他回波的空白区域,从而提高整体的密度。
实际上,上面所说的这种简单的操作方法的效果并不理想。如果我们想要获得平滑的混响效果,需要使用的这种硬回声的数量是非常庞大的。
同样的,这种简单的反馈容易引起梳状滤波效应,会导致频率被抵消,虽然这种抵消可模仿出房间的效果,但是也会产生ringing和不稳定的效果。虽然是有用的,但是仅仅靠这些梳状滤波器并不能够为我们带来令人满意的混响效果。
梳状滤波混响的原理图
通过正反馈(反相)和负反馈的加入,我们可以对频率抵消进行填充,使整个系统变成全通滤波。全通滤波器能够像之前的方法一样带来回波,但是其频率响应会更平滑。
它们能够提供频率相关的延迟效果,对输入信号的谐波进行涂抹,能够让我们获得更接近于真实混响的声音效果。梳状滤波和全通滤波的组合(串联,并联,或者是嵌套)的循环延迟以及其他元素(例如,在反馈路径中加入滤波器以模拟高频吸收)的共同作用,能够为我们提供真正好用的数字混响效果。
全通滤波器混响的原理图