FreeVerb A 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.

in - input signal.

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

)