Reverb is one of those ubiquitous effects that almost all audio productions will use to some degree. Certainly used in controlled studio productions, and recordings especially, reverb can be found on stage too, in both playing the part of a virtual space simulator used to “place” the sound within a physical environment.
Often reverb is also used to create a “wash” around a sound, to “blur it” so to speak, and it also can be used as a sound design tool with or even without the original samples mixed into it. Much like equalisation, reverb is often one of the most widely used processes in audio engineering.
But what IS reverb?
To put it simply, in principle, reverb can be understood as a type of infinite resonance.
Why infinite? Well, because the initial impulse can be infinitely long, or exhibit infinite decay, and conversely the response, while not necessarily in practice, is mathematically infinite.
In analogue systems of discrete electrical parts, reverberation can be understood as an infinite impulse response (IIR) to a given, usually finite (but not necessarily), impulse. To break this down, an impulse is our original sound, and the impulse response is the analogue circuit’s frequency-dependent resonance actuated by that impulse. This is done by design of that circuit, and such design can take great many forms.
“Reverb – it lets you know where you are.”James Currie, Sound Designer
Digital audio, while more accurate than its electrical analogue counterpart (see Shannon-Nyquist theorem), consists of regularly spaced samples (discrete readings of a continuous input signal (voltage) at regular intervals, known as a discrete time signal), and given that there necessarily must be some portion of a signal that exists below the threshold of the least significant value reading of the impulse (and thus below the sensitivity of the system), and also that no infinitely large storage system exists, the response is thus a finite one (FIR).
Computationally this is an advantage as calculating for an infinite response would take infinitely long, and take up infinite memory. Analogue systems don’t deal with sound computationally and therefore do not concern themselves with storing any data.
The so-called information in an analogue system is really just a function of an alternating voltage in the circuit, and as such that voltage can be divided infinitely many times, even if it ultimately drops well below the noise floor of the system. Our ability to hear or in any way discern the sound itself plays no role in the computation.
In a digital system, in turn, the sound exists as a series of numbers and thus is interpreted, and thus constitutes information, and since every piece of information inside a computer is ultimately an integer of finite length (yes, even double precision floating point numbers have a limit), you can only ever divide it finitely many times before your result becomes zero. Therefore it stands to reason that any subtractive resonance (lacking feedback) like reverb, will be finite.
To explain this fully would be a job for at least a ten-thousand-word paper, but the principles of digital reverberation are not complicated at all. Arguably, computational systems are actually easier to understand than analogue electrical ones.
In this instance we can focus on a subset of reverb known as convolution reverb. In many ways this is one of the most interesting, realistic, and at the same time computationally intensive ways of reverberating an input signal. It starts from the acquisition of a finite impulse response of a reverberating body.
In this instance, let’s make that a room. A broadband impulse signal (short burst of white noise, or a sinusoid sweep of the audible band) is fed into the body (room) via a transducer, the output resonance is thence recorded by a microphone, and the original input signal is subtracted from the recorded output. What we are left with (in an ideal situation) is the body’s (room’s) resonance at all frequencies over time. Getting a finite impulse response with enough fidelity to make it worth your while is often 80% of the battle, but once that’s done, we can move to the next step: the process of convolution.
Keep in mind:
- that both the recorded impulse response and the signal that is to be reverberated (our input signal) are discrete time signals, we necessarily have two arrays of numbers which we are to work with
- that there is an intrinsic floor and ceiling to both signals, as defined by the upper and lower bounds of the signal’s numeric representation, thus the function is bounded
- that the impulse response is a finite array, while the input signal can, in principle, be infinitely long, reason being that discrete time convolution is a function of successive multiplication that for any instance is bounded by the size of the impulse response (window), so it can be reapplied within O(n^2) time.
To put it as simply as possible, the input signal and the impulse response are overlapped, then each discrete time input component (sample) is multiplied by its overlapping impulse response component, every multiplication for that discrete portion of time accumulated over the duration of the window’s overlap is then summed, and a modulus of the bounding values is used to prevent it escaping the bounds.
By doing this, every sample, and indeed every arbitrary group of consecutive samples in the input signal, is transformed to comply with the frequency response of the impulse response (room), thus our input signal will behave as if it was in that room.