{
   "is_private" : null,
   "id" : "1-4SB",
   "code" : "(\r\ns = Server.local.waitForBoot({\r\n\t~bus = Bus.audio(s,2);\r\n\tSynthDef(\\reverb_ef, {\r\n\t\targ\t\tamp=1, lPos=0, mix=0.085, revTime=1.8, preDel=0.1, in, out;\r\n\t\tvar\t\tsig, verbSig, totalSig, outSig;\r\n\r\n\t\t//no wacky values please\r\n\t\tmix = mix.clip(0,1);\r\n\r\n\t\tsig = In.ar(in, 2);\r\n\r\n\t\t//pre-delay\r\n\t\tverbSig = DelayN.ar(sig, preDel, preDel);\r\n\r\n\t\ttotalSig = 0;\r\n\t\t12.do{\r\n\t\t\tverbSig = AllpassN.ar(verbSig, 0.06, {Rand(0.001,0.06)}!2, revTime);\r\n\t\t\tverbSig = LPF.ar(verbSig, 4500);\r\n\t\t\ttotalSig = totalSig + verbSig;\r\n\t\t};\r\n\r\n\t\t//dry/wet mix\r\n\t\ttotalSig = XFade2.ar(sig, totalSig, mix.linlin(0,1,-1,1));\r\n\r\n\t\toutSig = totalSig * amp;\r\n\t\tOut.ar(out, outSig);\r\n\t}).add;\r\n\r\n\tSynthDef(\\filtSaw, {\r\n\t\targ\t\tfreq=440, detune=3.0, atk=6, sus=4, rel=6, curve1=1, curve2=(-1),\r\n\t\t\t\tminCf=30, maxCf=6000, minRq=0.005, maxRq=0.04,\r\n\t\t\t\tminBpfHz=0.02, maxBpfHz=0.25,\r\n\t\t\t\tlowShelf=220, rs=0.85, db=6,\r\n\t\t\t\tgate=1, amp=1, spread=1.0, out=0;\r\n\t\tvar sig, env;\r\n\t\tenv = EnvGen.kr(Env([0,1,1,0],[atk,sus,rel],[curve1,0,curve2]), gate, levelScale:amp, doneAction:2);\r\n\t\tsig = Saw.ar(\r\n\t\t\tfreq +\r\n\t\t\tLFNoise1.kr({LFNoise1.kr(0.5).range(0.15,0.4)}!8).range(detune.neg,detune));\r\n\t\tsig = BPF.ar(\r\n\t\t\tsig,\r\n\t\t\tLFNoise1.kr({LFNoise1.kr(0.13).exprange(minBpfHz,maxBpfHz)}!8).exprange(minCf, maxCf),\r\n\t\t\tLFNoise1.kr({LFNoise1.kr(0.08).exprange(0.08,0.35)}!8).range(minRq, maxRq)\r\n\t\t);\r\n\t\tsig = BLowShelf.ar(sig, lowShelf, rs, db);\r\n\t\tsig = SplayAz.ar(4, sig, spread);\r\n\t\tsig = sig * env * 2;\r\n\t\tOut.ar(out, sig);\r\n\t}).add;\r\n\r\n\t~cluster = {\r\n\t\tvar trnsp, bund;\r\n\t\tbund = s.makeBundle(false, {});\r\n\t\ttrnsp = rrand(-7,7);\r\n\t\tArray.fill(exprand(4,14).round.postln, {[1,2,3,4,6,8,12,16].wchoose([7,6,5,4,3,3,1].normalizeSum)}).do{\r\n\t\t\t|i|\r\n\t\t\tvar cfLo;\r\n\t\t\tcfLo = (([23,35,47,50,52,59,61,63,64,76,78].choose) + trnsp).midicps * ((1..8).choose);\r\n\r\n\t\t\t\tbund = s.makeBundle(false, {\r\n\t\t\t\t\tSynth(\r\n\t\t\t\t\t\t\\filtSaw,\r\n\t\t\t\t\t\t[\r\n\t\t\t\t\t\t\t\\freq, i,\r\n\t\t\t\t\t\t\t\\detune, 0,\r\n\t\t\t\t\t\t\t\\minBpfHz, 0.01,\r\n\t\t\t\t\t\t\t\\maxBpfHz,i.expexp(1.0,16.0,0.1,16.0),\r\n\t\t\t\t\t\t\t\\minRq, 0.003,\r\n\t\t\t\t\t\t\t\\maxRq, exprand(0.008,0.08),\r\n\t\t\t\t\t\t\t\\minCf, cfLo,\r\n\t\t\t\t\t\t\t\\maxCf, cfLo * [1,1.1,1.5].wchoose([0.87,0.1,0.03]),\r\n\t\t\t\t\t\t\t\\amp, exprand(0.15,0.25),\r\n\t\t\t\t\t\t\t\\atk, exprand(0.7,8),\r\n\t\t\t\t\t\t\t\\rel, 5,\r\n\t\t\t\t\t\t\t\\sus, rrand(6,10.0),\r\n\t\t\t\t\t\t\t\\spread, exprand(1.5,8.0),\r\n\t\t\t\t\t\t\t\\out, ~bus,\r\n\t\t\t\t\t\t],\r\n\t\t\t\t\t)\r\n\t\t\t\t},\r\n\t\t\t\tbund\r\n\t\t\t)\r\n\t\t};\r\n\r\n\t\t//schedule on an integer time value\r\n\t\tSystemClock.schedAbs(\r\n\t\t\t(thisThread.seconds+1.0).round(1.0),\r\n\t\t\t{\r\n\t\t\t\tbund = s.makeBundle(nil, {}, bund);\r\n\t\t\t\tnil;\r\n\t\t\t}\r\n\t\t);\r\n\t};\r\n});\r\n)\r\n\r\n//start clusters\r\n(\r\nt = Task {\r\n\t//instantiate reverb synth\r\n\tSynth(\\reverb_ef, [\\in, ~bus, \\out, 0]);\r\n\r\n\t{\r\n\t\t~cluster.value;\r\n\t\trrand(5.5,12.0).wait;\r\n\t}.loop;\r\n}.start;\r\n)\r\n\r\n//stop clusters\r\nt.stop;",
   "labels" : [
      "rhythmic",
      "relaxed",
      "endless",
      "clusters",
      "reverb",
      "spatialization",
      "mellow",
      "hypnotic",
      "marimba"
   ],
   "ancestor_list" : [],
   "description" : "Infinite reverberant rhythmic clusters with a marimba-like timbre.",
   "name" : "Infinite rhythmic marimba clusters",
   "author" : "eli.fieldsteel"
}
