form caption("Ring Modulator") size(435, 90), pluginID("rmod") ;label bounds(7, 3, 200, 11), text("Iain McCurdy [2013]"), FontColour("grey") image pos(0, 0), size(435, 90), colour("black"), shape("rounded"), outline("lime"), line(5) rslider bounds( 5, 12, 70, 70), text("Freq."), channel("freq"), range(0, 15000, 800, 0.25), colour("yellow") rslider bounds( 75, 12, 70, 70), text("Sine/Sq."), channel("wave"), range(0, 1.00, 0), colour("yellow") line bounds(150, 2, 3, 86), colour("lime") rslider bounds(160, 12, 70, 70), text("Env."), channel("env"), range(0, 1.00, 0.5, 0.5), colour("orange") rslider bounds(230, 6, 40, 40), text("Att."), channel("att"), range(0.001, 0.5, 0.01, 0.5), colour("orange") rslider bounds(230, 46, 40, 40), text("Dec."), channel("dec"), range(0.001, 0.5, 0.1, 0.5), colour("orange") line bounds(275, 2, 3, 86), colour("lime") rslider bounds(290, 12, 70, 70), text("Mix"), channel("mix"), range(0, 1.00, 1), colour("chocolate") rslider bounds(360, 12, 70, 70), text("Level"), channel("level"), range(0, 1.00, 1), colour("chocolate") -d -n sr = 44100 ksmps = 32 nchnls = 2 0dbfs = 1 ;Author: Iain McCurdy (2012) ;http://iainmccurdy.org/csound.html opcode RingModulator,a,akkkkkk ain,kmix,kfreq,kwave,kenv,katt,kdec xin ;READ IN INPUT ARGUMENTS iWet ftgentmp 0,0,1024,-7,0,512,1,512,1 ;RESCALING FUNCTION FOR WET LEVEL CONTROL iDry ftgentmp 0,0,1024,-7,1,512,1,512,0 ;RESCALING FUNCTION FOR DRY LEVEL CONTROL isine ftgentmp 0,0,4096,10,1 ;SINE WAVE kWet table kmix, iWet, 1 ;RESCALE WET LEVEL CONTROL ACCORDING TO FUNCTION TABLE iWet kDry table kmix, iDry, 1 ;RESCALE DRY LEVEL CONTROL ACCORDING TO FUNCTION TABLE iDry kporttime linseg 0,0.001,0.02 ;PORTAMENTO VARIABLE kModFrq portk kfreq, kporttime ;SMOOTH VARIABLE CHANGES aFollow follow2 ain, katt, kdec ;AMPLITUDE FOLLOWING kModFrq + (cpsoct(kFollow*kenv*30)) ;CREATE A LEFT CHANNEL MODULATING FREQUENCY BASE ON THE STATIC VALUE CREATED BY kfreq AND THE AMOUNT OF DYNAMIC ENVELOPE FOLLOWING GOVERNED BY kenv kFollow downsamp aFollow kFollow logcurve kFollow/0dbfs,2 kModFrq = kModFrq + (kFollow*kenv*8000) ;CREATE A LEFT CHANNEL MODULATING FREQUENCY BASE ON THE STATIC VALUE CREATED BY kfreq AND THE AMOUNT OF DYNAMIC ENVELOPE FOLLOWING GOVERNED BY kenv aModSi poscil 1, kModFrq, isine ;CREATE RING MODULATING SIGNAL aModSq vco2 1, kModFrq, 10 ;CREATE RING MODULATING SIGNAL aMod ntrpol aModSi,aModSq,kwave aout sum ain*kDry, ain*aMod*kWet ;MIX DRY AND WET SIGNALS xout aout ;SEND AUDIO BACK TO CALLER INSTRUMENT endop instr 1 kmix chnget "mix" kfreq chnget "freq" kwave chnget "wave" kenv chnget "env" katt chnget "att" kdec chnget "dec" klevel chnget "level" a1,a2 ins ;;a1,a2 diskin2 "808loop.wav",1,0,1 a1 RingModulator a1,kmix,kfreq,kwave,kenv,katt,kdec a2 RingModulator a2,kmix,kfreq,kwave,kenv,katt,kdec a1 = a1 * klevel a2 = a2 * klevel outs a1,a2 endin i 1 0 [60*60*24*7]