import("stdfaust.lib"); import("rack.lib"); // Using metadata, one switch and five knobs are used to control the model frenchBell_ui = pm.frenchBell(strikePosition,strikeCutoff,strikeSharpness,gain,gate) with { strikePosition = nentry("v:frenchBell/[0]strikePosition", 0,0,4,1); strikeCutoff = hslider("v:frenchBell/[1]strikeCutOff", 6500,20,20000,1); strikeSharpness = hslider("v:frenchBell/[2]strikeSharpness", 0.5,0.01,5,0.01); // Connection with VCV knob and switch gain = hslider("v:frenchBell/[3]gain [knob:1]",1,0,1,0.01); gate = button("v:frenchBell/[4]gate [switch:1]") : hbargraph("[switchlight_red:1]", 0, 1); }; freeverb_demo = _,_ <: (*(g)*fixedgain,*(g)*fixedgain : re.stereo_freeverb(combfeed, allpassfeed, damping, spatSpread)), *(1-g), *(1-g) :> _,_ with { scaleroom = 0.28; offsetroom = 0.7; allpassfeed = 0.5; scaledamp = 0.4; fixedgain = 0.1; origSR = 44100; parameters(x) = hgroup("Freeverb",x); knobGroup(x) = parameters(vgroup("[0]",x)); // Connection with VCV knobs damping = knobGroup(vslider("[0] Damp [knob:2] [style: knob] [tooltip: Somehow control the density of the reverb.]",0.5, 0, 1, 0.025)*scaledamp*origSR/ma.SR); combfeed = knobGroup(vslider("[1] RoomSize [knob:3] [style: knob] [tooltip: The room size between 0 and 1 with 1 for the largest room.]", 0.5, 0, 1, 0.025)*scaleroom* origSR/ma.SR + offsetroom); spatSpread = knobGroup(vslider("[2] Stereo Spread [knob:4] [style: knob] [tooltip: Spatial spread between 0 and 1 with 1 for maximum spread.]",0.5,0,1,0.01)*46*ma.SR/origSR : int); g = parameters(vslider("[1] Wet [knob:5] [tooltip: The amount of reverb applied to the signal between 0 and 1 with 1 for the maximum amount of reverb.]", 0.3333, 0, 1, 0.025)); }; process = frenchBell_ui <: freeverb_demo : *(5),*(5);