Just because it fits here very well: There is some info about reverbs in this thread as well.
There is one more thing, that I wanted to share here: Allpasses can sound very metallic even though they have a flat amplitude response which should guarantee no audible coloration. For themselves, allpasses indeed have no coloration. But when used in feedback loops, you can get pronounced metallic ringing. Here's why:
Input ------->| + |------->| allpass |----------+----------> Output
+-->| | +---------+ |
| +-----+ |
| +-----------+ |
+-------------| fkbGain |<------------+
fbkGain==1 we would get an infinite looping "reverb" type of sound. With
fbkGain<1 we would get an exponential decay in the "reverb" tail. I'm putting "reverb" in quotation marks because it doesn't really sound like a reverb, but the concept is very similar to one.
fbkGain<1 we would notice some more or less pronounced ringing in the decay tail. But all of the blocks that are used have a flat amplitude response, so why do some frequencies stand out and create the ringing?
The problem is that the allpass has a frequency dependent phase shift, meaning that some frequencies are delayed more than others. That's the whole point of the allpass and that's what makes it "blur" the audio which is very useful for reverbs. However, in the feedback loop that means that some frequencies travel through the loop faster than others. Let's say our fbkGain is 0.5 and the allpass has a delay of 100ms for frequency A and a delay of 200ms for frequency B. After one second, frequency A has traveled through the loop 10 times and has passed the fbkGain block each time. That means after one second, its amplitude has dropped to
0.5^10 = 0,00097 of its initial amplitude. Frequency B however has only cycled through the loop 5 times and its amplitude is still
0.5^5 = 0,03125. The result is that frequency A is only barely noticable compared to frequency B. Now we have ringing.
How to avoid this?
To really remove the problem, we would have to make the feedback gain frequency dependent so that it corrects for this. If frequency A is travelling though the loop twice as fast as frequency B, it should be attenuated so that it's amplitude after two passes matches that of frequeny B after one pass. Depending on the type of filter chosen for this task, it will more or less be an approximation. So ringing likely can't be removed entirely but it can be somewhat reduced.
Another option is to add modulation to the allpasses. By modulating the allpass time, we can make the cycle times of different frequencies more random. This works very well but also creates a chorus-y sound. I like it but it might not be for everyone.
The third option is to make the loop "longer", meaning that audio cycles through the loop slower. It can be done by adding normal delays or additional, differently tuned allpasses. This reduces the frequency dependent difference in the "cycle" times drastically and is commonly used in reverb algorithms. The problem is that longer cycles will also create audible echos in the reverb tail. To reduce this effect, the output of the reverb can be a mix of taps from different spots in the loop. Care must be taken to not mix audio in such a way that certain frequencies are always canceled out. This happens when you overlay a signal with a delayed version of itself - which is a comb filter. In theory, adding more taps to the output reduces the "comb" effect to an acceptable level but also increases the computational power required.