Why is reverb a black-art?
-
Richard_Synapse Richard_Synapse https://www.kvraudio.com/forum/memberlist.php?mode=viewprofile&u=245936
- KVRian
- 1187 posts since 20 Dec, 2010
Not specifically this method, but automatic optimization works for sure, as it's rather easy to define what's a desirable output (e.g. the constant decay he mentions).
Richard
Richard
Synapse Audio Software - www.synapse-audio.com
-
- KVRist
- 231 posts since 12 Apr, 2005 from Denmark
Automatic optimization? Optimization of what?Richard_Synapse wrote:automatic optimization works for sure, as it's rather easy to define what's a desirable output (e.g. the constant decay he mentions).
Constant decay is not at the top of my priority list. You can easily create some filtred white noise for use in a convolution reverb, but it won't sound like a hall, room etc.
-
Richard_Synapse Richard_Synapse https://www.kvraudio.com/forum/memberlist.php?mode=viewprofile&u=245936
- KVRian
- 1187 posts since 20 Dec, 2010
So far the thread is about algorithmic reverbs, where you typically have a large set of parameters to optimize - delay line lengths, feedback coefficients, and so on. There's no guarantee that the decay is stable, except in special cases like the Schroeder reverb.
Richard
Richard
Synapse Audio Software - www.synapse-audio.com
- KVRian
- Topic Starter
- 1091 posts since 8 Feb, 2012 from South - Africa
I think Richard means the decay of modes(i.e standing waves) in a room, all renowned good rooms in recording has this property . With Halls it's a bit different - like a room within a room - with a twin envelope.Warp69 wrote: Constant decay is not at the top of my priority list.
- KVRAF
- 8476 posts since 12 Feb, 2006 from Helsinki, Finland
Reasonably large number of people have claimed to like my Tila for room reverbs, and Tila is largely just one big FDN. In that case it was more like 5% algorithm and 95% tuning though. Choosing primes isn't necessarily the ideal setup either; it's not necessarily a bad starting point but the relative delay length is quite important and personally I've never found a "naive" matrix (like householder whatever) to sound nice.Warp69 wrote: Every body can create a FDN reverb with prime numbers, but I have yet to hear any really good ones.
For general reverbs, I think FDNs are far from ideal. It's relatively easy to tune the early reverb to be whatever you want, but very hard to shape the tail. Ignoring degenerate setups, the tail tends to be fairly lifeless and it's hard to add modulation either in a way that sounds nice.
Basically you have to tune the matrix, and the delay lengths and the two depend on each other (though good matrices tend to sound good with any set of delays; they just sound better with a good set of delay.. I'd always start with the matrix first). On top of that you probably need some additional diffusion to the beginning of the reverb, because with pure FDN you probably end up with either too low early density, or too little total delay (which leads to obvious ringing).
In my later reverb (which I wrote with a specific sound in mind) I just went for something quite similar to the "figure eight" because that kind of reverb is much easier to tune.
- KVRian
- Topic Starter
- 1091 posts since 8 Feb, 2012 from South - Africa
IMHO, a good reverb topology, should in theory be easily tuneable, because at worst - it should sound like a "bad" room and not a bad reverb - which can sound much worse than the worst rooms!
An easily tuneable reverb for me would be:
http://www.spinsemi.com/knowledge_base/effects.html
For the historical note - it's Keith Barr's(RIP) one-loop topology. He was the guy behind Alesis, also did some MXR pedals I think.
On a random note - I've seen a lot of hardware companies - actually pre-eq before going to the delays. Taking out a little bass (especially in the ER part) helps quite a lot for certain sounds.
Was also wondering - what kind of interpolation do you guys use for the modulating parts?
An easily tuneable reverb for me would be:
http://www.spinsemi.com/knowledge_base/effects.html
For the historical note - it's Keith Barr's(RIP) one-loop topology. He was the guy behind Alesis, also did some MXR pedals I think.
On a random note - I've seen a lot of hardware companies - actually pre-eq before going to the delays. Taking out a little bass (especially in the ER part) helps quite a lot for certain sounds.
Was also wondering - what kind of interpolation do you guys use for the modulating parts?
-
- KVRian
- 1102 posts since 30 Oct, 2005
...becouse realworld reverb is NOT about filtering and associated artifacts /and not about white noise IRs-like you correctly stated/Warp69 wrote:Richard_Synapse wrote:automatic optimization works for sure, as it's rather easy to define what's a desirable output (e.g. the constant decay he mentions).
You can easily create some filtred white noise for use in a convolution reverb, but it won't sound like a hall, room etc.
btw-did you ever tried to fully emulate realworld reverbs IRs hi freq. rolloff with any filters??...if yes than you probably know what Im talking about...
-
- KVRian
- 676 posts since 24 May, 2011 from los angeles
all I know is small developers have some of the best reverb I beta tested sknotes newest reverb and its amazing sounds so real.
also there plate reverb kicks ass and eareckons eareverb is super smooth i dont thing its a black art mixing engeneers use it all the time
also there plate reverb kicks ass and eareckons eareverb is super smooth i dont thing its a black art mixing engeneers use it all the time
- KVRAF
- 3426 posts since 15 Nov, 2006 from Pacific NW
Reverb is a black art, because black arts are FUN.
I've read every reverb paper I could find, scoured user and service manuals, run strange test signals through all sorts of commercial devices, looked at ROM code, and done everything within my abilities to figure out reverb algorithms. I've tested all of the good ideas I've found and/or invented, and have programmed literally HUNDREDS of reverb algorithms since 1998. It has been a really fun process of discovery.
I could probably write down everything I know that works, and put it into a book chapter. If I had come across that book chapter when I started working on this stuff in the 1990s, I would have programmed a few reverbs, got bored and moved on.
Honestly, I'm not as big a fan of the sound of reverb as my current occupation would suggest. My main interest is in the design of algorithmic reverbs, not how they are used. It is all about the unknown for me: finding hidden secrets, inventing new techniques, reading a paper that introduces new ideas.
There is no Platonic Ideal for reverb algorithms. Instead, there are an infinite number of possible algorithms. Most of these suck. Some of them will be awesome. Finding some of the awesome ones is a good way to spend the day, and I feel lucky that I get to do this for a living.
Sean Costello
I've read every reverb paper I could find, scoured user and service manuals, run strange test signals through all sorts of commercial devices, looked at ROM code, and done everything within my abilities to figure out reverb algorithms. I've tested all of the good ideas I've found and/or invented, and have programmed literally HUNDREDS of reverb algorithms since 1998. It has been a really fun process of discovery.
I could probably write down everything I know that works, and put it into a book chapter. If I had come across that book chapter when I started working on this stuff in the 1990s, I would have programmed a few reverbs, got bored and moved on.
Honestly, I'm not as big a fan of the sound of reverb as my current occupation would suggest. My main interest is in the design of algorithmic reverbs, not how they are used. It is all about the unknown for me: finding hidden secrets, inventing new techniques, reading a paper that introduces new ideas.
There is no Platonic Ideal for reverb algorithms. Instead, there are an infinite number of possible algorithms. Most of these suck. Some of them will be awesome. Finding some of the awesome ones is a good way to spend the day, and I feel lucky that I get to do this for a living.
Sean Costello
- KVRian
- Topic Starter
- 1091 posts since 8 Feb, 2012 from South - Africa
And I thought I was insane for prototyping about 50+ algorithms this yearvalhallasound wrote:... and have programmed literally HUNDREDS of reverb algorithms since 1998.
And yeah 94% of it sucks really bad! But it was worth it for the 6% that actually worked. One of the most fun/awful discoveries I made was - that a good flat looking FFT frequency spectrum - often meant a bad time-response. FFT's lie
Actually prototyped/invented a reverb which is quite similiar to the paper you published(completly by chance) - probably the only FDN type I could ever get to sound somewhat decent. The only differences being that my allpass-delays where of the nested-type - 2 layers deep - with a modulating first order allpass-filter before the 'inner' allpass delay - which also modulates a bit. The idea behind it being - that the 'inner' allpass-delay - intergrates/smoothes out the time-response of the more rapidly moving allpass filter. If I remember correctly - the modulation sources ended up costing way more than the nested-allpass structure itself! Think the project is in the pile of - stuff I need to finish someday - I'm terrible at finishing projects.
Reverb is a lot of work - but the thing that gets me to try and invent more is hearing about strange/unique structures. The algorithms that has always intrigued me to death, but can't wrap my head around is - Eventide Blackhole, Lexicon Constant-Density Plates, URSA Major Stargate. I actually don't use reverb myself - that much - so when I do - I tend to go for the more esoteric things. Should probably also design a spring-reverb sometime - since I have MasterRoom XL-121 to test against here - pretty cool box - delay-times are based on natural logarithms.
I'm starting to ramble.
Cheers
Andrew
- KVRAF
- 8476 posts since 12 Feb, 2006 from Helsinki, Finland
I feel like mentioning this one trick: when building elementary all-pass filters, it's not actually necessary to have the same feedback coefficient at all frequencies. You can actually replace the feedback coefficient with a shelving (or whatever) filter and have a frequency dependent decay (or "diffusion" when it's inside a loop) and as long as you compensate the feed-forward path to keep it all-pass.
-
Music Engineer Music Engineer https://www.kvraudio.com/forum/memberlist.php?mode=viewprofile&u=15959
- KVRAF
- 4379 posts since 8 Mar, 2004 from Berlin, Germany
cool stuff. looking at this:mystran wrote:I feel like mentioning this one trick: when building elementary all-pass filters, it's not actually necessary to have the same feedback coefficient at all frequencies. You can actually replace the feedback coefficient with a shelving (or whatever) filter and have a frequency dependent decay (or "diffusion" when it's inside a loop) and as long as you compensate the feed-forward path to keep it all-pass.
https://ccrma.stanford.edu/~jos/pasp/Al ... Combs.html
and boldly generalizing - would it be sufficient to just plug the exact same filter (as in the feedback path) into the feedforward path for this compensation?
- KVRian
- Topic Starter
- 1091 posts since 8 Feb, 2012 from South - Africa
In keeping with true reverb-design tradition - mystran is being vagueRobin from www.rs-met.com wrote: and boldly generalizing - would it be sufficient to just plug the exact same filter (as in the feedback path) into the feedforward path for this compensation?
I tried doing it like that before - could not get it to work - think the forward path needs to be compensated by some formula that varies with feedback, and that is just in the shelving case. In the LP - case - who knows. Also - 'elementary' allpass can mean a couple of things:
Classic Shroeder Allpass
Cheap Allpass - as in the link you provided.
Double memory - 1 coeffcient Allpass
Maybe Mystran could elaborate...
- KVRAF
- 8476 posts since 12 Feb, 2006 from Helsinki, Finland
Yeah I was a bit vague, because I don't really know the best way to do it, so I didn't really want to give you a bad method... but I guess I'll do it anyway. 
In Abstract Chamber I used a sort-of direct form design for the all-pass filters (it does some other tricks too, but the "base" structure is more or less "figure-8"), working in terms of transfer functions, which unfortunately suffers from the usual coefficient accuracy problems, so one should design a better structure (it's something I'll look into it when I decide to work on reverbs next time), but the basic idea I used there is as follows (and it works with double precision anyway, at least for first-order shelving):
Start with usual "all-pole" feedback comb 1/(1+a*z^-N) and replace "a" with some filter (strictly less than unity response, but otherwise doesn't matter really). Suppose we have a proto-filter:
(b0+b1*z^-1)/(1+a1*z^-1)
So if we plug that in we get:
1/(1+(b0+b1*z^-1)/(1+a1*z^-1)*z^-N)
= (1 + a1*z^-1) / (1 + a1*z^-1 + b0*z^-N + b1*z^-(N+1))
Since a digital filter is all-pass when the nominator coeffs are the reverse of the denominator coeffs, we can make this all pass by doing three things. First swap the order of zero coeffs (if they were minimum-phase, the zero(es) now become maximum phase):
(a1 + z^-1) / (1 + a1*z^-1 + b0*z^-N + b1*z^-(N+1))
Next, add a feedforward path with N samples delay:
(a1 + z^-1)*z^-N / (1 + a1*z^-1 + b0*z^-N + b1*z^-(N+1))
Finally add the "direct path" (with zeroes of the proto-filter reversed as above):
(a1 + z^-1)*z^-N / (1 + a1*z^-1 + b0*z^-N + b1*z^-(N+1))
(b1 + b0*z^-1 + a1*z^-N + z^-(N+1))
/ (1 + a1*z^-1 + b0*z^-N + b1*z^-(N+1))
This is all-pass as desired (because of the reversed coeffs). If you plot the phase-response you'll find that it's pretty much just an all-pass comb with frequency dependent feedback.
If it seems to blow up, try reversing the zero-coeffs of the prototype feedback-filter (ie minimum-phase poles, maximum-phase zeroes).. it's been a while and I can't remember if there was something like this required.. sorry.
In Abstract Chamber I used a sort-of direct form design for the all-pass filters (it does some other tricks too, but the "base" structure is more or less "figure-8"), working in terms of transfer functions, which unfortunately suffers from the usual coefficient accuracy problems, so one should design a better structure (it's something I'll look into it when I decide to work on reverbs next time), but the basic idea I used there is as follows (and it works with double precision anyway, at least for first-order shelving):
Start with usual "all-pole" feedback comb 1/(1+a*z^-N) and replace "a" with some filter (strictly less than unity response, but otherwise doesn't matter really). Suppose we have a proto-filter:
(b0+b1*z^-1)/(1+a1*z^-1)
So if we plug that in we get:
1/(1+(b0+b1*z^-1)/(1+a1*z^-1)*z^-N)
= (1 + a1*z^-1) / (1 + a1*z^-1 + b0*z^-N + b1*z^-(N+1))
Since a digital filter is all-pass when the nominator coeffs are the reverse of the denominator coeffs, we can make this all pass by doing three things. First swap the order of zero coeffs (if they were minimum-phase, the zero(es) now become maximum phase):
(a1 + z^-1) / (1 + a1*z^-1 + b0*z^-N + b1*z^-(N+1))
Next, add a feedforward path with N samples delay:
(a1 + z^-1)*z^-N / (1 + a1*z^-1 + b0*z^-N + b1*z^-(N+1))
Finally add the "direct path" (with zeroes of the proto-filter reversed as above):
(a1 + z^-1)*z^-N / (1 + a1*z^-1 + b0*z^-N + b1*z^-(N+1))
(b1 + b0*z^-1 + a1*z^-N + z^-(N+1))
/ (1 + a1*z^-1 + b0*z^-N + b1*z^-(N+1))
This is all-pass as desired (because of the reversed coeffs). If you plot the phase-response you'll find that it's pretty much just an all-pass comb with frequency dependent feedback.
If it seems to blow up, try reversing the zero-coeffs of the prototype feedback-filter (ie minimum-phase poles, maximum-phase zeroes).. it's been a while and I can't remember if there was something like this required.. sorry.
- KVRAF
- 8476 posts since 12 Feb, 2006 from Helsinki, Finland
Additional footnote on the above: I'm sure it decomposes into some sort of lattice structure that nests all-pass filters, but last I tried I couldn't figure out how to go from a feedback filter to such a lattice easily.. I'd love to hear suggestions. 
