stereo reverb alg advice sought

DSP, Plugin and Host development discussion.
Post Reply New Topic
RELATED
PRODUCTS

Post

i've had several forays into reverb (and into FDN and related) generally oriented towards efficient and thus minimal implementation. i've tried various geometric schemes and usually stereo is achieved in things that get used by summing taps from various locations selected for minimal phase interaction (how does gardner do this?). since these are low part builds that's tricky and usually results in like a m+s m-s scenario which can have overt phasing depending on the taps.

i'm slopping a reverb together in an application where it isn't the forefront and thought i'd try doing things differently (as always) so am using a 4 count delay matrix ER stage and a 4 count allpass delay matrix stage, where two of the allpass lines have lowpass and nested allpass delays, which is about the size and quality i want. the ER feeds into the opposite channel, width is a good thing for this app. the stereo imaging isn't too distinguished otherwise.

i'm due to start tearing this thing apart later today as i'm not committed to the current structure and thought i'd see if anyone had any tips on stereo imaging in minimal builds..
you come and go, you come and go. amitabha neither a follower nor a leader be tagore "where roads are made i lose my way" where there is certainty, consideration is absent.

Post

Beginners guide to tuning reverbs: first you come up with an algorithm.. then you spend a few weeks learning experimentally how to tune this particular algorithm. Then you spend a few weeks tuning it in order to decide whether this is finally going to result in something actually workable, or whether you should possibly start over from the algorithm design part. Then you repeat this for a couple of dozen times, and eventually you will have a reverb that sounds "maybe not totally horrible." During the process you make all kinds of theories about how to predictably construct good sounding reverbs, or how to structure your reverb in order to obtain certain behavior, but in practice these almost invariably turn out to be false and any progress (or regress, or just random warping from one result to another) is typically purely random.

The other alternative is to visit your local witch doctor and purchase a potion that would transforms you into Sean Costello (who seems to be able to come up with very good sounding reverbs at a rather frightening rate).

Post

Haven't fooled with reverb for a long time. Agree with mystran that about any topography of loops tends to suck, at least when I do it. Some folk seem to get it right.

About the smoothest I managed to construct was something made out of nested allpass loops.

One experiment I got a mono nested allpass loop tuned so that it didn't sound gawd awful. Then I kept the same loop delay ratios and feedback consts, duplicated the loop for another channel. Then linear scaled all the time constants in the second channel copy.

Scaled the second copy a little longer, so that the echo pattern of left vs right would not reinforce. The scaled copy was about as well behaved as the prototype, because the prototype had already been tuned pretty smooth. The copy preserved the same delay time ratios, thereby inheriting about the same buildup and decay behavior, only a little longer on the right vs the left.

The diffusion or density knob, as best recall, adjusted the nested loop feedback, and the reverb time knob adjusted the overall loop feedback. So the reverb time of the right (longer) loop could be set to match the left (shorter) loop by using slightly smaller overall feedback values on the longer loop.

As best recall, also tried keeping the same topography in both left and right loops, but make some interior nested loops shorter in L versus R, and other interior nested loops shorter in R versus L, intended to keep the overall length of both loops about the same, but with non interfering different echo patterns on L versus R.

Was it gardner who suggested making a mono main loop, and then tacking on a few stages of short allpass loops with different loop times, to synthesize stereo out of the main mono verb?

As best I recall, I tried that but it didn't seem real successful, at least with time consts I tried.

Post

Probably the easiest way to get something reasonable, is to do two chains of (shroeder) all-pass that are "roughly symmetric" with just slight differences in their delay lenghts (but each chain having a large distribution from the shortest to the longest.. basically the longest you can make it without getting ugly echo patterns). Then somewhere in the middle of those you put a pure delay, and then at the end you use a 45 degrees (or close) rotation matrix on the pair of outputs, to get a pair of values to feed-back into the input (this way each chain feeds each other chain; note that if you rotate less than 45 degrees, you can have them feeding each other more gradually too; reflections are unitary too, but not sure if I've ever got anything useful from those when it comes to 2x2 feedback matrix for a pair of all-pass chains). Without damping, this kind of structure is (theoretically with exact arithmetic) stable and loss-less and I guess it's what they call a "figure-8" structure. Then you can add damping either at some points in the loop, or built into the all-pass filters (like you'd do for FDN delays). This kind of structure is fairly easy to tune, as changing the all-pass lengths has a fairly predictable effect on the resulting echo distribution. If the chains are "roughly symmetric" and you feed one channel of input to each, and then take the two inputs using "roughly symmetric" taps from the two chains, you'll get "roughly sensible" stereo image pretty easily.

So.. if you want something really simple that doesn't sound totally horrible, I'd say all-pass figure-8 loop is the way to go. :)

Post

mystran wrote:The other alternative is to visit your local witch doctor and purchase a potion that would transforms you into Sean Costello [...]
lol
Fabien from Tokyo Dawn Records

Check out my audio processors over at the Tokyo Dawn Labs!

Post

thanks for the timely discussion, think i know what to do :)
you come and go, you come and go. amitabha neither a follower nor a leader be tagore "where roads are made i lose my way" where there is certainty, consideration is absent.

