{
   "id" : "1-4VN",
   "is_private" : null,
   "code" : "(\r\nSynthDef(\\simple_saw, {|outbus, freq = 30, amp = 1, decay = 10|\r\n  var sig, env;\r\n  freq = ({ LFNoise2.kr(1) } ! 2).exprange(freq * 0.9, freq * 1.1);\r\n  env = EnvGen.kr(Env.perc(0.001, decay), 1, amp, doneAction: 2);\r\n  sig = RLPF.ar(Saw.ar(freq), freq * XLine.kr(30, 5), 0.5) * env;\r\n  Out.ar(outbus, sig);\r\n}).add;\r\n\r\nSynthDef(\\distort_filt, { |outbus, amp = 0.5, amt = 0.5, rate = 10, sig_thresh = 0.001, detect_onsets = 1|\r\n  var sig, env, wet, env_on, env_tail, chain, trig, onsetenv, filtersig, filterenv;\r\n\r\n  wet = amt;\r\n\r\n  sig = In.ar(outbus, 2);\r\n  env = Amplitude.ar(sig, 0.01, 0.2);\r\n\r\n  // onset detection\r\n  chain = FFT(LocalBuf(512), sig);\r\n  trig = Onsets.kr(chain, 1, \\rcomplex, 2, 0.5);\r\n  trig = trig * detect_onsets.clip(0, 1);\r\n  onsetenv = EnvGen.kr(Env.perc, trig);\r\n\r\n  filterenv = { (LFNoise2.ar(rate).range(0, 1) * (1 - onsetenv)) + onsetenv };\r\n\r\n  filtersig = ({ DFM1.ar(sig, filterenv.().linexp(0, 1, 20, 3000), 1, 5, 0, 1) } ! 5).sum * 0.2 * env;\r\n\r\n  env_on = (env > sig_thresh).lag(0.1);\r\n  env_tail = ((env - sig_thresh) * 13).clip(0, 1);\r\n\r\n  filtersig = (DFM1.ar(filtersig, filterenv.().linexp(0, 1, 20, 1000), 1, 5) * env_tail) + (filtersig * 0.1);\r\n\r\n  sig = XFade2.ar(sig, filtersig, wet.linlin(0, 1, -1, 1), amp);\r\n\r\n  XOut.ar(outbus, 1, sig * env_on);\r\n}, [0, 0.1, 0.1, 0.1, 0.1, 0]).add;\r\n)\r\n\r\n(\r\nPproto({\r\n  ~dist = (type: \\on, \\amt: 0, instrument: \\distort_filt, addAction: \\addToTail).yield;\r\n  ~distCtrl = [\\set, ~dist[\\id], ~dist[\\msgFunc]];\r\n  }, [\r\n    Pbind(*[\r\n      #[type, id, msgFunc], Pkey(\\distCtrl),\r\n      \\args, #[rate, amp, amt],\r\n      dur: 0.1,\r\n      rate: Pwhite(1, 50),\r\n      amt: Pbrown(0.2, 1, 0.1),\r\n      amp: Pseq([0.5], inf)\r\n    ]),\r\n    PmonoArtic(*[\\simple_saw,\r\n      octave: 2,\r\n      amp: 1,\r\n      scale: Scale.minor,\r\n      degree: Pbrown(4, 15, 3, inf).asInteger,\r\n      dur: Prand([Pseq([0.1, 0.1]), Pseq([0.1, 0.2, 0.1]), 0.2, 0.4], inf) * Pseg(Pseq([1, 1, 20, 20]), Pseq([15, 0, 15]), \\exp),\r\n      legato: Pwhite(0.98, 1.005)\r\n    ])\r\n  ]\r\n).play;\r\n)",
   "labels" : [
      "filter",
      "distortion",
      "onset detection"
   ],
   "ancestor_list" : [],
   "description" : "Distortion made by abusing the DFM1",
   "name" : "Another weird filter distortion",
   "author" : "wondersluyter"
}
