1declare name 		"Stereo Verb";
2declare category        "Reverb";
3declare version 	"0.01";
4declare author 		"brummer";
5declare license 	"BSD";
6declare copyright 	"(c)brummer 2008";
7
8import("stdfaust.lib");
9
10import("guitarix.lib");
11
12/*-----------------------------------------------
13		freeverb  by "Grame"
14  -----------------------------------------------*/
15
16// Filter Parameters
17
18combtuningL1	= 1116;
19combtuningL2	= 1188;
20combtuningL3	= 1277;
21combtuningL4	= 1356;
22combtuningL5	= 1422;
23combtuningL6	= 1491;
24combtuningL7	= 1557;
25combtuningL8	= 1617;
26
27allpasstuningL1	= 556;
28allpasstuningL2	= 441;
29allpasstuningL3	= 341;
30allpasstuningL4	= 225;
31
32roomsizeSlider 	= vslider("RoomSize[name:Room Size]", 0.5, 0, 1, 0.025)*0.28 + 0.7;
33dampslider 	= vslider("damp[name:Damp]",0.5, 0, 1, 0.025);
34combfeed 	= roomsizeSlider;
35//wetslider 	= 0.5 + vslider("wet_dry[name:wet/dry]", 0, -0.5, 0.5, 0.1);
36wet_dry = vslider("wet_dry[name:Dry/Wet]",  50, 0, 100, 1) : /(100);
37dry = 1 - wet_dry;
38
39// Reverb components
40
41monoReverb(fb1, fb2, damp, spread)
42	= _ <:	comb(combtuningL1+spread, fb1, damp),
43			comb(combtuningL2+spread, fb1, damp),
44			comb(combtuningL3+spread, fb1, damp),
45			comb(combtuningL4+spread, fb1, damp),
46			comb(combtuningL5+spread, fb1, damp),
47			comb(combtuningL6+spread, fb1, damp),
48			comb(combtuningL7+spread, fb1, damp),
49			comb(combtuningL8+spread, fb1, damp)
50		+>
51		 	allpass (allpasstuningL1+spread, fb2)
52		:	allpass (allpasstuningL2+spread, fb2)
53		:	allpass (allpasstuningL3+spread, fb2)
54		:	allpass (allpasstuningL4+spread, fb2)
55		;
56
57//----------------------------------------------------------------
58
59lfol = os.oscrs; // sine for left channel
60
61freq	 = hslider("LFO freq [name:LFO Freq][unit:Hz]", 0.2, 0, 5, 0.01);
62pingpong   = checkbox("invert[enum:linear|pingpong]");
63
64fxctrl(g,w,Fx) =  _ <: (*(g) <: _ + Fx ), *(1-w) +> _;
65
66freeverb_r = (_<:*(dry),(*(wet_dry):fxctrl(0.015,wet_dry, monoReverb(combfeed, 0.5, dampslider, 23))* (1-(lfol(freq)*pingpong))):>_);
67freeverb_l = (_<:*(dry),(*(wet_dry):fxctrl(0.015,wet_dry, monoReverb(combfeed, 0.5, dampslider, 23))* (1-(-1*lfol(freq)*pingpong))):>_);
68process = freeverb_r, freeverb_l;
69