form caption("Csound Filters") size(400, 220), pluginId("CsFW") keyboard bounds(12, 84, 381, 95), value(20) combobox bounds(12, 8, 381, 30), align("centre"), channel("filerTypeCombo"), items("MOOG_LADDER", "MOOG_VCF ", "LPF18 ", "BQREZ ", "CLFILT ", "BUTTERLP ", "LOWRES ", "REZZY ", "SVFILTER ", "VLOWRES ", "STATEVAR ", "MVCLPF1 ", "MVCLPF2 ", "MVCLPF3 ") hslider bounds(12, 40, 361, 39), channel("coeffSlider"), range(0.01, 2, .5), text("LFO Rate") -n -d -+rtmidi=NULL -M0 --midi-key-cps=4 ;sr is set by the host ksmps = 32 nchnls = 2 0dbfs = 1 gaOut init 0 giSpb init 0.45 ; Filter types #define MOOG_LADDER #1# #define MOOG_VCF #2# #define LPF18 #3# #define BQREZ #4# #define CLFILT #5# #define BUTTERLP #6# #define LOWRES #7# #define REZZY #8# #define SVFILTER #9# #define VLOWRES #10# #define STATEVAR #11# #define MVCLPF1 #12# #define MVCLPF2 #13# #define MVCLPF3 #14# opcode MultiFilter, a, akki ain, kcfq, kres, iType xin kType init iType if kType == $MOOG_LADDER then aout moogladder ain, kcfq, kres elseif kType == $MOOG_VCF then aout moogvcf ain, kcfq, kres elseif kType == $LPF18 then aout lpf18 ain, kcfq, kres, 0.5 elseif kType == $BQREZ then aout bqrez ain, kcfq, 99 * kres + 1 elseif kType == $CLFILT then aout clfilt ain, kcfq, 0, 2 elseif kType == $BUTTERLP then aout butterlp ain, kcfq elseif kType == $LOWRES then aout lowres ain, kcfq, kres elseif kType == $REZZY then aout rezzy ain, kcfq, kres elseif kType == $SVFILTER then aout, ahigh, aband svfilter ain, kcfq, (499 / 10) * kres + 1 ; reScales to make it musical elseif kType == $VLOWRES then aout vlowres ain, kcfq, kres, 2, 0 elseif kType == $STATEVAR then ahp, aout, abp, abr statevar ain, kcfq, kres elseif kType == $MVCLPF1 then aout mvclpf1 ain, kcfq, kres elseif kType == $MVCLPF2 then aout mvclpf2 ain, kcfq, kres elseif kType == $MVCLPF3 then aout mvclpf3 ain, kcfq, kres else aout = 0 endif xout aout endop #define MOOG_LADDER #1# #define MOOG_VCF #2# #define LPF18 #3# #define BQREZ #4# #define CLFILT #5# #define BUTTERLP #6# #define LOWRES #7# #define REZZY #8# #define SVFILTER #9# #define VLOWRES #10# #define STATEVAR #11# #define MVCLPF1 #12# #define MVCLPF2 #13# #define MVCLPF3 #14# opcode Wave, a, k kcps xin asqr vco2 1, kcps * 0.495, 10 ; square asaw vco2 1, kcps * 1.005, 0 ; wave xout 0.5 * (asqr + asaw) endop opcode Filter, a, aiii ain, iFilterType, iCoeff, iCps xin iDivision = 1 / (iCoeff * giSpb) kLfo loopseg iDivision, 0, 0, 0, 0.5, 1, 0.5, 0, 0 iBase = iCps iMod = iBase * 9 kcfq = iBase + iMod * kLfo kres init 0.6 aout MultiFilter ain, kcfq, kres, iFilterType aout balance aout, ain xout aout endop opcode Reverb, aa, aaii adryL, adryR, ifeedback, imix xin awetL, awetR reverbsc adryL, adryR, ifeedback, 10000 aoutL = (1 - imix) * adryL + imix * awetL aoutR = (1 - imix) * adryR + imix * awetR xout aoutL, aoutR endop ;bass instrument, gets triggered each time a note is pressed instr 1 iCoeff chnget "coeffSlider" iCps = p4 iFilterType chnget "filerTypeCombo" aWave Wave iCps aOut Filter aWave, iFilterType, iCoeff, iCps aEnv madsr 0.01, 0, 1, 0.01 gaOut = (gaOut + aOut)*aEnv endin instr Main iVolume = 0.5 iReverbFeedback = 0.3 iMixLevel = p4 aoutL, aoutR Reverb gaOut, gaOut, iReverbFeedback, iMixLevel outs (iVolume * aoutL), (iVolume * aoutR) gaOut = 0 endin f0 z i"Main" 0 36000 0.35 ; the fourth parameter is a reverb mix level ;i "PlayAll" 0 0 0.35 ; uncomment to save output to wav files ;i "DumpAll" 0 0 0.35