1//====================================================== 2// 3// Freeverb 4// Faster version using fixed delays (20% gain) 5// 6//====================================================== 7 8declare name "freeverb -- a Schroeder reverb"; 9declare author "Yann Orlarey"; 10declare version "1.0"; 11 12// Constant Parameters 13//-------------------- 14 15fixedgain = 0.015; 16scalewet = 3.0; 17scaledry = 2.0; 18scaledamp = 0.4; 19scaleroom = 0.28; 20offsetroom = 0.7; 21initialroom = 0.5; 22initialdamp = 0.5; 23initialwet = 1.0/scalewet; 24initialdry = 0; 25initialwidth= 1.0; 26initialmode = 0.0; 27freezemode = 0.5; 28stereospread= 23; 29allpassfeed = 0.5; 30 31 32// Filter Parametres 33//------------------ 34 35combtuningL1 = 1116; 36combtuningL2 = 1188; 37combtuningL3 = 1277; 38combtuningL4 = 1356; 39combtuningL5 = 1422; 40combtuningL6 = 1491; 41combtuningL7 = 1557; 42combtuningL8 = 1617; 43 44allpasstuningL1 = 556; 45allpasstuningL2 = 441; 46allpasstuningL3 = 341; 47allpasstuningL4 = 225; 48 49 50// Control Sliders 51//-------------------- 52// Damp : filtrage des aigus des echos (surtout actif pour des grandes valeurs de RoomSize) 53// RoomSize : taille de la piece 54// Dry : signal original 55// Wet : signal avec reverbration 56 57dampSlider = hslider("damp",0.5, 0, 1, 0.025)*scaledamp; 58roomsizeSlider = hslider("roomsize", 0.5, 0, 1, 0.025)*scaleroom + offsetroom; 59wetSlider = hslider("wet", 0.25, 0, 1, 0.025); 60drySlider = hslider("dry", 0, 0, 1, 0.025); 61combfeed = roomsizeSlider; 62 63 64 65 66 67// Comb and Allpass filters 68//------------------------- 69 70allpass(dt,fb) = (_,_ <: (*(fb),_:+:@(dt)), -) ~ _ : (!,_); 71 72comb(dt, fb, damp) = (+:@(dt)) ~ (*(1-damp) : (+ ~ *(damp)) : *(fb)); 73 74 75// Reverb components 76//------------------ 77 78monoReverb(fb1, fb2, damp, spread) 79 = _ <: comb(combtuningL1+spread, fb1, damp), 80 comb(combtuningL2+spread, fb1, damp), 81 comb(combtuningL3+spread, fb1, damp), 82 comb(combtuningL4+spread, fb1, damp), 83 comb(combtuningL5+spread, fb1, damp), 84 comb(combtuningL6+spread, fb1, damp), 85 comb(combtuningL7+spread, fb1, damp), 86 comb(combtuningL8+spread, fb1, damp) 87 +> 88 allpass (allpasstuningL1+spread, fb2) 89 : allpass (allpasstuningL2+spread, fb2) 90 : allpass (allpasstuningL3+spread, fb2) 91 : allpass (allpasstuningL4+spread, fb2) 92 ; 93 94stereoReverb(fb1, fb2, damp, spread) 95 = + <: monoReverb(fb1, fb2, damp, 0), monoReverb(fb1, fb2, damp, spread); 96 97 98// fxctrl : add an input gain and a wet-dry control to a stereo FX 99//---------------------------------------------------------------- 100 101fxctrl(g,w,Fx) = _,_ <: (*(g),*(g) : Fx : *(w),*(w)), *(1-w), *(1-w) +> _,_; 102 103 104 105// Freeverb 106//--------- 107 108freeverb = vgroup("freeverb", fxctrl(fixedgain, wetSlider, stereoReverb(combfeed, allpassfeed, dampSlider, stereospread))); 109 110process = freeverb; 111