Non-linear reverbs

Wetterberg's icon

So I've been reminiscing about the Ensoniq DP4 multieffect and its odd odd reverbs, and contemplating how to go about it with max.

It seems to me that I'd either have to employ some sort of gating/envelope following algorithm to choke feedback inside the reverb, or just straight up go with convolution.

What are my options, exactly?
Thanks.

Peter McCulloch's icon

I like lots of taps on a delay line (64+!) combined with a matrix~. Not the same exactly, but can be combined with other reverberation components to make some very non linear responses.

Roman Thilenius's icon

i agree, a big set of tapping buffers would be one way to create a verb with a nonlinear "envelope". eventually one can get somehow satisfying results by adding a "normal" diffusion section afterwards.

Roman Thilenius's icon

hm, or what about 64+ parallel systems of classic 3-5-firstreflections based on allpasses? all with the same settings, each with 50 samples more input delay~ and just the volume of all the parallel copies is controlled by the envelope?

Wetterberg's icon

@peter: great idea, that. Should be really simple to roll something, too.
...why matrix~, if they're all coming from the same delay line? Do you mean outputs for the feedback, and outputs for the actual output?

And yeah, it could get quite realistic with some added reflections thrown in there.

@roman: That sounds expensive! :) And oddly specific, do you have something up your sleeve?

Peter McCulloch's icon

Matrix~ (with three arguments so it can have variable gain) let's you control the volume and panning of each tap. Check out PM.MatrixVolumePan for this...

If you want to see an implementation of this, my UltraComb M4L device does this, though it only uses 32 taps.

You can get a lot out of this without feedback, though it can be nice with a bit, too.

Wetterberg's icon

Woah, didn't see PM.MatrixVolumePan in your libs! Nice. Nice, nice.

Yeah, matrix~ has a ton of potential, but it's always been finnicky and in dire need of auxillary objects. So thanks for this .zip - rifling through it right now.

Wetterberg's icon

Way to bury the lede there, Peter. Your helpfile was like, identical to the patch I was whipping up. Great minds, hehe. I'm really loving the @outlets setting, makes expansion super easy. Great work.

Ah well, I ended up with a really nice diffused delay thing here. Is it bad of me to use two Gigaverbs just for diffusion? Whoops.

Peter McCulloch's icon

Thanks! Back in the days of Altivec, PM.MatrixVolumePan was way faster than *~ and line~. Matrix~ = multiply + offset, so you can also use it for fun things like additive synthesis with frequency shifting on some partials. Nowadays, I'm more likely to just do it in poly~, since I'd rather have the extra control.

I did make a Hammond organ model with it, using 63 oscillators (?!) and a matrix~ with 9 outs. (scale the output of an outlet and you have a drawbar...) It worked better than poly~, because you couldn't have phase cancellation.