; Modulating Delays - randomly modulating delays ; GATE (for gating the incoming signal) ; On Thrsh / Off Thrsh - thresholds at which the gate will open and close ; Rise Time - time it takes for the gate to ramp open ; Rel Time - time it takes for the gate to ramp closed ; SETUP ; Pan Width - extent of the random panning effect (0 = all layers centred) ; Spread - spread of the delay times of the different layers (if only 1 layer is active this control isn't really useful) ; if 'spread' is zero, all layers' delay time modulated between 'Min Time' and 'Max Time' ; Layers - Number of layers of modualting delays ; REVERB - there is a reverb effect within the each delay buffer ; Amount - amount of reverb signal added to the output of the delay buffer - within the delay buffer -, this will therefore be mixed into the feedback signal and fed back into to reverb also ; Time - reverb time ; Damping - damping of high frequencies within the delay effect ; ** CAUTION MUST BE TAKEN WHEN USING HIGH LEVELS OF DELAY FEEDBACK WITH A HIGH REVERB AMOUNT AS OVERLOADING CAN QUICKLY OCCUR ** ; OUTPUT ; Dry - level control for the dry (post gate) signal ; Wet - level control for the wet (delayed) signal ; SLIDERS ; Min Time - Minimum delay time in the delay time random modulation ; Max Time - Maximum delay time in the delay time random modulation ; Min Rate - Minimum rate in the random modulation ; Max Rate - Maximum rate in the random modulation ; Min F.back - Minimum feedback value in the modulation of delay feedback values ; Max F.back - Maximum feedback value in the modulation of delay feedback values ; Min Tone - Minimum cutoff frequency in a randomly modulting low-pass filter within each delay buffer ; Max Tone - Maximum cutoff frequency in a randomly modulting low-pass filter within each delay buffer form size(960, 340), caption("Modulating Delays"), pluginID("mdel") label bounds(200, 5, 80, 11), text("G A T E"), fontcolour("white") checkbox bounds( 10, 35,100, 20), text("Gate On/Off") channel("GateActive"), FontColour("White"), colour("lime") value(1) rslider bounds(100, 20, 60, 60), channel("OnThreshold"), text("On Thrsh."), range(0, 1, 0.05, 0.5, 0.001), colour(30,30,30) trackercolour(100,100,100) rslider bounds(160, 20, 60, 60), channel("OffThreshold"), text("Off Thrsh."), range(0, 1, 0.01, 0.5, 0.001), colour(30,30,30) trackercolour(100,100,100) rslider bounds(220, 20, 60, 60), channel("RiseTime"), text("Rise Time"), range(0, 10, 1, 0.5, 0.001), colour(30,30,30) trackercolour(100,100,100) rslider bounds(280, 20, 60, 60), channel("RelTime"), text("Rel.Time"), range(0, 10, 0.01, 0.5, 0.001), colour(30,30,30) trackercolour(100,100,100) checkbox bounds(340, 35, 90, 15), text("Gating") channel("gating"), FontColour("White"), colour("red") value(0) shape(ellipse) label bounds(487, 5, 80, 11), text("S E T U P"), fontcolour("white") line bounds(405, 25, 3, 50), colour("Grey") rslider bounds(420, 20, 60, 60), channel("width"), text("Pan Width"),range(0, 0.5, 0.5), colour(100,100,100) trackercolour(100,100,100) rslider bounds(480, 20, 60, 60), channel("spread"), text("Spread"), range(0, 4, 1, 0.5, 0.001), colour(100,100,100) trackercolour(100,100,100) rslider bounds(540, 20, 60, 60), channel("layers"), text("Layers"), range(1, 22, 8,1,1), colour(100,100,100) trackercolour(100,100,100) line bounds(610, 25, 3, 50), colour("Grey") label bounds(680, 5, 80, 11), text("R E V E R B"), fontcolour("white") rslider bounds(620, 20, 60, 60), channel("RvbAmt"), text("Amount"), range(0, 0.2, 0.06,1,0.001), colour(100,100,100) trackercolour(100,100,100) rslider bounds(680, 20, 60, 60), channel("RvbTime"), text("Time"), range(0.01,10, 7), colour(100,100,100) trackercolour(100,100,100) rslider bounds(740, 20, 60, 60), channel("damping"), text("Damping"), range(0, 1, 0.5), colour(100,100,100) trackercolour(100,100,100) line bounds(810, 25, 3, 50), colour("Grey") label bounds(856, 5, 80, 11), text("O U T P U T"), fontcolour("white") rslider bounds(825, 20, 60, 60), channel("dry"), text("Dry"), range(0, 4, 0, 0.5, 0.001), colour(160,160,160) trackercolour(160,160,160) rslider bounds(885, 20, 60, 60), channel("wet"), text("Wet"), range(0, 4, 1, 0.5, 0.001), colour(160,160,160) trackercolour(160,160,160) line bounds( 0, 95,960, 3), colour("Grey") hslider bounds(10,110, 940, 30), channel("MinTime"), text(Delay Time Minimum), range(0.001, 10, 0.131, 0.5, 0.000001),colour("blue"), trackercolour(blue) hslider bounds(10,130, 940, 30), channel("MaxTime"), text(Delay Time Maximum), range(0.001, 10, 0.9, 0.5, 0.000001), colour("blue"), trackercolour(blue) hslider bounds(10,160, 940, 30), channel("MinRate"), text(Random Rate Minimum), range(0.001, 10, 0.1, 0.5, 0.00001), colour("red"), trackercolour(red) hslider bounds(10,180, 940, 30), channel("MaxRate"), text(Random Rate Maximum), range(0.001, 10, 0.2, 0.5, 0.00001), colour("red"), trackercolour(red) hslider bounds(10,210, 940, 30), channel("MinFB"), text(Delay Feedback Minimum), range(0, 0.999, 0.95,1,0.001), colour("yellow"), trackercolour(yellow) hslider bounds(10,230, 940, 30), channel("MaxFB"), text(Delay Feedback Maximum), range(0, 0.999, 0.975,1,0.001), colour("yellow"), trackercolour(yellow) hslider bounds(10,260, 940, 30), channel("MinTone"), text(Tone Cutoff Frequency Minimum), range(4, 14, 11), colour(purple), trackercolour(purple) hslider bounds(10,280, 940, 30), channel("MaxTone"), text(Tone Cutoff Frequency Maximum), range(4, 14, 14), colour(purple), trackercolour(purple) label bounds( 10,320, 200, 12), text("Author: Iain McCurdy |2013|"), FontColour("grey") -n -d sr = 44100 ksmps = 16 nchnls = 2 0dbfs=1 opcode DelayIteration,aa,aakkkkkkkkkkkKiii aL,aR,kMinTime,kMaxTime,kMinRate,kMaxRate,kMinFB,kMaxFB,kwidth,kMinTone,kMaxTone,kRvbAmt,kRvbTime,kdamping,ispread,icount,ilayers xin kdel rspline kMinTime,kMaxTime,kMinRate,kMaxRate kdel limit kdel,0.001,10 adel interp kdel kFB rspline kMinFB,kMaxFB,kMinRate,kMaxRate kFB limit kFB,0,1 iMaxDel = 10 iws = 4 aout1, aout2 init 0 ktone rspline kMinTone, kMaxTone,kMinRate,kMaxRate ktone = cpsoct(ktone) idelOS random 0,ispread abuf delayr iMaxDel+idelOS aout1 deltap3 adel+idelOS arvb nreverb aout1, kRvbTime, kdamping aout1 = aout1 + arvb*kRvbAmt aout1 dcblock2 aout1 aout1 tone aout1,ktone delayw aL + aout1*kFB abuf delayr iMaxDel+idelOS aout2 deltap3 adel+idelOS arvb nreverb aout2, kRvbTime, kdamping aout2 = aout2 + arvb*kRvbAmt aout2 dcblock2 aout2 aout2 tone aout2,ktone delayw aR + aout2*kFB kpan rspline 0.5-kwidth,0.5+kwidth,kMinRate,kMaxRate kpan limit kpan,0,1 apan interp kpan aout1 = aout1*(1-apan) aout2 = aout2*(apan) amix1,amix2 init 0 amix1 = 0 amix2 = 0 if icountkthreshold then kgate = 1 kthreshold = kOnThreshold chnset koff,"gating" else kgate = 0 kthreshold = kOffThreshold chnset kon,"gating" endif kgate SwitchPort kgate,kRiseTime,0.1 kgate expcurve kgate,8 agate interp kgate aL = aL * agate aR = aR * agate endif ktrig trigger kGateActive,0.5,1 if ktrig=1 then chnset koff,"gating" endif /* REINITIALISING */ ktrig changed klayers,kspread if ktrig=1 then reinit UPDATE endif UPDATE: /* CALL THE UDO */ aout1,aout2 DelayIteration aL,aR,kMinTime,kMaxTime,kMinRate,kMaxRate,kMinFB,kMaxFB,kwidth,kMinTone,kMaxTone,kRvbAmt,kRvbTime,kdamping,i(kspread),1,i(klayers) rireturn outs (aout1 * kwet) + (aL * kdry), (aout2 * kwet) + (aR * kdry) endin i 1 0 360000