{
   "code" : "/**\r\nRequires:\r\n\r\nSuperCollider v3.8.0+\r\n\r\nFM7 (sc3 plugins)\r\n\r\nFeedback Quark\r\n\r\nTo run evaluate each of the numbered blocks\r\n**/\r\n\r\n////////////////////\r\n// 1\r\nTempoClock.default.tempo_(60/60);\r\n\r\n////////////////////\r\n// 2\r\n(\r\n~env = {arg min = 1, max = 1, trig, dur;\r\n\r\n\tvar shape = Env.shapeNames.choose;\r\n\tvar num = rrand(4,16);\r\n\tvar levels = (0..rrand(3,8)).collect({1.0.rand;});\r\n\tvar durs = (0..levels.size-1).collect({1.0.rand}).normalizeSum;\r\n\tvar env = Env(levels,durs,shape);\r\n\tEnvGen.kr(env, gate:trig, timeScale:dur).range(min, max);\r\n};\r\n\r\n~ctrls = {arg freq, trig, dur;\r\n\r\n\tvar ctrls = (0..5).collect({arg val;\r\n\t\tvar min = rrand(0.25, 1.0);\r\n\t\tvar max = rrand(1.0, 3.0);\r\n\t\tvar fmul = ~env.(min, max, trig, dur);\r\n\t\t[freq * fmul, 0, 1];\r\n\t});\r\n\tctrls;\r\n};\r\n\r\n~algos = [\r\n\r\n\t[0,2] -> [\r\n\t\t[0,1],\r\n\t\t[2,3],\r\n\t\t[3,4],\r\n\t\t[4,5],\r\n\t\t[5,5]\r\n\t],\r\n\r\n\t[0,2] -> [\r\n\t\t[0,1],\r\n\t\t[1,1],\r\n\t\t[2,3],\r\n\t\t[3,4],\r\n\t\t[4,5]\r\n\t],\r\n\r\n\t[0,3] -> [\r\n\t\t[0,1],\r\n\t\t[1,2],\r\n\t\t[3,4],\r\n\t\t[4,5],\r\n\t\t[5,5]\r\n\t],\r\n\r\n\t[0,3] -> [\r\n\t\t[0, 1],\r\n\t\t[1, 2],\r\n\t\t[3, 4],\r\n\t\t[4, 5],\r\n\t\t[5, 3]\r\n\t],\r\n\r\n\t[0,2] -> [\r\n\t\t[0,1],\r\n\t\t[2,3],\r\n\t\t[3,4],\r\n\t\t[3,5],\r\n\t\t[4,5]\r\n\t],\r\n\r\n\t[0,1,2,3,4,5] -> [\r\n\t\t[5,5]\r\n\t]\r\n];\r\n\r\n~mods = {arg trig, dur;\r\n\r\n\tvar algo = ~algos.choose;\r\n\tvar matrix = Array.fill2D(6, 6, 0);\r\n\tvar vals = algo.value;\r\n\tvals.do {arg x;\r\n\t\tmatrix[x[0]][x[1]] = ~env.(1.0.rand, 1.0.rand, trig, dur)\r\n\t};\r\n\t[matrix, algo.key];\r\n};\r\n\r\n~synth = {\r\n\r\n\tvar freq, sig;\r\n\r\n\tthisThread.randSeed_(100000.rand.debug(\"seed\"));\r\n\r\n\tfreq = \\freq.kr(432);\r\n\r\n\tsig = {\r\n\r\n\t\tvar dur = \\dur.kr(1);\r\n\r\n\t\tvar trig = \\trig.tr(0);\r\n\r\n\t\tvar ctrls = ~ctrls.(freq, trig, dur);\r\n\r\n\t\tvar mods = ~mods.(trig, dur);\r\n\r\n\t\tvar sig = FM7.ar(ctrls, mods[0]).slice(mods[1]);\r\n\r\n\t\tvar env = Env.linen(\\atk.kr(0.01), \\sus.kr(0), \\rel.kr(1), curve:\\curve.kr(-4)).kr(gate:trig);\r\n\r\n\t\tsig = Splay.ar(sig) * env;\r\n\r\n\t\tsig;\r\n\t};\r\n\r\n\tSplay.ar(sig.()) * \\amp.kr(0.1) * AmpCompA.kr(freq);\r\n};\r\n)\r\n\r\n\r\n////////////////////\r\n// 3\r\n(\r\n~fm11 = NodeProxy.audio;\r\n~fm11.quant = 1.0;\r\n~fm11[0] = ~synth;\r\n)\r\n\r\n////////////////////\r\n// 4\r\n(~fm11[8] = \\set -> Pbind(\r\n\r\n\t\\trig, 1,\r\n\t\\delta, Pwrand([Rest(0.5), 0.5], [0.2, 0.8], inf),\r\n\t\\beatDur, Pfunc({thisThread.clock.beatDur}),\r\n\t\\dur, Pkey(\\beatDur) * Pkey(\\delta) * 1,\r\n\r\n\t\\sus, Pkey(\\dur) * 0.05,\r\n\t\\rel, Pkey(\\dur) * Pwhite(0.01, 0.3),\r\n\t\\curve, -4,\r\n\r\n\t\\degree, Pwhite(0,5,inf),\r\n\t\\octave, Pwrand([4,5,6], [0.3,0.6,0.01].normalizeSum, inf),\r\n\t\\scale, Scale.hexSus\r\n))\r\n\r\n////////////////////\r\n// 5\r\n(\r\nTdef(\\main, {\r\n\r\n\t~fm11.play;\r\n\r\n\t~fm11[16] = \\filter -> {arg in;\r\n\t\tvar sig = FbC({arg fb; fb * 0.4 + in;}, 1.5/4);\r\n\t\tvar sig2 = FbC({arg fb; fb * 0.5 + in;}, 4.5/4);\r\n\t\tsig + sig2;\r\n\t};\r\n\r\n\t~fm11[18] = \\filter -> {arg in; GVerb.ar(in, 150, revtime:5, taillevel:0.7); };\r\n\r\n\t~fm11.set(\\wet16, 0.5, \\wet18, 0.2);\r\n\r\n\tloop({\r\n\t\t\"update\".postln;\r\n\t\t~fm11[0] = ~synth;\r\n\t\t16.wait;\r\n\t});\r\n\r\n}).play\r\n)",
   "is_private" : null,
   "id" : "1-581",
   "labels" : [
      "fm",
      "frequency modulation"
   ],
   "description" : "Requires:\r\n\r\nSuperCollider v3.8.0+\r\n\r\nFM7 (sc3 plugins)\r\n\r\nFeedback Quark",
   "ancestor_list" : [],
   "author" : "david_morgan",
   "name" : "Randomized FM7 perc sounds"
}
