; EnvelopeFollower.csd
; Written by Iain McCurdy, 2012.
form caption("Envelope Follower") size(530, 100), pluginid("envf")
image pos(0, 0), size(530, 100), colour("brown"), shape("rounded"), outlinecolour("white"), outlinethickness(4)
vmeter bounds(20, 10, 15, 80) channel("Meter") value(0) outlinecolour("black"), overlaycolour(20, 3, 3,255) metercolour:0(255,100,100,255) metercolour:1(255,150,155, 255) metercolour:2(255,255,123, 255) outlinethickness(3)
rslider bounds( 40, 11, 75, 75), text("Sensitivity"), channel("sens"), range(0, 1, 0.65), colour(255,100,100), textcolour(255,255,200), trackercolour(255,255,150)
rslider bounds(110, 6, 45, 45), text("Att."), channel("att"), range(0.001, 0.5, 0.01, 0.5, 0.001), colour(255,200,100), textcolour(255,255,200), trackercolour(255,255,150)
rslider bounds(110, 51, 45, 45), text("Dec."), channel("rel"), range(0.001, 0.5, 0.2, 0.5, 0.001), colour(255,200,100), textcolour(255,255,200), trackercolour(255,255,150)
rslider bounds(150, 11, 75, 75), text("Frequency"), channel("freq"), range(10, 10000, 1000, 0.5), colour(255,100,100), textcolour(255,255,200), trackercolour(255,255,150)
label bounds(225, 15, 85, 14), text("Type"), fontcolour(255,255,200)
combobox bounds(225, 30, 85, 20), text("lpf18","moogladder","butlp","tone"), value("1"), channel("type")
rslider bounds(310, 11, 75, 75), text("Resonance"), channel("res"), range(0, 1, 0.75), colour(255,100,100), textcolour(255,255,200), trackercolour(255,255,150), identchannel("resID")
rslider bounds(380, 11, 75, 75), text("Distortion"), channel("dist"), range(0, 1.00, 0), colour(255,100,100), textcolour(255,255,200), trackercolour(255,255,150), identchannel("distID")
rslider bounds(450, 11, 75, 75), text("Level"), channel("level"), range(0, 1.00, 1), colour(255,200,100), textcolour(255,255,200), trackercolour(255,255,150)
-d -n
sr = 44100
ksmps = 64
nchnls = 2
0dbfs = 1
; Author: Iain McCurdy (2012)
opcode EnvelopeFollower,a,akkkkkkk
ain,ksens,katt,krel,kfreq,ktype,kres,kdist xin ; READ IN INPUT ARGUMENTS
setksmps 4
; ATTCK.REL. - ADJUST THE RESPONSE OF THE ENVELOPE FOLLOWER HERE
aFollow follow2 ain, katt, krel ; AMPLITUDE FOLLOWING AUDIO SIGNAL
kFollow downsamp aFollow ; DOWNSAMPLE TO K-RATE
kFollow expcurve kFollow/0dbfs,0.5 ; ADJUSTMENT OF THE RESPONSE OF DYNAMICS TO FILTER FREQUENCY MODULATION
kFrq = kfreq + (kFollow*ksens*10000) ; CREATE A LEFT CHANNEL MODULATING FREQUENCY BASE ON THE STATIC VALUE CREATED BY kfreq AND THE AMOUNT OF DYNAMIC ENVELOPE FOLLOWING GOVERNED BY ksens
kFrq limit kFrq, 20,sr/2 ; LIMIT FREQUENCY RANGE TO PREVENT OUT OF RANGE FREQUENCIES
if ktype==1 then
aout lpf18 ain, kFrq, kres, kdist ; REDEFINE AUDIO SIGNAL AS FILTERED VERSION OF ITSELF
elseif ktype==2 then
aout moogladder ain, kFrq, kres ; REDEFINE AUDIO SIGNAL AS FILTERED VERSION OF ITSELF
elseif ktype==3 then
aFrq interp kFrq
aout butlp ain, aFrq ; REDEFINE AUDIO SIGNAL AS FILTERED VERSION OF ITSELF
elseif ktype==4 then
aout tone ain, kFrq ; REDEFINE AUDIO SIGNAL AS FILTERED VERSION OF ITSELF
endif
xout aout ; SEND AUDIO BACK TO CALLER INSTRUMENT
endop
opcode SwitchPort, k, kii
kin,iupport,idnport xin
kold init 0
kporttime = (kin
i 1 0 [60*60*24*7]