Guest post by Anton Kamenov
A typical reverb is supposedly implemented in two parts. First, a tapped delay line is used to simulate the initial (early) reflections that may be few in number and distinct. Second, a Shroeder reverb is used to simulate the late reverb, which contains a large number of indistinct reflections. The Shroeder reverb itself consists of several sequential all pass filters, the output of which is fed through a several parallel feedforward comb filters (simple delays).
With or without a tapped delay line?
On one hand, a tapped delay line would give us a good perception of the size of the room. In larger rooms, one would expect that there would be a good amount of time before the first reflections of the sound bounce back from walls and reach the listener. On the other hand, these first reflections will be truly distinct and noticeable only if the room is empty and very large, perhaps the size of a large club, if one assumes a constant speed of sound of 300 m / s. In practice, the reverbs that we would normally use as recording engineers tend to be shorter.
More importantly, multiple simple delays of the original sound tend to be overwhelming and even annoying. Thus, some creators of artificial reverb, such as Lexicon, opt for ignoring the tapped delay line and simply simulating the late reverb. Finally, the comb filters of the Shroeder reverb should be enough to create a perception of the room size, even when we do not use a tapped delay line. Thus, it is probably better (and easier) to create a reverb without the tapped delay line.
How many comb filters?
The Shroeder reverb opts for four parallel comb filters. Four is probably appropriate, although, in my experience, two is sufficient. Note that Shroeder recorded a number of peaks in the naturally reverberated sound – about 15. Thus, two comb filters could be too little, if we are really trying to approximate a natural reverb. However, our concern should primarily be what sounds good and not necessarily what is most natural. Two, three, or four comb filters is perhaps a matter of taste.
What comb filters?
I am also opting to put the comb filters first and run their output through the all pass filters. The reason for this is simple – in the Shroeder construction, one must be careful to make sure that the delays of the comb filters and all pass filters are different. More precisely, they should be mutually prime, so that we do not end up in a situation where several all pass filter delays fit precisely into one comb filter delay or vice versa. If this does happen, we could end up with peaks in the reverberated sound. If there are too many of these peaks, the reverb will ring unnaturally.
This creates a well-known problem – artificial reverbs are difficult to tune. It is difficult to find the right delays that prevent unnatural ringing. It is especially difficult to tune a reverb automatically, after allowing the user to select various reverb settings.
This is only so, however, if we truly follow the Shroeder reverb construction. We do not have to. Suppose that, instead, we place the comb filters first and only run the output of the last comb filter (the one with the longest delay) through the all pass filters. All we have then is a single repetition of the original sound that we will repeat multiple times to create the reverb. Then, the only thing we have to worry about is the delays of the all pass filters. We do not have to worry about the delays of the comb filters.
The only thing we have to do is make sure that the delays of the comb filters truly represent the size of the room. This is easy. We can always assume some (preferably uneven) room length and width, place the virtual sound source in the middle, and compute the amount of time it takes for the sound to travel from that sound source to selected walls and back.
What about the other comb filters?
If we run only the output of the last comb filter through the all pass filters, then we have a problem similar to the one of the tapped delay line. In large enough virtual rooms, the other comb(s) would sound like simple repetitions of the original sound, which tends to be annoying. The solution to this is simple, however. All we need to do is dilute those repetitions a bit by creating an effect similar to a chorus. That is, we will repeat them with very short delays (I opted for about 7 ms) a number of times.
Note that this is not a true chorus. A true chorus would not use much decay and would typically vary the delay. Here, we can use the reverb decay and we do not really have to vary the delay.
How many times should we repeat the output of each comb filter (except for the last one)? The point of running only one comb filter through the all pass filters is to avoid the overlapping of the all pass repetitions of the several comb filter outputs. This overlap is difficult to manage. Thus, if we are diluting the comb filters, then we should only add repetitions to the point where the longer comb filters hit. For example, if we have two comb filters, the first one produces a repetition of 50 ms after the original signal, the second one produces a repetition at 100 ms after the original signal, and we choose to repeat the first comb filter every 5 ms, then we only need to repeat it about 10 times. This is easy for any computer to handle.
How many all pass filters?
I truly do not know the answer to this question. The Shroeder reverb tends to use four or more. I have found that three are probably sufficient. Some argue that a natural sounding reverb needs to have at least 1000-2000 repetitions per second, but, with sequential Shroeder all pass filters, it is easy to get much more. Using three all pass filters with delays of about 3 ms, 7 ms, and 11 ms, seems to produce an OK sounding reverb. Still, there are some (very slight) metallic undertones, but I have not tested it enough to be sure. If anything, these delays are probably too short. Shroeder argued for delays of length 100 ms / 3k, k = 0, 1, 2, ….
What all pass filters?
Although the delays of the three all pass filters above are mutually prime numbers – 3 ms, 7 ms, and 11 ms, this is not really important. Digital sound comes in byte buffers. It is more important that the delays that are computed in terms of number of bytes (or number of samples, whatever the construction of the sound buffer may be), are mutually prime. In addition, "mutually prime" is just too difficult to compute. It is easier to just get a table of prime numbers from the internet is make sure that the delays in number of bytes of samples are prime numbers – whatever prime numbers come close to whatever delays in milliseconds we desire.
What about an equalizer?
Reverbs are often accompanied by an equalizer, the purpose of which is to create the perceptions of brighter or darker rooms. Throwing in an equalizer is easy. The only question is – where in this construction? Although it should not matter, the easiest thing to do is to put the equalizer before all other filters. The output of the equalizer then is the input to the reverb construction described above. This accomplishes at least one thing – the phase delay of the equalizer can be handled by the reverb (i.e., any delays created by the reverb can be shortened (at least a bit) by the delay of the equalizer), to minimize the phase delay of the overall effect.
The simplest reverb
The simplest reverb can be created with just three Shroeder all pass filters – or perhaps four or more, if further testing proves that this is necessary in the above construction. The tapped delay line could be ignored. A couple of feedforward comb filters could be thrown in to create some perception of a room size, but the easiest thing to do then is to put them before the all pass filters, dilute the first comb filter repetition with a chorus-like effect, and only run the one repetition of the last comb filter through the all pass filters. All this will minimize the need to tune the reverb for the different room sizes and decays that might be selected by the user. An equalizer could precede the whole reverb construction. Of course, this is not to say that this would be the best sounding reverb. It does, however, provide a good basis for experimentation and a good insight on how the pieces in artificial reverbs work.