{
   "author" : "bgola",
   "name" : "Make Noise 0-Coast",
   "ancestor_list" : [],
   "description" : "Trying to replicate the Make Noise 0-Coast semi-modular synth design\r\nInspired by https://www.youtube.com/watch?v=gQCmjEgFgS4",
   "labels" : [
      "synth",
      "modular",
      "0coast",
      "makenoise"
   ],
   "id" : "1-5eu",
   "is_private" : null,
   "code" : "// Trying to replicate the Make Noise 0-Coast semi-modular synth design\r\n// by https://bgo.la/\r\n// Inspired by https://www.youtube.com/watch?v=gQCmjEgFgS4\r\n\r\n(\r\nNdef(\\nocoast).addSpec(\\saturation, [0.2, 12, \\lin]);\r\nNdef(\\nocoast).addSpec(\\fold, [0, 1, \\lin]);\r\nNdef(\\nocoast).addSpec(\\slopeAtt, [-1, 1, \\lin]);\r\nNdef(\\nocoast).addSpec(\\curve, [-10, 10, \\lin]);\r\nNdef(\\nocoast).addSpec(\\rise, [0.01, 4, \\lin]);\r\nNdef(\\nocoast).addSpec(\\fall, [0.01, 4, \\lin]);\r\nNdef(\\nocoast).addSpec(\\dyn, [0, 1, \\lin]);\r\nNdef(\\nocoast).addSpec(\\onset, [0.0, 4, \\lin]);\r\nNdef(\\nocoast).addSpec(\\decay, [0.0, 4, \\lin]);\r\nNdef(\\nocoast).addSpec(\\sustain, [0.0, 1, \\lin]);\r\nNdef(\\nocoast).addSpec(\\contourCurve, [-10, 10, \\lin]);\r\nNdef(\\nocoast).addSpec(\\slopeLoop, [0, 1, \\lin, 1]);\r\nNdef(\\nocoast).addSpec(\\ogate, [0.0, 1, \\lin]);\r\nNdef(\\nocoast).addSpec(\\balance, [-1, 1, \\lin]);\r\nNdef(\\nocoast).addSpec(\\att, [0.1, 2000, \\exp, 1]);\r\nNdef(\\nocoast, { arg freq=60, clockFreq=1, saturation=1.0, fold=0.3, ogate=1, slopeAtt=0.6, curve=0, rise=0.2, fall=2,\r\n\tdyn=1, onset=0.0, decay=0.4, sustain=1.0, contourCurve=0, slopeLoop=1, balance=0, att=1;\r\n\tvar clock = Impulse.ar(clockFreq);\r\n\tvar trilfo = LFTri.ar(clockFreq);\r\n\tvar sqrlfo = LFPulse.ar(clockFreq);\r\n\tvar random = Latch.ar(WhiteNoise.ar, clock);\r\n\tvar slope,contour,eoa,eos, osc;\r\n\tvar overtone, dynamics, proc, lpf;\r\n\tcontour = EnvGen.ar(Env.new([0,1,sustain,0], [onset, decay, decay], contourCurve, 2), ogate);\r\n\teoa = BinaryOpUGen('==', contour, 1);\r\n\tslope = EnvGen.ar(Env.new([0,0,1,0,0], [0,rise,fall,0], curve, 3, Select.kr(slopeLoop, [2, 0])), ogate | slopeLoop);\r\n\teos = BinaryOpUGen('==', slope, 0.0);\r\n\tosc = LFTri.ar(freq);\r\n\tovertone = (osc.pow((saturation))).tanh;\r\n\tfold = (fold + (slope*slopeAtt));\r\n\tfold = fold.clip(0.04,1);\r\n\tproc = Normalizer.ar(Fold.ar(overtone, fold.neg, fold));\r\n\tcontour = contour * dyn;\r\n\tdynamics = LPF.ar(XFade2.ar(osc, proc, balance), contour.linexp(0,1, 20, 20000)) * contour.clip(0,1)!2;\r\n\tdynamics;\r\n}).gui;\r\n)\r\n\r\n\r\n// Krell patch:\r\n\r\n(\r\nNdef(\\nocoast, { arg freq=60, clockFreq=1, satu=1.0, fold=0.3, ogate=1, slopeAtt=0.6, curve=0, rise=0.2, fall=2,\r\n\tdyn=1, onset=0.0, decay=0.4, sustain=1.0, contourCurve=0, slopeLoop=1, balance=0, att=120;\r\n\tvar clock = Impulse.ar(clockFreq);\r\n\tvar trilfo = LFTri.ar(clockFreq);\r\n\tvar sqrlfo = LFPulse.ar(clockFreq);\r\n\tvar random = Latch.ar(WhiteNoise.ar, LocalIn.ar(1));\r\n\tvar slope,contour,eoa,eos, osc;\r\n\tvar overtone, dynamics, proc, lpf;\r\n\tcontour = EnvGen.ar(Env.new([0,1,sustain,0], [onset, decay, decay], contourCurve, 2), ogate);\r\n\teoa = BinaryOpUGen('==', contour, 1);\r\n\tslope = EnvGen.ar(Env.new([0,0,1,0,0], [0,rise+random,fall+random,0], curve, 3, Select.kr(slopeLoop, [2, 0])), ogate | slopeLoop);\r\n\teos = BinaryOpUGen('==', slope, 0.0);\r\n\tLocalOut.ar(eos);\r\n\tosc = LFTri.ar(freq + (random*att));\r\n\tovertone = (osc.pow((satu))).tanh;\r\n\tfold = (fold + (slope*slopeAtt));\r\n\tfold = fold.clip(0.04,1);\r\n\tproc = Normalizer.ar(Fold.ar(overtone, fold.neg, fold));\r\n\tslope = slope * dyn;\r\n\tdynamics = LPF.ar(XFade2.ar(osc, proc, balance), slope.linexp(0,1, 20, 20000)) * slope.clip(0,1)!2;\r\n\tdynamics;\r\n}).gui;\r\n)"
}
