form caption("FFT Effects") size(450, 640), pluginID("pvfx") ; PVSFREEZE groupbox bounds(0, 0, 450, 100), colour( 0,200,100,100) text("Freeze"), fontcolour("white"), plant("pvsfreeze"){ checkbox bounds(35, 30, 30, 30), channel("freeze_onoff"), fontcolour("black"), colour("red"), shape("rounded") label bounds( 30, 68, 60, 12), text("On/Off"), FontColour("white") checkbox bounds(100, 30, 180, 25), channel("freezb"), text("Freeze Both"), fontcolour("white"), shape("rounded"), colour("red") checkbox bounds(215, 30, 180, 25), channel("freeza"), text("Freeze Amplitudes"), fontcolour("white"), shape("rounded"), colour("yellow") checkbox bounds(215, 65, 180, 25), channel("freezf"), text("Freeze Frequencies"), fontcolour("white"), shape("rounded"), colour("orange") rslider bounds(370, 25, 70, 70), text("Mix"), channel("freeze_mix"), fontcolour("white"), range(0, 1.00, 1), colour( 0,200,100,150) } ; PVSCALE groupbox bounds(0,100, 225, 100), colour(250,250, 0,200) text("Freq. Scale"), fontcolour("white"), plant("pvscale"){ checkbox bounds(25, 30, 30, 30), channel("pvscale_onoff"), fontcolour("black"), colour("red"), shape("rounded") label bounds( 20, 68, 60, 12), text("On/Off"), FontColour("white") rslider bounds( 70, 25, 70, 70), text("Ratio"), channel("pvscale_scal"), fontcolour("white"), range(0.25, 4.00, 1, 0.5, 0.01), colour(250,250, 0,150) rslider bounds(140, 25, 70, 70), text("Mix"), channel("pvscale_mix"), fontcolour("white"), range(0, 1.00, 1), colour(250,250, 0,150) } ; PVSHIFT groupbox bounds(225,100, 225, 100), colour( 0,250,250,200) text("Freq. Shift"), fontcolour("white"), plant("pvshift"){ checkbox bounds(25, 30, 30, 30), channel("pvshift_onoff"), fontcolour("black"), colour("red"), shape("rounded") label bounds( 20, 68, 60, 12), text("On/Off"), FontColour("white") rslider bounds( 70, 25, 70, 70), text("Freq."), channel("pvshift_freq"), fontcolour("white"), range(-4000, 4000, 0), colour( 0,250,250,150) rslider bounds(140, 25, 70, 70), text("Mix"), channel("pvshift_mix"), fontcolour("white"), range(0, 1.00, 1), colour( 0,250,250,150) } ; PVSBLUR groupbox bounds(0,200, 225, 100), colour( 50,250, 0,200) text("Blur"), fontcolour("white"), plant("pvsblur"){ checkbox bounds(25, 30, 30, 30), channel("pvsblur_onoff"), fontcolour("black"), colour("red"), shape("rounded") label bounds( 20, 68, 60, 12), text("On/Off"), FontColour("white") rslider bounds( 70, 25, 70, 70), text("Ratio"), channel("pvsblur_scal"), fontcolour("white"), range(0.25, 4.00, 1, 0.5, 0.01), colour( 50,250, 0,150) rslider bounds(140, 25, 70, 70), text("Mix"), channel("pvsblur_mix"), fontcolour("white"), range(0, 1.00, 1), colour( 50,250, 0,150) } ; PVSMOOTH groupbox bounds(225,200, 225, 100), colour(100,250,100,200) text("Smooth"), fontcolour("white"), plant("pvsmooth"){ checkbox bounds(25, 30, 30, 30), channel("pvsmooth_onoff"), fontcolour("black"), colour("red"), shape("rounded") label bounds( 20, 68, 60, 12), text("On/Off"), FontColour("white") rslider bounds( 70, 25, 70, 70), text("Freq."), channel("pvsmooth_freq"), fontcolour("white"), range(-4000, 4000, 0), colour(100,250,100,160) rslider bounds(140, 25, 70, 70), text("Mix"), channel("pvsmooth_mix"), fontcolour("white"), range(0, 1.00, 1), colour(100,250,100,150) } ; PVSWARP ; PVSBANDP / PVSBANDR ; PVSADSYN groupbox bounds(0, 300, 450, 100), colour(150, 40, 40,250) text("Additive Resynthesizer"), fontcolour("white"), plant("pvsadsyn"){ checkbox bounds(35, 30, 30, 30), channel("pvsadsyn_onoff"), fontcolour("black"), colour("red"), shape("rounded") label bounds( 30, 68, 60, 12), text("On/Off"), FontColour("white") rslider bounds( 90, 25, 70, 70), text("Freq.Mod."), channel("pvsadsyn_fmod"), range(0.25, 4, 1), fontcolour("white"), colour(110, 0, 0,200) rslider bounds(160, 25, 70, 70), text("Num.Osc.s"), channel("pvsadsyn_noscs"), range(1, 1024, 256,1,1), fontcolour("white"), colour(110, 0, 0,200) rslider bounds(230, 25, 70, 70), text("Bin Offset"), channel("pvsadsyn_binoffset"), range(0, 256, 1,1,1), fontcolour("white"), colour(110, 0, 0,200) rslider bounds(300, 25, 70, 70), text("Bin Incr."), channel("pvsadsyn_binincr"), range(1, 32, 1,1,1), fontcolour("white"), colour(110, 0, 0,200) rslider bounds(370, 25, 70, 70), text("Mix"), channel("pvsadsyn_mix"), range(0, 1, 1), fontcolour("white"), colour(110, 0, 0,200) } ; OUTPUT groupbox bounds(0, 400, 450, 100), colour( 0,250,250,100) text("Output"), fontcolour("white"), plant("output"){ rslider bounds( 10, 25, 70, 70), text("Level"), channel("level"), range(0, 1.00, 0), fontcolour("white"), colour( 0,250,250,150) } -d -n sr = 44100 ksmps = 32 nchnls = 2 0dbfs = 1 ;MAXIMUM AMPLITUDE ;Author: Iain McCurdy (2013) ;http://iainmccurdy.org/csound.html instr 1 /* AUDIO INPUT */ aL,aR ins ;aL,aR diskin2 "SynthPad.wav",1,0,1 /* FFT PARAMETERS */ iFFTsize = 1024 ioverlap = 256 iwinsize = 1024 iwintype = 1 /* ANALYSE AUDIO SIGNAL */ f_sigL pvsanal aL, iFFTsize, ioverlap, iwinsize, iwintype ;ANALYSE AUDIO INPUT SIGNAL AND OUTPUT AN FSIG f_sigR pvsanal aR, iFFTsize, ioverlap, iwinsize, iwintype /* PVSFREEZE */ kfreeze_onoff chnget "freeze_onoff" kfreeze_mix chnget "freeze_mix" kfreeza chnget "freeza" kfreezf chnget "freezf" kfreezb chnget "freezb" if(kfreeze_onoff==1) then ; triggering of 'Freeze All' mode kon = 1 koff = 0 ktrigon trigger kfreezb,0.5,0 ktrigoff trigger kfreezb,0.5,1 if(ktrigon==1) then chnset kon,"freeza" chnset kon,"freezf" elseif(ktrigoff==1) then chnset koff,"freeza" chnset koff,"freezf" endif f_freezeL pvsfreeze f_sigL, kfreeza, kfreezf f_freezeR pvsfreeze f_sigR, kfreeza, kfreezf f_drymixL pvsgain f_sigL, 1-kfreeze_mix ;WET/DRY MIX f_drymixR pvsgain f_sigR, 1-kfreeze_mix ; f_wetmixL pvsgain f_freezeL, kfreeze_mix ; f_wetmixR pvsgain f_freezeR, kfreeze_mix ; f_sigL pvsmix f_drymixL, f_wetmixL ; f_sigR pvsmix f_drymixR, f_wetmixR ; endif /* PVSADSYN */ kpvsadsyn_onoff chnget "pvsadsyn_onoff" ;READ IN WIDGETS if(kpvsadsyn_onoff==1) then kpvsadsyn_mix chnget "pvsadsyn_mix" ;READ IN WIDGETS kpvsadsyn_fmod chnget "pvsadsyn_fmod" kpvsadsyn_noscs chnget "pvsadsyn_noscs" kpvsadsyn_binoffset chnget "pvsadsyn_binoffset" kpvsadsyn_binincr chnget "pvsadsyn_binincr" kpvsadsyn_lev chnget "pvsadsyn_lev" knossc init 256 ktrig changed kpvsadsyn_noscs,kpvsadsyn_binoffset,kpvsadsyn_binincr ;GENERATE TRIGGER FOR I-RATE PARAMETERS if ktrig==1 then reinit UPDATE endif UPDATE: inoscs init i(kpvsadsyn_noscs) ibinoffset init i(kpvsadsyn_binoffset) ibinincr init i(kpvsadsyn_binincr) inoscs limit inoscs, 1, (((iFFTsize*0.5)+1)-ibinoffset)/ibinincr ;LIMIT NUMBER OF OSCILLATORS USED TO PREVENT CRASHES aresynL pvsadsyn f_sigL, inoscs, kpvsadsyn_fmod , ibinoffset, ibinincr ;RESYNTHESIZE FROM THE fsig USING pvsadsyn aresynR pvsadsyn f_sigR, inoscs, kpvsadsyn_fmod , ibinoffset, ibinincr rireturn aresynL ntrpol aL, aresynL, kpvsadsyn_mix ;CREATE DRY/WET MIX aresynR ntrpol aR, aresynR, kpvsadsyn_mix else /* PVSYNTH */ aresynL pvsynth f_sigL ;RESYNTHESIZE THE f-SIGNAL AS AN AUDIO SIGNAL aresynR pvsynth f_sigR ;RESYNTHESIZE THE f-SIGNAL AS AN AUDIO SIGNAL endif /* AUDIO OUTPUT */ klevel chnget "level" ;READ IN WIDGETS outs aresynL*klevel, aresynR*klevel endin i 1 0 [60*60*24*7]