Post

JCJR wrote:Haven't fooled with reverb for a long time. Agree with mystran that about any topography of loops tends to suck, at least when I do it. Some folk seem to get it right.

About the smoothest I managed to construct was something made out of nested allpass loops.

One experiment I got a mono nested allpass loop tuned so that it didn't sound gawd awful. Then I kept the same loop delay ratios and feedback consts, duplicated the loop for another channel. Then linear scaled all the time constants in the second channel copy.

Scaled the second copy a little longer, so that the echo pattern of left vs right would not reinforce. The scaled copy was about as well behaved as the prototype, because the prototype had already been tuned pretty smooth. The copy preserved the same delay time ratios, thereby inheriting about the same buildup and decay behavior, only a little longer on the right vs the left.

The diffusion or density knob, as best recall, adjusted the nested loop feedback, and the reverb time knob adjusted the overall loop feedback. So the reverb time of the right (longer) loop could be set to match the left (shorter) loop by using slightly smaller overall feedback values on the longer loop.

As best recall, also tried keeping the same topography in both left and right loops, but make some interior nested loops shorter in L versus R, and other interior nested loops shorter in R versus L, intended to keep the overall length of both loops about the same, but with non interfering different echo patterns on L versus R.
Take that technique, and cross-couple the feedback paths. In other words, instead of

leftLoopEnd->leftLoopStart
rightLoopEnd->rightLoopStart

try

leftLoopEnd->rightLoopStart
rightLoopEnd->leftLoopStart

This smooths things out a lot.

As far as stereo images, Keith Barr imparted some serious wisdom in this thread:

www.spinsemi.com/forum/viewtopic.php?t=92

Here's his best post from the thread:
Been thinking this over... Maybe you need my short lecture on reverb programming. I hope its short enough...

First of all, if anyone tells you that his algorithm is truly representitive of a real space, he's kidding himself, you, or both. Real spaces are hideously complex compared to a simple digital reverb algorythm. The trick is that digital reverbs don't need complexity to fool the human hearing system.

The size, shape and wall treatment of a space determine how it sounds, obviously. Large spaces will have a longer density buildup, but one with pillars (as with the parking garage) will have a faster buildup than one without pillars. Long distances mean long delays, at about 1100ft/S. Only the most rigid walls (cave) will reflect deep bass, man-made walls will give a bit and lose bass. Tiled walls reflect the highs best, plaster and drywall not so much. Add curtains and the mids and highs go away very quickly and cause a short reverb time.

What's really wonderful about digital algorithms and modern music is that we don't have to duplicate a physical space. In fact, most physical spaces are bad reverbs, and we can make 'em better digitally. -Too bad that manufacturers insist their algorithms have familiar names.

The best resonator topology is delays and all passes in a loop, usually two all passes, 1 delay, 2 allpasses, 1 delay, repeat as required, tie into single loop. Inject inputs at the juncture of delay outputs and the allpass pair input. Take outputs from delays as required.

Drive the resonator with a few series allpasses to initially complicate the signal. Listen for ringing with various program sources (usually percussive) at low RT and adjust the all pass filter lengths for minimum or acceptable ringing. Adjust delay tap outputs to get an acceptable initial sound, and if more distinct intial response is required, try injecting the input signal at the delay inputs, after the loop allpasses.

Finally, move a few of the walls by putting chorus generators in the delay element of a few of the all passes. This smears out any resonances that may arise in the reverb tail. SIN on one and COS on another from a single LFO works well. Listen for a balance between pitch variation and reduction of ringing. If a more distinct initial sound is required, reserve some delay that the input (usually after the input allpasses) can be passed through, and derive some taps from the delay to the output.

A consideration is frequency response. Real rooms usually have extreme response peaks and dips, and yet this may be a problem in music production (or PA use). Remember that whenever multiple signals, delayed by different amounts are summed, some frequencies will be reinforced, others canceled. If you want a very flat reverb, use as much delay as possible in the loop, (distributed between APs and delays), which allows a lower loop gain to achieve the RT you're looking for. Drive the reverb at as few points as possible, and take one channel from one point and the other channel from another point. The drawback is lower initial impulse density, but this is a very nice detail; a rough initial sound with a smooth tail is really neat! -Always take signals from delays, NOT the delays that are internal to an all-pass. The signal within an allpass has a comb response.

Notes:

When banging down ringing tones, try reversing the coefficient signs of a given allpass. The feed-forward and feed-back coefficients need to be of the same magnitude but opposite sign for overall flattness, but it does not matter which is which, and the impulse responses are very different...

A loop of 2AP, 1 delay, 2AP, 1 delay is just fine for a minimal structure. 3 or more APs per delay really builds impulse density quickly, and could be used with no pre-allpasses, definately something to try.

Parallel structures are also interesting. Do two separate but similar loops and see what happens when they are really close in dimension but not exactly the same! (one on the left, one on the right).

Loop filtering is really important. Filter both the highs and the lows, and do it as often within the loop as required. I suggest a shelving LPF and a shelving HPF at each delay output (but of course, not the AP delays). You may be able to get away with one filter section in the loop, but if you have a lot of AP/delay sections, you may hear the response 'stepping down' at each passage when driving the system with an impulse... If so, add more filter blocks around the loop.

