{
   "author" : "38nonprivate",
   "name" : "It's more fun to compute this snare",
   "description" : "An attempt to replicate the snare from \"It's More Fun To Compute\" by, err... somebody please remind me.\r\nAs usual, it's close but no cigar.\r\nNano changes in the envelope times produce wildly different end results.\r\n\r\nRoom for improvement: all Rands should be TRands, doneAction should be an argument, then it could be retriggered.\r\nLevels and timings of elements could be arguments.",
   "ancestor_list" : [],
   "labels" : [
      "kraftwerk",
      "percussion",
      "snare",
      "electro"
   ],
   "id" : "1-N",
   "is_private" : null,
   "code" : "(\r\ns = Server.default;\r\ns.boot;\r\n)\r\n\r\n(\r\nx = SynthDef(\"more_fun_snare\", {\r\n\t\r\n\targ audioOutBus = 0;\r\n\t\r\n\tvar env_amp, env_pitch;\r\n\tvar envGen_amp;\r\n\tvar noise, pulse_cluster, envGen_hihat, out_hihat;\r\n\tvar sine_noise;\r\n\tvar flick, envGen_flickPitch, envGen_flickAmp;\r\n\tvar trig_flick, gapTime_flick;\r\n\tvar lastFlick, envGen_lastFlickPitch, envGen_lastFlickAmp, lastFlickDelayTime;\r\n\t\r\n\tvar output;\r\n\t\r\n\tenv_amp = Env([1.0, 1.0, 0.0], [0.0, 0.8]);\r\n\tenvGen_amp = EnvGen.ar(env_amp, doneAction: 2);\r\n\t\r\n\tnoise = BPF.ar(WhiteNoise.ar, 214, 0.1, 0.5);\r\n\tnoise = noise + BPF.ar(WhiteNoise.ar, 1157, 0.1, 0.5);\r\n\tnoise = noise + RHPF.ar(WhiteNoise.ar, 3000, 0.1, 0.2) * 0.2;\r\n\t\r\n\tpulse_cluster = Mix.fill(6, {\r\n\t\tLFPulse.ar(ExpRand(250, 360), Rand(0, 0.99), Rand(0.3, 0.7));\r\n\t});\r\n\tpulse_cluster = RHPF.ar(pulse_cluster, 8000, 0.1, 0.2);\r\n\tpulse_cluster = LPF.ar(pulse_cluster, 8000);\r\n\t\r\n\tenvGen_hihat = EnvGen.ar(Env.perc(0.001, 0.85, 0.5, -7));\r\n\t\r\n\tsine_noise = SinOsc.ar(1131 + BrownNoise.ar.range(-90, 90)) * 0.025;\r\n\t\r\n\tout_hihat = (pulse_cluster + noise + sine_noise) * envGen_hihat * 0.7;\r\n\t\r\n\tgapTime_flick = 0.019 * TRand.kr(0.999, 1.001, 1.0);\r\n\ttrig_flick = Impulse.ar(gapTime_flick.reciprocal) * EnvGen.ar(Env([1, 1, 0], [gapTime_flick * 2, 0]));\r\n\t\r\n\tenvGen_flickPitch = EnvGen.ar(Env.perc(0.003, 0.024, 1.0, -4.2), 1.0, levelScale: 5300, levelBias: 50);\r\n\tenvGen_flickAmp = EnvGen.ar(Env.perc(0.0, 0.04, 1.0, 5));\r\n\tflick = SinOsc.ar(envGen_flickPitch * Rand(0.999, 1.001), Rand(0, 6.2)) * envGen_flickAmp * 0.15;\r\n\tflick = flick + \r\n\t\tHPF.ar(\r\n\t\t\tSinOsc.ar(envGen_flickPitch * 4.9 * Rand(0.999, 1.001), Rand(0, 6.2)) * envGen_flickAmp * 0.1,\r\n\t\t\t2000\r\n\t\t\t);\r\n\tflick = flick + CombC.ar(flick, 0.2, gapTime_flick, 0.1, 0.55);\r\n\tflick = LPF.ar(flick, 3000);\r\n\tflick = HPF.ar(flick, 140);\r\n\t\r\n\t\r\n\tenvGen_lastFlickPitch = EnvGen.ar(Env.perc(0.0026, 0.022, 1.0, -7), 1.0, levelScale: 3300, levelBias: 90);\r\n\tenvGen_lastFlickAmp = EnvGen.ar(Env.perc(0.0, 0.035, 1.0, 2));\r\n\tlastFlick = SinOsc.ar(envGen_lastFlickPitch * Rand(0.999, 1.001)) * envGen_lastFlickAmp * 0.8;\r\n\t\r\n\tlastFlickDelayTime = 0.054 * TRand.kr(0.99, 1.01, 1.0);\r\n\t\r\n\tlastFlick = CombC.ar(lastFlick, 0.2, lastFlickDelayTime, 0.02) * 0.09;\r\n\tlastFlick = HPF.ar(lastFlick, 200);\r\n\toutput = (flick + lastFlick + out_hihat) *  envGen_amp;\r\n\toutput = LPF.ar(output, 6000);\r\n\toutput = output + BPF.ar(output, 6000, 0.1, 0.6);\r\n\toutput = output + (trig_flick * 0.4);\r\n\tOut.ar(audioOutBus, output ! 2);\r\n\t\r\n}).send(s);\r\n)\r\n\r\n(\r\n{\r\n\r\n100.do {\r\n\t\r\n\tSynth(\"more_fun_snare\", [\\audioOutBus, 0], s);\r\n\t(60 / 120 / 0.5).wait;\r\n\t\r\n};\r\n\r\n\r\n}.fork;\r\n\r\n)"
}
