{
   "code" : "/////////////////////////////////////////////////////////////////////////\r\n//This patch contains some rough emulations of Rob Hordijk's Twin Peak Filter\r\n//I'm new so my style/syntax maybe sucks major balls.\r\n//   /\\    /\\      ----\\      / o | |    D   _  /  | /      /\\    /\\\r\n// /    \\/    \\      |   \\/\\/   | |\\|    |  |= /-| | \\     /   \\/    \\\r\n/////////////////////////////////////////////////////////////////////////\r\n\r\n\r\n////////////////////////////////////////////////////\r\n//convenience test signals for injecting into the filters\r\n////////////////////////////////////////////////////\r\nNdef(\\sawLFO, {arg lfofreq = 0.1; LFSaw.kr(lfofreq).linlin(-1, 1, 0.1, 4); })\r\n(\r\nNdef(\\testTones, {\r\n\targ dustMul=0, dustDensity=5, noiseMul=0, pulseMul=0, pulseFreq=100, sawMul=0, sawFreq=100;\r\n\tvar dust, noise, pulse, saw;\r\n\tdust = Dust.ar(dustDensity, dustMul);\r\n\tnoise = WhiteNoise.ar(noiseMul);\r\n\tpulse = Pulse.ar(pulseFreq, mul: pulseMul);\r\n\tsaw = Saw.ar(sawFreq, sawMul);\r\n\t(dust + noise + pulse + saw)!2;\r\n});\r\nSpec.add(\\dustMul, ControlSpec(0, 1, \\lin, 0, 0));\r\nSpec.add(\\dustDense, ControlSpec(0, 1000, \\lin, 0, 5));\r\nSpec.add(\\noiseMul, ControlSpec(0, 1, \\lin, 0, 0));\r\nSpec.add(\\pulseMul, ControlSpec(0, 1, \\lin, 0, 0));\r\nSpec.add(\\pulseFreq, ControlSpec(0, 10000, \\lin, 0, 100));\r\nSpec.add(\\sawMul, ControlSpec(0, 1, \\lin, 0, 0));\r\nSpec.add(\\sawFreq, ControlSpec(0, 10000, \\lin, 0, 100));\r\nNdef(\\testTones).gui; //don't \"play\" the Ndef, it breaks it for some reason, do \"pause/resume\" instead\r\n)\r\nNdef(\\testTones).gui;\r\n\r\n//mapping examples\r\nNdef(\\VadimTwinPeak) <<>.inA Ndef(\\testTones); //maps test tones to in1\r\nNdef(\\VadimTwinPeak) <<>.inB nil; //unmaps\r\nNdef(\\VadimTwinPeak) <<>.freqMul (Ndef(\\testTones));\r\nNdef(\\VadimTwinPeak) <<>.freqMul (Ndef(\\sawLFO));\r\nNdef(\\VadimTwinPeak) <<>.freqMul nil; //unmaps\r\nNdef(\\VadimTwinPeak) <<>.curveA (Ndef(\\testTones));\r\nNdef(\\VadimTwinPeak) <<>.curveA nil; //unmaps\r\nNdef(\\VadimTwinPeak) <<>.freqAdd (Ndef(\\testTones));\r\nNdef(\\VadimTwinPeak) <<>.freqAdd nil;\r\n\r\n\r\n\r\n//////////////////////////////////////////////////////////////////////////////////////\r\n//I made a bunch of different versions using different filter UGens to see what sounds best\r\n//Faves 4 Pinging: SVF, BLowPass, BLowPass4 (for bass), VADiode(sharp)\r\n//Faves 4 Other: VadimFilter, VADiode, VALadder, BMoog\r\n//////////////////////////////////////////////////////////////////////////////////////\r\n\r\n///////////////////////////////////////////////////////////////////////////////////////////////////\r\n//using VadimFilter, no q control and is 12dB/oct as opposed to 18dB in the original, buttery but pings r bad\r\n///////////////////////////////////////////////////////////////////////////////////////////////////\r\n(\r\nNdef(\\VadimTwinPeak, {\r\n\tvar inA, inB, freqA, freqB, freqMul, freqAdd, curveA, curveB, resA, resB, resMul, resAdd, filterA, filterB, sig;\r\n\tinA = \\inA.ar(val:0, lag:0)!2; //input for channel A\r\n\tinB = \\inB.ar(val:0, lag:0)!2; //input for channel B\r\n\tfreqA = \\freqA.ar(val:500, lag:0);//cv for A freq\r\n\tfreqB = \\freqB.ar(val:500, lag:0);//cv for B freq\r\n\tfreqMul = \\freqMul.ar(val:1, lag:0);//cv for frequency multiplier\r\n\tfreqAdd = \\freqAdd.ar(val:0, lag:0);//cv for frequency addition\r\n\tcurveA = \\curveA.ar(val:0, lag:0);//cv for A curve\r\n\tcurveB = \\curveB.ar(val:0, lag:0);//cv for B curve\r\n\tresA = \\resA.ar(val:0, lag:0);//cv for A resonance\r\n\tresB = \\resB.ar(val:0, lag:0);//cv for B resonance\r\n\tresMul = \\resMul.ar(val:1, lag:0);//cv for resonance multiplier\r\n\tresAdd = \\resAdd.ar(val:0, lag:0);//cv for resonance addition\r\n\tfilterA = VadimFilter.ar(\r\n\t\t(inA+(curveB * inB)).clip(-1, 1), //input\r\n\t\t((freqA*freqMul)+freqAdd).clip(1, 20000), //freq\r\n\t\t((resA*resMul)+resAdd).clip(0, 1) //resonance\r\n\t\t, 0); //filter type, 0 is LPF2, 1 is LPF4\r\n\tfilterB = VadimFilter.ar(\r\n\t\t(-1)*((inB+(curveA * inA)).clip(-1,1)),\r\n\t\t((freqB*freqMul)+freqAdd).clip(1, 20000),\r\n\t\t((resB*resMul)+resAdd).clip(0, 1)\r\n\t\t, 0);\r\n\tsig = Limiter.ar((filterA+filterB)/2);\r\n});\r\nSpec.add(\\freqA, ControlSpec(1, 18000, \\exp, 0, 1));\r\nSpec.add(\\freqB, ControlSpec(1, 18000, \\exp, 0, 1));\r\nSpec.add(\\freqMul, ControlSpec(0, 4, \\lin, 0, 1));\r\nSpec.add(\\freqAdd, ControlSpec(-10000, 10000, \\lin, 0, 0));\r\nSpec.add(\\curveA, ControlSpec(0, 1, \\lin, 0, 0));\r\nSpec.add(\\curveB, ControlSpec(0, 1, \\lin, 0, 0));\r\nSpec.add(\\resA, ControlSpec(0.01, 1, \\exp, 0, 1));\r\nSpec.add(\\resB, ControlSpec(0.01, 1, \\exp, 0, 1));\r\nSpec.add(\\resMul, ControlSpec(0, 1, \\lin, 0, 1));\r\nSpec.add(\\resAdd, ControlSpec(0, 1, \\lin, 0, 0));\r\nNdef(\\VadimTwinPeak).gui;\r\n)\r\nNdef(\\VadimTwinPeak).gui;\r\n\r\n/////////////////////////////////////////////////////////////////\r\n//Using BLowPass, rq control, still 12db/oct\r\n//modulation needs a lot of lag to not click, better pings\r\n/////////////////////////////////////////////////////////////////\r\n(\r\nNdef(\\BLPTwinPeak, {\r\n\tvar inA, inB, freqA, freqB, freqMul, freqAdd, curveA, curveB, rqA, rqB, rqMul, rqAdd, filterA, filterB, sig;\r\n\tinA = \\inA.ar(val:0, lag:0)!2; //input for channel A\r\n\tinB = \\inB.ar(val:0, lag:0)!2; //input for channel B\r\n\tfreqA = \\freqA.ar(val:500, lag:0);//cv for A freq\r\n\tfreqB = \\freqB.ar(val:500, lag:0);//cv for B freq\r\n\tfreqMul = \\freqMul.ar(val:1, lag:0);//cv for frequency multiplier\r\n\tfreqAdd = \\freqAdd.ar(val:0, lag:0);//cv for frequency addition\r\n\tcurveA = \\curveA.ar(val:0, lag:0);//cv for A curve\r\n\tcurveB = \\curveB.ar(val:0, lag:0);//cv for B curve\r\n\trqA = \\rqA.ar(val:0, lag:0);//cv for A reciprocal q\r\n\trqB = \\rqB.ar(val:0, lag:0);//cv for B reciprocal q\r\n\trqMul = \\rqMul.ar(val:1, lag:0);//cv for reciprocal q multiplier\r\n\trqAdd = \\rqAdd.ar(val:0, lag:0);//cv for reciprocal q addition\r\n\tfilterA = BLowPass.ar(\r\n\t\t(inA+(curveB * inB)).clip(-1, 1),\r\n\t\t((freqA*freqMul)+freqAdd).clip(1, 20000),\r\n\t\t((rqA*rqMul)+rqAdd).clip(0, 1), 1);\r\n\tfilterB = BLowPass.ar(\r\n\t\t(-1)*((inB+(curveA * inA)).clip(-1,1)),\r\n\t\t((freqB*freqMul)+freqAdd).clip(1, 20000),\r\n\t\t((rqB*rqMul)+rqAdd).clip(0, 1), 1);\r\n\tsig = Limiter.ar((filterA+filterB)/2);\r\n});\r\nSpec.add(\\freqA, ControlSpec(1, 18000, \\exp, 0, 1));\r\nSpec.add(\\freqB, ControlSpec(1, 18000, \\exp, 0, 1));\r\nSpec.add(\\freqMul, ControlSpec(0, 4, \\lin, 0, 1));\r\nSpec.add(\\freqAdd, ControlSpec(-10000, 10000, \\lin, 0, 0));\r\nSpec.add(\\curveA, ControlSpec(0, 1, \\lin, 0, 0));\r\nSpec.add(\\curveB, ControlSpec(0, 1, \\lin, 0, 0));\r\nSpec.add(\\rqA, ControlSpec(0.01, 3, \\exp, 0, 1));\r\nSpec.add(\\rqB, ControlSpec(0.01, 3, \\exp, 0, 1));\r\nSpec.add(\\rqMul, ControlSpec(0, 1, \\lin, 0, 1));\r\nSpec.add(\\rqAdd, ControlSpec(0, 1, \\lin, 0, 0));\r\nNdef(\\BLPTwinPeak).gui;\r\n)\r\nNdef(\\BLPTwinPeak).gui;\r\nNdef(\\BLPTwinPeak) <<>.inA Ndef(\\testTones);\r\nNdef(\\BLPTwinPeak) <<>.freqMul Ndef(\\testTones);\r\n\r\n//////////////////////////////////////////////////////////////////////////////////////////\r\n//Using BLowPass4, rq control, 24db/oct, same FM issue as above, but sounds really cool as drums\r\n//also bass thumps hard!\r\n//////////////////////////////////////////////////////////////////////////////////////////\r\n(\r\nNdef(\\BLP4TwinPeak, {\r\n\tvar inA, inB, freqA, freqB, freqMul, freqAdd, curveA, curveB, rqA, rqB, rqMul, rqAdd, filterA, filterB, sig;\r\n\tinA = \\inA.ar(val:0, lag:0)!2; //input for channel A\r\n\tinB = \\inB.ar(val:0, lag:0)!2; //input for channel B\r\n\tfreqA = \\freqA.ar(val:500, lag:0);//cv for A freq\r\n\tfreqB = \\freqB.ar(val:500, lag:0);//cv for B freq\r\n\tfreqMul = \\freqMul.ar(val:1, lag:0);//cv for frequency multiplier\r\n\tfreqAdd = \\freqAdd.ar(val:0, lag:0);//cv for frequency addition\r\n\tcurveA = \\curveA.ar(val:0, lag:0);//cv for A curve\r\n\tcurveB = \\curveB.ar(val:0, lag:0);//cv for B curve\r\n\trqA = \\rqA.ar(val:0, lag:0);//cv for A reciprocal q\r\n\trqB = \\rqB.ar(val:0, lag:0);//cv for B reciprocal q\r\n\trqMul = \\rqMul.ar(val:1, lag:0);//cv for reciprocal q multiplier\r\n\trqAdd = \\rqAdd.ar(val:0, lag:0);//cv for reciprocal q addition\r\n\tfilterA = BLowPass4.ar(\r\n\t\t(inA+(curveB * inB)).clip(-1, 1),\r\n\t\t((freqA*freqMul)+freqAdd).clip(1, 20000),\r\n\t\t((rqA*rqMul)+rqAdd).clip(0, 1), 1);\r\n\tfilterB = BLowPass4.ar(\r\n\t\t(-1)*((inB+(curveA * inA)).clip(-1,1)),\r\n\t\t((freqB*freqMul)+freqAdd).clip(1, 20000),\r\n\t\t((rqB*rqMul)+rqAdd).clip(0, 1), 1);\r\n\tsig = Limiter.ar((filterA+filterB)/2);\r\n});\r\nSpec.add(\\freqA, ControlSpec(1, 18000, \\exp, 0, 1));\r\nSpec.add(\\freqB, ControlSpec(1, 18000, \\exp, 0, 1));\r\nSpec.add(\\freqMul, ControlSpec(0, 4, \\lin, 0, 1));\r\nSpec.add(\\freqAdd, ControlSpec(-10000, 10000, \\lin, 0, 0));\r\nSpec.add(\\curveA, ControlSpec(0, 1, \\lin, 0, 0));\r\nSpec.add(\\curveB, ControlSpec(0, 1, \\lin, 0, 0));\r\nSpec.add(\\rqA, ControlSpec(0.01, 1, \\exp, 0, 1));\r\nSpec.add(\\rqB, ControlSpec(0.01, 1, \\exp, 0, 1));\r\nSpec.add(\\rqMul, ControlSpec(0, 1, \\lin, 0, 1));\r\nSpec.add(\\rqAdd, ControlSpec(0, 1, \\lin, 0, 0));\r\nNdef(\\BLP4TwinPeak).gui;\r\n)\r\ns.makeWindow;\r\nNdef(\\BLP4TwinPeak).gui;\r\nNdef(\\BLP4TwinPeak) <<>.inA Ndef(\\testTones);\r\nNdef(\\BLP4TwinPeak) <<>.freqMul Ndef(\\testTones);\r\n\r\n\r\n//////////////////////////////////////\r\n//Using BMoog, q, 24/db/oct, saturation\r\n//weird, self-oscillates\r\n//////////////////////////////////////\r\n(\r\nNdef(\\BMoogTwinPeak, {\r\n\tvar inA, inB, freqA, freqB, freqMul, freqAdd, curveA, curveB, qA, qB, qMul, qAdd, filterA, filterB, sat, sig;\r\n\tinA = \\inA.ar(val:0, lag:0)!2; //input for channel A\r\n\tinB = \\inB.ar(val:0, lag:0)!2; //input for channel B\r\n\tfreqA = \\freqA.ar(val:500, lag:0);//cv for A freq\r\n\tfreqB = \\freqB.ar(val:500, lag:0);//cv for B freq\r\n\tfreqMul = \\freqMul.ar(val:1, lag:0);//cv for frequency multiplier\r\n\tfreqAdd = \\freqAdd.ar(val:0, lag:0);//cv for frequency addition\r\n\tcurveA = \\curveA.ar(val:0, lag:0);//cv for A curve\r\n\tcurveB = \\curveB.ar(val:0, lag:0);//cv for B curve\r\n\tqA = \\qA.ar(val:0, lag:0);//cv for A q\r\n\tqB = \\qB.ar(val:0, lag:0);//cv for B q\r\n\tqMul = \\qMul.ar(val:1, lag:0);//cv for q multiplier\r\n\tqAdd = \\qAdd.ar(val:0, lag:0);//cv for q addition\r\n\tsat = \\sat.ar(val:0.95, lag:0);//cv for saturation\r\n\tfilterA = BMoog.ar(\r\n\t\t(inA+(curveB * inB)).clip(-1, 1),\r\n\t\t((freqA*freqMul)+freqAdd).clip(1, 20000),\r\n\t\t((qA*qMul)+qAdd).clip(0, 2),\r\n\t\t0,\r\n\t\t0,\r\n\t\tsat\r\n\t);\r\n\tfilterB = BMoog.ar(\r\n\t\t(-1)*((inB+(curveA * inA)).clip(-1,1)),\r\n\t\t((freqB*freqMul)+freqAdd).clip(1, 20000),\r\n\t\t((qB*qMul)+qAdd).clip(0, 2),\r\n\t\t0,\r\n\t\t0,\r\n\t\tsat\r\n\t);\r\n\tsig = Limiter.ar((filterA+filterB)/2);\r\n});\r\nSpec.add(\\freqA, ControlSpec(1, 18000, \\exp, 0, 1));\r\nSpec.add(\\freqB, ControlSpec(1, 18000, \\exp, 0, 1));\r\nSpec.add(\\freqMul, ControlSpec(0, 4, \\lin, 0, 1));\r\nSpec.add(\\freqAdd, ControlSpec(-10000, 10000, \\lin, 0, 0));\r\nSpec.add(\\curveA, ControlSpec(0, 1, \\lin, 0, 0));\r\nSpec.add(\\curveB, ControlSpec(0, 1, \\lin, 0, 0));\r\nSpec.add(\\qA, ControlSpec(0, 2, \\lin, 0, 1));\r\nSpec.add(\\qB, ControlSpec(0, 2, \\lin, 0, 1));\r\nSpec.add(\\qMul, ControlSpec(0, 1, \\lin, 0, 1));\r\nSpec.add(\\qAdd, ControlSpec(0, 1, \\lin, 0, 0));\r\nSpec.add(\\sat, ControlSpec(0, 1, \\lin, 0, 0));\r\nNdef(\\BMoogTwinPeak).gui;\r\n)\r\ns.makeWindow;\r\nNdef(\\BMoogTwinPeak).gui;\r\nNdef(\\testTones).gui;\r\nNdef(\\BMoogTwinPeak) <<>.inA Ndef(\\testTones);\r\nNdef(\\BMoogTwinPeak) <<>.freqMul Ndef(\\testTones);\r\nNdef(\\BMoogTwinPeak) <<>.freqMul nil;\r\n\r\n///////////////////////////////////////////////////////\r\n//RLPFD TB303 emulation, slope n/a, distortion, resonance\r\n//ehhh, maybe useful for more vowely acid sounds?\r\n///////////////////////////////////////////////////////\r\n(\r\nNdef(\\RLPFDTwinPeak, {\r\n\tvar inA, inB, freqA, freqB, freqMul, freqAdd, curveA, curveB, resA, resB, resMul, resAdd, filterA, filterB, sig, dist;\r\n\tinA = \\inA.ar(val:0, lag:0)!2; //input for channel A\r\n\tinB = \\inB.ar(val:0, lag:0)!2; //input for channel B\r\n\tfreqA = \\freqA.ar(val:500, lag:0);//cv for A freq\r\n\tfreqB = \\freqB.ar(val:500, lag:0);//cv for B freq\r\n\tfreqMul = \\freqMul.ar(val:1, lag:0);//cv for frequency multiplier\r\n\tfreqAdd = \\freqAdd.ar(val:0, lag:0);//cv for frequency addition\r\n\tcurveA = \\curveA.ar(val:0, lag:0);//cv for A curve\r\n\tcurveB = \\curveB.ar(val:0, lag:0);//cv for B curve\r\n\tresA = \\resA.ar(val:0, lag:0);//cv for A resonance\r\n\tresB = \\resB.ar(val:0, lag:0);//cv for B resonance\r\n\tresMul = \\resMul.ar(val:1, lag:0);//cv for resonance multiplier\r\n\tresAdd = \\resAdd.ar(val:0, lag:0);//cv for resonance addition\r\n\tdist = \\dist.ar(val:0, lag:0);//cv for distortion\r\n\tfilterA = RLPFD.ar(\r\n\t\t(inA+(curveB * inB)).clip(-1, 1), //input\r\n\t\t((freqA*freqMul)+freqAdd).clip(1, 20000), //freq\r\n\t\t((resA*resMul)+resAdd).clip(0, 1) //resonance\r\n\t\t, dist.clip(0,1)); //distortion(0-1)\r\n\tfilterB = RLPFD.ar(\r\n\t\t(-1)*((inB+(curveA * inA)).clip(-1,1)),\r\n\t\t((freqB*freqMul)+freqAdd).clip(1, 20000),\r\n\t\t((resB*resMul)+resAdd).clip(0, 1)\r\n\t\t, dist.clip(0,1));\r\n\tsig = Limiter.ar((filterA+filterB)/2);\r\n});\r\nSpec.add(\\freqA, ControlSpec(1, 18000, \\exp, 0, 1));\r\nSpec.add(\\freqB, ControlSpec(1, 18000, \\exp, 0, 1));\r\nSpec.add(\\freqMul, ControlSpec(0, 4, \\lin, 0, 1));\r\nSpec.add(\\freqAdd, ControlSpec(-10000, 10000, \\lin, 0, 0));\r\nSpec.add(\\curveA, ControlSpec(0, 1, \\lin, 0, 0));\r\nSpec.add(\\curveB, ControlSpec(0, 1, \\lin, 0, 0));\r\nSpec.add(\\resA, ControlSpec(0.01, 1, \\exp, 0, 1));\r\nSpec.add(\\resB, ControlSpec(0.01, 1, \\exp, 0, 1));\r\nSpec.add(\\resMul, ControlSpec(0, 1, \\lin, 0, 1));\r\nSpec.add(\\resAdd, ControlSpec(0, 1, \\lin, 0, 0));\r\nSpec.add(\\dist, ControlSpec(0, 1, \\lin, 0, 0));\r\nNdef(\\RLPFDTwinPeak).gui;\r\n)\r\nNdef(\\RLPFDTwinPeak).gui;\r\nNdef(\\RLPFDTwinPeak) <<>.inA Ndef(\\testTones);\r\n\r\n/////////////////////////////////////\r\n//SVF, \"total, 100% plastic\", resonance\r\n//OH YEAH THATS NICE PINGS\r\n//OH YEAH\r\n/////////////////////////////////////\r\n(\r\nNdef(\\SVFTwinPeak, {\r\n\tvar inA, inB, freqA, freqB, freqMul, freqAdd, curveA, curveB, resA, resB, resMul, resAdd, filterA, filterB, sig;\r\n\tinA = \\inA.ar(val:0, lag:0)!2; //input for channel A\r\n\tinB = \\inB.ar(val:0, lag:0)!2; //input for channel B\r\n\tfreqA = \\freqA.ar(val:500, lag:0);//cv for A freq\r\n\tfreqB = \\freqB.ar(val:500, lag:0);//cv for B freq\r\n\tfreqMul = \\freqMul.ar(val:1, lag:0);//cv for frequency multiplier\r\n\tfreqAdd = \\freqAdd.ar(val:0, lag:0);//cv for frequency addition\r\n\tcurveA = \\curveA.ar(val:0, lag:0);//cv for A curve\r\n\tcurveB = \\curveB.ar(val:0, lag:0);//cv for B curve\r\n\tresA = \\resA.ar(val:0, lag:0);//cv for A resonance\r\n\tresB = \\resB.ar(val:0, lag:0);//cv for B resonance\r\n\tresMul = \\resMul.ar(val:1, lag:0);//cv for resonance multiplier\r\n\tresAdd = \\resAdd.ar(val:0, lag:0);//cv for resonance addition\r\n\tfilterA = SVF.ar(\r\n\t\t(inA+(curveB * inB)).clip(-1, 1), //input\r\n\t\t((freqA*freqMul)+freqAdd).clip(1, 20000), //freq\r\n\t\t((resA*resMul)+resAdd).clip(0, 1) //resonance\r\n\t);\r\n\tfilterB = SVF.ar(\r\n\t\t(-1)*((inB+(curveA * inA)).clip(-1,1)),\r\n\t\t((freqB*freqMul)+freqAdd).clip(1, 20000),\r\n\t\t((resB*resMul)+resAdd).clip(0, 1)\r\n\t);\r\n\tsig = Limiter.ar((filterA+filterB)/2);\r\n});\r\nSpec.add(\\freqA, ControlSpec(1, 18000, \\exp, 0, 1));\r\nSpec.add(\\freqB, ControlSpec(1, 18000, \\exp, 0, 1));\r\nSpec.add(\\freqMul, ControlSpec(0, 4, \\lin, 0, 1));\r\nSpec.add(\\freqAdd, ControlSpec(-10000, 10000, \\lin, 0, 0));\r\nSpec.add(\\curveA, ControlSpec(0, 1, \\lin, 0, 0));\r\nSpec.add(\\curveB, ControlSpec(0, 1, \\lin, 0, 0));\r\nSpec.add(\\resA, ControlSpec(0.01, 1, \\exp, 0, 1));\r\nSpec.add(\\resB, ControlSpec(0.01, 1, \\exp, 0, 1));\r\nSpec.add(\\resMul, ControlSpec(0, 1, \\lin, 0, 1));\r\nSpec.add(\\resAdd, ControlSpec(0, 1, \\lin, 0, 0));\r\nNdef(\\SVFTwinPeak).gui;\r\n)\r\nNdef(\\SVFTwinPeak).gui;\r\nNdef(\\SVFTwinPeak) <<>.inA Ndef(\\testTones);\r\nNdef(\\SVFTwinPeak) <<>.freqMul Ndef(\\testTones);\r\nNdef(\\SVFTwinPeak) <<>.freqMul nil;\r\nNdef(\\SVFTwinPeak) <<>.inB Ndef(\\SVFTwinPeak);\r\nNdef(\\SVFTwinPeak) <<>.inB nil;\r\nNdef(\\SVFTwinPeak) <<>.freqMul Ndef(\\SVFTwinPeak);\r\n\r\n///////////////////////////////////////////////////////////////////\r\n//DFM1, in example file resonance >1, need to investigate max res values\r\n//eh? semi-cool with audio in, high res\r\n///////////////////////////////////////////////////////////////////\r\n(\r\nNdef(\\DFM1TwinPeak, {\r\n\tvar inA, inB, freqA, freqB, freqMul, freqAdd, curveA, curveB, resA, resB, resMul, resAdd, filterA, filterB, sig;\r\n\tinA = \\inA.ar(val:0, lag:0)!2; //input for channel A\r\n\tinB = \\inB.ar(val:0, lag:0)!2; //input for channel B\r\n\tfreqA = \\freqA.ar(val:500, lag:0);//cv for A freq\r\n\tfreqB = \\freqB.ar(val:500, lag:0);//cv for B freq\r\n\tfreqMul = \\freqMul.ar(val:1, lag:0);//cv for frequency multiplier\r\n\tfreqAdd = \\freqAdd.ar(val:0, lag:0);//cv for frequency addition\r\n\tcurveA = \\curveA.ar(val:0, lag:0);//cv for A curve\r\n\tcurveB = \\curveB.ar(val:0, lag:0);//cv for B curve\r\n\tresA = \\resA.ar(val:0, lag:0);//cv for A resonance\r\n\tresB = \\resB.ar(val:0, lag:0);//cv for B resonance\r\n\tresMul = \\resMul.ar(val:1, lag:0);//cv for resonance multiplier\r\n\tresAdd = \\resAdd.ar(val:0, lag:0);//cv for resonance addition\r\n\tfilterA = DFM1.ar(\r\n\t\t(inA+(curveB * inB)).clip(-1, 1), //input\r\n\t\t((freqA*freqMul)+freqAdd).clip(1, 20000), //freq\r\n\t\t((resA*resMul)+resAdd).clip(0, 2) //resonance\r\n\t\t);\r\n\tfilterB = DFM1.ar(\r\n\t\t(-1)*((inB+(curveA * inA)).clip(-1,1)),\r\n\t\t((freqB*freqMul)+freqAdd).clip(1, 20000),\r\n\t\t((resB*resMul)+resAdd).clip(0, 2)\r\n\t\t);\r\n\tsig = Limiter.ar((filterA+filterB)/2);\r\n});\r\nSpec.add(\\freqA, ControlSpec(1, 18000, \\exp, 0, 1));\r\nSpec.add(\\freqB, ControlSpec(1, 18000, \\exp, 0, 1));\r\nSpec.add(\\freqMul, ControlSpec(0, 4, \\lin, 0, 1));\r\nSpec.add(\\freqAdd, ControlSpec(-10000, 10000, \\lin, 0, 0));\r\nSpec.add(\\curveA, ControlSpec(0, 1, \\lin, 0, 0));\r\nSpec.add(\\curveB, ControlSpec(0, 1, \\lin, 0, 0));\r\nSpec.add(\\resA, ControlSpec(0.01, 2, \\exp, 0, 1));\r\nSpec.add(\\resB, ControlSpec(0.01, 2, \\exp, 0, 1));\r\nSpec.add(\\resMul, ControlSpec(0, 1, \\lin, 0, 1));\r\nSpec.add(\\resAdd, ControlSpec(0, 1, \\lin, 0, 0));\r\nNdef(\\DFM1TwinPeak).gui;\r\n)\r\nNdef(\\DFM1TwinPeak).gui;\r\nNdef(\\DFM1TwinPeak) <<>.inA Ndef(\\testTones);\r\n\r\n/////////////////////////////////\r\n//VA1Pole\r\n//not very interesting, doesn't ping\r\n/////////////////////////////////\r\n(\r\nNdef(\\VA1PoleTwinPeak, {\r\n\tvar inA, inB, freqA, freqB, freqMul, freqAdd, curveA, curveB, fbA, fbB, fbMul, fbAdd, filterA, filterB, sig;\r\n\tinA = \\inA.ar(val:0, lag:0)!2; //input for channel A\r\n\tinB = \\inB.ar(val:0, lag:0)!2; //input for channel B\r\n\tfreqA = \\freqA.ar(val:500, lag:0);//cv for A freq\r\n\tfreqB = \\freqB.ar(val:500, lag:0);//cv for B freq\r\n\tfreqMul = \\freqMul.ar(val:1, lag:0);//cv for frequency multiplier\r\n\tfreqAdd = \\freqAdd.ar(val:0, lag:0);//cv for frequency addition\r\n\tcurveA = \\curveA.ar(val:0, lag:0);//cv for A curve\r\n\tcurveB = \\curveB.ar(val:0, lag:0);//cv for B curve\r\n\tfbA = \\fbA.ar(val:0, lag:0);//cv for A resonance\r\n\tfbB = \\fbB.ar(val:0, lag:0);//cv for B resonance\r\n\tfbMul = \\fbMul.ar(val:1, lag:0);//cv for resonance multiplier\r\n\tfbAdd = \\fbAdd.ar(val:0, lag:0);//cv for resonance addition\r\n\tfilterA = VA1Pole.ar(\r\n\t\t(inA+(curveB * inB)).clip(-1, 1), //input\r\n\t\t((freqA*freqMul)+freqAdd).clip(1, 20000), //freq\r\n\t\t((fbA*fbMul)+fbAdd).clip(-1, 5) //feedback\r\n\t\t);\r\n\tfilterB = VA1Pole.ar(\r\n\t\t(-1)*((inB+(curveA * inA)).clip(-1,1)),\r\n\t\t((freqB*freqMul)+freqAdd).clip(1, 20000),\r\n\t\t((fbB*fbMul)+fbAdd).clip(-1, 5)\r\n\t\t);\r\n\tsig = Limiter.ar((filterA+filterB)/2);\r\n});\r\nSpec.add(\\freqA, ControlSpec(1, 18000, \\exp, 0, 1));\r\nSpec.add(\\freqB, ControlSpec(1, 18000, \\exp, 0, 1));\r\nSpec.add(\\freqMul, ControlSpec(0, 4, \\lin, 0, 1));\r\nSpec.add(\\freqAdd, ControlSpec(-10000, 10000, \\lin, 0, 0));\r\nSpec.add(\\curveA, ControlSpec(0, 1, \\lin, 0, 0));\r\nSpec.add(\\curveB, ControlSpec(0, 1, \\lin, 0, 0));\r\nSpec.add(\\fbA, ControlSpec(-1, 5, \\lin, 0, 1));\r\nSpec.add(\\fbB, ControlSpec(-1, 5, \\lin, 0, 1));\r\nSpec.add(\\fbMul, ControlSpec(0, 1, \\lin, 0, 1));\r\nSpec.add(\\fbAdd, ControlSpec(0, 1, \\lin, 0, 0));\r\nNdef(\\VA1PoleTwinPeak).gui;\r\n)\r\nNdef(\\VA1PoleTwinPeak).gui;\r\nNdef(\\VA1PoleTwinPeak) <<>.inA Ndef(\\testTones);\r\n\r\n//////////////////////////////////////////////////////////\r\n//VADiode, res, overdrive\r\n//sharp and lean pings, interesting timbre, kind of benjoliny???\r\n//////////////////////////////////////////////////////////\r\n(\r\nNdef(\\VADiodeTwinPeak, {\r\n\tvar inA, inB, freqA, freqB, freqMul, freqAdd, curveA, curveB, resA, resB, resMul, resAdd, od, filterA, filterB, sig;\r\n\tinA = \\inA.ar(val:0, lag:0)!2; //input for channel A\r\n\tinB = \\inB.ar(val:0, lag:0)!2; //input for channel B\r\n\tfreqA = \\freqA.ar(val:500, lag:0);//cv for A freq\r\n\tfreqB = \\freqB.ar(val:500, lag:0);//cv for B freq\r\n\tfreqMul = \\freqMul.ar(val:1, lag:0);//cv for frequency multiplier\r\n\tfreqAdd = \\freqAdd.ar(val:0, lag:0);//cv for frequency addition\r\n\tcurveA = \\curveA.ar(val:0, lag:0);//cv for A curve\r\n\tcurveB = \\curveB.ar(val:0, lag:0);//cv for B curve\r\n\tresA = \\resA.ar(val:0, lag:0);//cv for A resonance\r\n\tresB = \\resB.ar(val:0, lag:0);//cv for B resonance\r\n\tresMul = \\resMul.ar(val:1, lag:0);//cv for resonance multiplier\r\n\tresAdd = \\resAdd.ar(val:0, lag:0);//cv for resonance addition\r\n\tod = \\od.ar(val:0, lag:0);//cv for overdrive\r\n\tfilterA = VADiodeFilter.ar(\r\n\t\t(inA+(curveB * inB)).clip(-1, 1), //input\r\n\t\t((freqA*freqMul)+freqAdd).clip(1, 20000), //freq\r\n\t\t((resA*resMul)+resAdd).clip(0, 1), //resonance\r\n\t\tod);//overdrive\r\n\tfilterB = VADiodeFilter.ar(\r\n\t\t(-1)*((inB+(curveA * inA)).clip(-1,1)),\r\n\t\t((freqB*freqMul)+freqAdd).clip(1, 20000),\r\n\t\t((resB*resMul)+resAdd).clip(0, 1),\r\n\t\tod);\r\n\tsig = Limiter.ar((filterA+filterB)/2);\r\n});\r\nSpec.add(\\freqA, ControlSpec(1, 18000, \\exp, 0, 1));\r\nSpec.add(\\freqB, ControlSpec(1, 18000, \\exp, 0, 1));\r\nSpec.add(\\freqMul, ControlSpec(0, 4, \\lin, 0, 1));\r\nSpec.add(\\freqAdd, ControlSpec(-10000, 10000, \\lin, 0, 0));\r\nSpec.add(\\curveA, ControlSpec(0, 1, \\lin, 0, 0));\r\nSpec.add(\\curveB, ControlSpec(0, 1, \\lin, 0, 0));\r\nSpec.add(\\resA, ControlSpec(0.01, 1, \\exp, 0, 1));\r\nSpec.add(\\resB, ControlSpec(0.01, 1, \\exp, 0, 1));\r\nSpec.add(\\resMul, ControlSpec(0, 1, \\lin, 0, 1));\r\nSpec.add(\\resAdd, ControlSpec(0, 1, \\lin, 0, 0));\r\nSpec.add(\\od, ControlSpec(0, 1, \\lin, 0, 0));\r\nNdef(\\VADiodeTwinPeak).gui;\r\n)\r\nNdef(\\VADiodeTwinPeak).gui;\r\nNdef(\\VADiodeTwinPeak) <<>.inA Ndef(\\testTones);\r\n\r\n/////////////////////////////////////////\r\n//VAKorg35, res, overdrive\r\n//ping bad, interesting at low freq high res\r\n////////////////////////////////////////\r\n(\r\nNdef(\\VAKorg35TwinPeak, {\r\n\tvar inA, inB, freqA, freqB, freqMul, freqAdd, curveA, curveB, resA, resB, resMul, resAdd, od, filterA, filterB, sig;\r\n\tinA = \\inA.ar(val:0, lag:0)!2; //input for channel A\r\n\tinB = \\inB.ar(val:0, lag:0)!2; //input for channel B\r\n\tfreqA = \\freqA.ar(val:500, lag:0);//cv for A freq\r\n\tfreqB = \\freqB.ar(val:500, lag:0);//cv for B freq\r\n\tfreqMul = \\freqMul.ar(val:1, lag:0);//cv for frequency multiplier\r\n\tfreqAdd = \\freqAdd.ar(val:0, lag:0);//cv for frequency addition\r\n\tcurveA = \\curveA.ar(val:0, lag:0);//cv for A curve\r\n\tcurveB = \\curveB.ar(val:0, lag:0);//cv for B curve\r\n\tresA = \\resA.ar(val:0, lag:0);//cv for A resonance\r\n\tresB = \\resB.ar(val:0, lag:0);//cv for B resonance\r\n\tresMul = \\resMul.ar(val:1, lag:0);//cv for resonance multiplier\r\n\tresAdd = \\resAdd.ar(val:0, lag:0);//cv for resonance addition\r\n\tod = \\od.ar(val:0, lag:0);//cv for overdrive\r\n\tfilterA = VAKorg35.ar(\r\n\t\t(inA+(curveB * inB)).clip(-1, 1), //input\r\n\t\t((freqA*freqMul)+freqAdd).clip(1, 20000), //freq\r\n\t\t((resA*resMul)+resAdd).clip(0, 1), //resonance\r\n\t\tod);//overdrive\r\n\tfilterB = VAKorg35.ar(\r\n\t\t(-1)*((inB+(curveA * inA)).clip(-1,1)),\r\n\t\t((freqB*freqMul)+freqAdd).clip(1, 20000),\r\n\t\t((resB*resMul)+resAdd).clip(0, 1),\r\n\t\tod);\r\n\tsig = Limiter.ar((filterA+filterB)/2);\r\n});\r\nSpec.add(\\freqA, ControlSpec(1, 18000, \\exp, 0, 1));\r\nSpec.add(\\freqB, ControlSpec(1, 18000, \\exp, 0, 1));\r\nSpec.add(\\freqMul, ControlSpec(0, 4, \\lin, 0, 1));\r\nSpec.add(\\freqAdd, ControlSpec(-10000, 10000, \\lin, 0, 0));\r\nSpec.add(\\curveA, ControlSpec(0, 1, \\lin, 0, 0));\r\nSpec.add(\\curveB, ControlSpec(0, 1, \\lin, 0, 0));\r\nSpec.add(\\resA, ControlSpec(0.01, 1, \\exp, 0, 1));\r\nSpec.add(\\resB, ControlSpec(0.01, 1, \\exp, 0, 1));\r\nSpec.add(\\resMul, ControlSpec(0, 1, \\lin, 0, 1));\r\nSpec.add(\\resAdd, ControlSpec(0, 1, \\lin, 0, 0));\r\nSpec.add(\\od, ControlSpec(0, 1, \\lin, 0, 0));\r\nNdef(\\VAKorg35TwinPeak).gui;\r\n)\r\nNdef(\\VAKorg35TwinPeak).gui;\r\nNdef(\\VAKorg35TwinPeak) <<>.inA Ndef(\\testTones);\r\n\r\n//////////////////////////\r\n//VALadder, res, overdrive\r\n//glassy, meh sharp pings\r\n//VERY interesting cascading\r\n//tones when res is 1 and\r\n//freq is low\r\n//////////////////////////\r\n(\r\nNdef(\\VALadderTwinPeak, {\r\n\tvar inA, inB, freqA, freqB, freqMul, freqAdd, curveA, curveB, resA, resB, resMul, resAdd, od, filterA, filterB, sig;\r\n\tinA = \\inA.ar(val:0, lag:0)!2; //input for channel A\r\n\tinB = \\inB.ar(val:0, lag:0)!2; //input for channel B\r\n\tfreqA = \\freqA.ar(val:500, lag:0);//cv for A freq\r\n\tfreqB = \\freqB.ar(val:500, lag:0);//cv for B freq\r\n\tfreqMul = \\freqMul.ar(val:1, lag:0);//cv for frequency multiplier\r\n\tfreqAdd = \\freqAdd.ar(val:0, lag:0);//cv for frequency addition\r\n\tcurveA = \\curveA.ar(val:0, lag:0);//cv for A curve\r\n\tcurveB = \\curveB.ar(val:0, lag:0);//cv for B curve\r\n\tresA = \\resA.ar(val:0, lag:0);//cv for A resonance\r\n\tresB = \\resB.ar(val:0, lag:0);//cv for B resonance\r\n\tresMul = \\resMul.ar(val:1, lag:0);//cv for resonance multiplier\r\n\tresAdd = \\resAdd.ar(val:0, lag:0);//cv for resonance addition\r\n\tod = \\od.ar(val:0, lag:0);//cv for overdrive\r\n\tfilterA = VALadder.ar(\r\n\t\t(inA+(curveB * inB)).clip(-1, 1), //input\r\n\t\t((freqA*freqMul)+freqAdd).clip(1, 20000), //freq\r\n\t\t((resA*resMul)+resAdd).clip(0, 1), //resonance\r\n\t\tod);//overdrive\r\n\tfilterB = VALadder.ar(\r\n\t\t(-1)*((inB+(curveA * inA)).clip(-1,1)),\r\n\t\t((freqB*freqMul)+freqAdd).clip(1, 20000),\r\n\t\t((resB*resMul)+resAdd).clip(0, 1),\r\n\t\tod);\r\n\tsig = Limiter.ar((filterA+filterB)/2);\r\n});\r\nSpec.add(\\freqA, ControlSpec(1, 18000, \\exp, 0, 1));\r\nSpec.add(\\freqB, ControlSpec(1, 18000, \\exp, 0, 1));\r\nSpec.add(\\freqMul, ControlSpec(0, 4, \\lin, 0, 1));\r\nSpec.add(\\freqAdd, ControlSpec(-10000, 10000, \\lin, 0, 0));\r\nSpec.add(\\curveA, ControlSpec(0, 1, \\lin, 0, 0));\r\nSpec.add(\\curveB, ControlSpec(0, 1, \\lin, 0, 0));\r\nSpec.add(\\resA, ControlSpec(0.01, 1, \\exp, 0, 1));\r\nSpec.add(\\resB, ControlSpec(0.01, 1, \\exp, 0, 1));\r\nSpec.add(\\resMul, ControlSpec(0, 1, \\lin, 0, 1));\r\nSpec.add(\\resAdd, ControlSpec(0, 1, \\lin, 0, 0));\r\nSpec.add(\\od, ControlSpec(0, 1, \\lin, 0, 0));\r\nNdef(\\VALadderTwinPeak).gui;\r\n)\r\nNdef(\\VALadderTwinPeak).gui;\r\nNdef(\\VALadderTwinPeak) <<>.inA Ndef(\\testTones);\r\n\r\n///////////////////////\r\n//VASEM12, res\r\n//similar to above, harsh\r\n///////////////////////\r\n(\r\nNdef(\\VASEM12TwinPeak, {\r\n\tvar inA, inB, freqA, freqB, freqMul, freqAdd, curveA, curveB, resA, resB, resMul, resAdd, filterA, filterB, sig;\r\n\tinA = \\inA.ar(val:0, lag:0)!2; //input for channel A\r\n\tinB = \\inB.ar(val:0, lag:0)!2; //input for channel B\r\n\tfreqA = \\freqA.ar(val:500, lag:0);//cv for A freq\r\n\tfreqB = \\freqB.ar(val:500, lag:0);//cv for B freq\r\n\tfreqMul = \\freqMul.ar(val:1, lag:0);//cv for frequency multiplier\r\n\tfreqAdd = \\freqAdd.ar(val:0, lag:0);//cv for frequency addition\r\n\tcurveA = \\curveA.ar(val:0, lag:0);//cv for A curve\r\n\tcurveB = \\curveB.ar(val:0, lag:0);//cv for B curve\r\n\tresA = \\resA.ar(val:0, lag:0);//cv for A resonance\r\n\tresB = \\resB.ar(val:0, lag:0);//cv for B resonance\r\n\tresMul = \\resMul.ar(val:1, lag:0);//cv for resonance multiplier\r\n\tresAdd = \\resAdd.ar(val:0, lag:0);//cv for resonance addition\r\n\tfilterA = VALadder.ar(\r\n\t\t(inA+(curveB * inB)).clip(-1, 1), //input\r\n\t\t((freqA*freqMul)+freqAdd).clip(1, 20000), //freq\r\n\t\t((resA*resMul)+resAdd).clip(0, 1), //resonance\r\n\t\t);\r\n\tfilterB = VALadder.ar(\r\n\t\t(-1)*((inB+(curveA * inA)).clip(-1,1)),\r\n\t\t((freqB*freqMul)+freqAdd).clip(1, 20000),\r\n\t\t((resB*resMul)+resAdd).clip(0, 1),\r\n\t\t);\r\n\tsig = Limiter.ar((filterA+filterB)/2);\r\n});\r\nSpec.add(\\freqA, ControlSpec(1, 18000, \\exp, 0, 1));\r\nSpec.add(\\freqB, ControlSpec(1, 18000, \\exp, 0, 1));\r\nSpec.add(\\freqMul, ControlSpec(0, 4, \\lin, 0, 1));\r\nSpec.add(\\freqAdd, ControlSpec(-10000, 10000, \\lin, 0, 0));\r\nSpec.add(\\curveA, ControlSpec(0, 1, \\lin, 0, 0));\r\nSpec.add(\\curveB, ControlSpec(0, 1, \\lin, 0, 0));\r\nSpec.add(\\resA, ControlSpec(0.01, 1, \\exp, 0, 1));\r\nSpec.add(\\resB, ControlSpec(0.01, 1, \\exp, 0, 1));\r\nSpec.add(\\resMul, ControlSpec(0, 1, \\lin, 0, 1));\r\nSpec.add(\\resAdd, ControlSpec(0, 1, \\lin, 0, 0));\r\nNdef(\\VASEM12TwinPeak).gui;\r\n)\r\nNdef(\\VASEM12TwinPeak).gui;\r\nNdef(\\VASEM12TwinPeak) <<>.inA Ndef(\\testTones);\r\n\r\n\r\n///////////////////////////////////////\r\n//Ringz, decay time, optimized for pinging\r\n//actually bad and pinging\r\n//LOL\r\n///////////////////////////////////////\r\n(\r\nNdef(\\RingzTwinPeak, {\r\n\tvar inA, inB, freqA, freqB, freqMul, freqAdd, curveA, curveB, decayA, decayB, decayMul, decayAdd, filterA, filterB, sig;\r\n\tinA = \\inA.ar(val:0, lag:0)!2; //input for channel A\r\n\tinB = \\inB.ar(val:0, lag:0)!2; //input for channel B\r\n\tfreqA = \\freqA.ar(val:500, lag:0);//cv for A freq\r\n\tfreqB = \\freqB.ar(val:500, lag:0);//cv for B freq\r\n\tfreqMul = \\freqMul.ar(val:1, lag:0);//cv for frequency multiplier\r\n\tfreqAdd = \\freqAdd.ar(val:0, lag:0);//cv for frequency addition\r\n\tcurveA = \\curveA.ar(val:0, lag:0);//cv for A curve\r\n\tcurveB = \\curveB.ar(val:0, lag:0);//cv for B curve\r\n\tdecayA = \\decayA.ar(val:0, lag:0);//cv for A resonance\r\n\tdecayB = \\decayB.ar(val:0, lag:0);//cv for B resonance\r\n\tdecayMul = \\decayMul.ar(val:1, lag:0);//cv for resonance multiplier\r\n\tdecayAdd = \\decayAdd.ar(val:0, lag:0);//cv for resonance addition\r\n\tfilterA = DFM1.ar(\r\n\t\t(inA+(curveB * inB)).clip(-1, 1), //input\r\n\t\t((freqA*freqMul)+freqAdd).clip(1, 20000), //freq\r\n\t\t((decayA*decayMul)+decayAdd).clip(0, 10) //resonance\r\n\t\t);\r\n\tfilterB = DFM1.ar(\r\n\t\t(-1)*((inB+(curveA * inA)).clip(-1,1)),\r\n\t\t((freqB*freqMul)+freqAdd).clip(1, 20000),\r\n\t\t((decayB*decayMul)+decayAdd).clip(0, 10)\r\n\t\t);\r\n\tsig = Limiter.ar((filterA+filterB)/2);\r\n});\r\nSpec.add(\\freqA, ControlSpec(1, 18000, \\exp, 0, 1));\r\nSpec.add(\\freqB, ControlSpec(1, 18000, \\exp, 0, 1));\r\nSpec.add(\\freqMul, ControlSpec(0, 4, \\lin, 0, 1));\r\nSpec.add(\\freqAdd, ControlSpec(-10000, 10000, \\lin, 0, 0));\r\nSpec.add(\\curveA, ControlSpec(0, 1, \\lin, 0, 0));\r\nSpec.add(\\curveB, ControlSpec(0, 1, \\lin, 0, 0));\r\nSpec.add(\\decayA, ControlSpec(0, 5, \\lin, 0, 1));\r\nSpec.add(\\decayB, ControlSpec(0, 5, \\lin, 0, 1));\r\nSpec.add(\\decayMul, ControlSpec(0, 1, \\lin, 0, 1));\r\nSpec.add(\\decayAdd, ControlSpec(0, 1, \\lin, 0, 0));\r\nNdef(\\RingzTwinPeak).gui;\r\n)\r\nNdef(\\RingzTwinPeak).gui;\r\nNdef(\\RingzTwinPeak) <<>.inA Ndef(\\testTones);",
   "id" : "1-5fP",
   "is_private" : null,
   "labels" : [
      "filter",
      "formant",
      "hordijk",
      "twinpeak"
   ],
   "description" : "Ndefs inspired by rob hordijk's twin peak filters, which can accomplish some formant-y fun",
   "ancestor_list" : [],
   "author" : "eli.rosenkim",
   "name" : "Twin Peak Filters"
}