Loop filtering really adds character to the sound, and is extremely important. The FV-1 was designed to do a shelving filter with two ticks with reverbs in mind. Especially with short loops, remember that the sound is going around the loop many times as the reverb decays away... A 2 second RT system with a total of 200mS internal delay goes around 10 times to get 60 dB down. -The filters are used over and over on a single impulse. Therefore, use both frequency and shelving to get what you want. A filter with only a dB or so of shelf loss (K = -0.1) can still be effective.

A simple sinX/X filter can be generated by simply summing two adjacent outputs of a delay, and makes for cheap HF loss.

RDAX DEL#,KRT/2
RDAX DEL#-1,KRT/2

should do the trick.

If you build the simplest nice sounding structure, 2AP / 1 delay / 2AP / 1 delay, and drive both sections with mono (complicated by input APs) at the delay output / AP input juncture, and take outputs from the delay inputs to each channel (simplest coding; write delay then write DAC), you may find that the initial sound is not balanced between right and left. This is because the total delay in the first AP pair is not close enough to the total delay in the second AP pair. Make these delays all different, but try to make the total delay of each pair similar.

I hope this helps. Reverb programming is something I have done for so many years now, and I still don't tire of it. I do however wish that requests for reverb algorithms was more toward something neat and different rather than "HALL", or especially "the HALL program from a cheap Yamaha mixer"!

If you get deep into this, you will find some spectacular effects are possible, but they are not "standard", so the little minds just get smaller still.
In general, the algorithms at the Spin Semiconductor website are very educational, if you don't mind learning a little assembly syntax.

Sean Costello

Post

Thanks Sean, fascinating. Maybe some day will revisit the issue. When I was working on it, the task was to get a good smooth non ringing generic synthetic verb, and get it done as good and soon as possible before the boss decided the task was taking too much time and pulled the plug before it was finished. :) There wasn't the luxury of unlimited time though I recall spending a few weeks playing with it. Though am rather slow and non productive.

Tried various strategies published at the time. The nested allpass seemed the quickest path to success, having good density and fairly flat freq response. Though the magic parms applied to some other algorithm might have worked better given sufficient time to work on it.

I used hp and lp filters. Considered chorusing taps, but didn't get around to trying it. Was guessing maybe that was one of the tricks used in early lexicon verbs.

The experimentation seemed very sensitive to any changes. After I got a fairly flat, fairly dense single loop-- Then duplicated the loop a little longer for the second channel. The final version may have had some cross feedback between the two reverb lines, can't recall. I do recall that some experiments with cross channel feedback seemed to take a fairly smooth reverb, and make it more grainy and less flat with cross feedback added. Not exactly intuitive. :)

A lot of the old simple textbook explanations sucked real bad when implemented, compared to reverbs found even in some of the cheapo more modern gadgets.

Post

i just copyrighted everything up to nested nested nested nested nested. :)
you come and go, you come and go. amitabha neither a follower nor a leader be tagore "where roads are made i lose my way" where there is certainty, consideration is absent.

Post

+1 for the Keith Barr(RIP) topology, was the easiest to tune to sound 'not awful', and easily expandable. Never could get the 'classic' nested allpass topology to sound decent. I once did a 9x delay 'checkersboard' matrix, which wasn't too bad ->

Delay -> AP Delay -> Delay -> Matrix
AP delay -> Delay -> AP Delay -> Matrix
Delay -> AP Delay -> Delay -> Matrix


Andrew

Post

Nobody's mentioned using a Householder Feedback Matrix yet? I'm surprised, they do add a lot of density.

Test your reverb with many different sources included a single sample impulse. Also, have breaks, and listen to comparative reverbs. Listening fatigue sets in and you can come back the next day and be amazed how wrong it sounds, I found this to be an issue with reverbs more than anything else.
Dave

Post

quikquak wrote:Nobody's mentioned using a Householder Feedback Matrix yet? I'm surprised, they do add a lot of density.
Well.. yeah .. if you're going for density, then those are great. If you're going for anything else, like maybe "nice sounding" reverb, then I wouldn't really bother. First of all, any FDN is a huge pain to tune (Tila is an FDN and even if some people apparently love it, it's going to be the last one I ever make, because it's just not worth the effort) and secondly, you can build a lot nicer sounding matrices by using Gibbs rotations (or reflections) with somewhat irregular angles, which can give you basically the same maximal density build-up, but less regular echo amplitudes and less obvious repetition in the tail.

In fact, I'd personally say that most of the time an FDN with a good matrix and a bad selection of delays will probably sound much better than an FDN with a bad matrix and a good selection delays... and in my experience, none of the commonly suggested regular matrices sound very good.

But really.. if you want "good sounding reverb with minimal effort" then forget FDNs and go with the all-pass loops. :)

Post

They still need to try it, as we all did. Mixing and leaking hadamard matrix configurations into each other shouldn't be dismissed, even if they are little expensive:-
http://www.uow.edu.au/~jennie/hadamard.html

Post Reply

Return to “DSP and Plugin Development”