FreeVerb2 A two-channel reverb


FreeVerb.ar(in, mix, room, damp, mul, add)

FreeVerb2.ar(in1, in2, mix, room, damp, mul, add)


BlackRain's yet 'nother FreeVerb implementation. oh yes.

coded from experiments with faust.


Valid parameter range from 0 to 1. Values outside this range are clipped by the UGen.


in1 - input signal channel 1

in2 - input signal channel 2

mix - dry/wet balance. range 0..1

room - room size. rage 0..1

damp - Reverb HF damp. range 0..1



Examples


s.boot

// FreeVerb - 1x1 ugen

(

z = SynthDef(\src, {|mix = 0.25, room = 0.15, damp = 0.5|

Out.ar(0,

FreeVerb.ar(

Decay.ar(Impulse.ar(1), 0.25, LFCub.ar(1200,0,0.1)), // mono src

mix, // mix 0-1

room, // room 0-1

damp // damp 0-1 duh

) ! 2 //fan out...

);

}).play

)

z.set(\room, 0.7)

z.set(\mix, 0.4)

z.set(\damp, 0.2)


z.free


//it expands as any ugen would

(

z = SynthDef(\src, {|mix = 0.25, room = 0.15, damp = 0.5|

Out.ar(0,

FreeVerb.ar(

Pan2.ar(

Decay.ar(Impulse.ar(1), 0.25, LFCub.ar(1200,0,0.1)),

LFNoise1.ar(1).range(-1,1)

),

mix,

room,

damp

)

);

}).play

)

z.set(\room, 0.7)

z.set(\mix, 0.4)

z.set(\damp, 0.2)


z.free


//but nah... go for the real thing. 2x2


// FreeVerb2 - demo synthdef

(

SynthDef(\FreeVerb2x2, {|outbus, mix = 0.25, room = 0.15, damp = 0.5, amp = 1.0|

var signal;


signal = In.ar(outbus, 2);


ReplaceOut.ar(outbus,

FreeVerb2.ar( // FreeVerb2 - true stereo UGen

signal[0], // Left channel

signal[1], // Right Channel

mix, room, damp, amp)); // same params as FreeVerb 1 chn version


}).send(s);

)


// 2ch source

(

a = SynthDef(\src2x2, {

Out.ar(0,

Decay.ar(Impulse.ar(1), 0.25, LFCub.ar(1200,0,0.1)) ! 2 +

Pan2.ar(

Decay.ar(Impulse.ar(1, pi), 0.1, WhiteNoise.ar(0.1)),

LFNoise1.kr(0.5).range(-1,1)

)

)

}).play

)


//kick it in

z = Synth(\FreeVerb2x2, [\outbus, 0], addAction:\addToTail)

//experiment with some settings

z.set(\room, 0.7)

z.set(\mix, 0.33)

z.set(\damp, 0.9)


// silence

[a,z].do(_.free)


// crucial lib example

(

Patch({|mix =0.33, room = 0.25, damp = 0.7, amp = 0.1|

var signal;


signal = Decay.ar(Impulse.ar(1), 0.25, LFCub.ar(1200)) ! 2 +

Pan2.ar(

Decay.ar(Impulse.ar(1, pi), 0.1, WhiteNoise.ar),

LFNoise1.kr(0.5).range(-1,1)

);


FreeVerb2.ar(

signal[0], // Left channel

signal[1], // Right Channel

mix, room, damp, amp)


}).gui

)