{
   "description" : "It take groups of 10 decimals from Pi and use each number as an index in arrays of patterns. If you are bored by pi, you can try other numbers",
   "ancestor_list" : [
      "1-50t"
   ],
   "name" : "Pi sonification",
   "author" : "grirgz",
   "code" : "(\r\n~decimals = \"31415926535897932384626433832795028841971693993751058209749445923078164062862\"\r\n\"089986280348253421170679821480865132823066470938446095505822317253594081284811\"\r\n\"174502841027019385211055596446229489549303819644288109756659334461284756482337\"\r\n\"867831652712019091456485669234603486104543266482133936072602491412737245870066\"\r\n\"063155881748815209209628292540917153643678925903600113305305488204665213841469\"\r\n\"519415116094330572703657595919530921861173819326117931051185480744623799627495\"\r\n\"673518857527248912279381830119491298336733624406566430860213949463952247371907\"\r\n\"021798609437027705392171762931767523846748184676694051320005681271452635608277\"\r\n\"857713427577896091736371787214684409012249534301465495853710507922796892589235\"\r\n\"420199561121290219608640344181598136297747713099605187072113499999983729780499\"\r\n\"510597317328160963185950244594553469083026425223082533446850352619311881710100\"\r\n\"031378387528865875332083814206171776691473035982534904287554687311595628638823\"\r\n\"537875937519577818577805321712268066130019278766111959092164201989380952572010\"\r\n\"654858632788659361533818279682303019520353018529689957736225994138912497217752\"\r\n\"834791315155748572424541506959508295331168617278558890750983817546374649393192\"\r\n\"550604009277016711390098488240128583616035637076601047101819429555961989467678\"\r\n\"374494482553797747268471040475346462080466842590694912933136770289891521047521\"\r\n\"620569660240580381501935112533824300355876402474964732639141992726042699227967\"\r\n\"823547816360093417216412199245863150302861829745557067498385054945885869269956\"\r\n\"909272107975093029553211653449872027559602364806654991198818347977535663698074\"\r\n\"265425278625518184175746728909777727938000816470600161452491921732172147723501\"\r\n\"414419735685481613611573525521334757418494684385233239073941433345477624168625\"\r\n\"189835694855620992192221842725502542568876717904946016534668049886272327917860\"\r\n\"857843838279679766814541009538837863609506800642251252051173929848960841284886\"\r\n\"269456042419652850222106611863067442786220391949450471237137869609563643719172\"\r\n\"874677646575739624138908658326459958133904780275900994657640789512694683983525\"\r\n\"957098258226205224894077267194782684826014769909026401363944374553050682034962\";\r\n\r\nSynthDef(\\blo, { arg out=0, amp=0.1, gate=1, pan=0, freq=200;\r\n\tvar sig;\r\n\tsig = SinOsc.ar(freq*[1,1.001]);\r\n\tsig = sig * EnvGen.ar(\\adsr.kr(Env.adsr(0.01,0.1,0.8,0.1)),gate,doneAction:2);\r\n\tsig = Pan2.ar(sig, pan, amp);\r\n\tOut.ar(out, sig);\r\n}).add;\r\n\r\nSynthDef(\\raid, { arg out=0, amp=0.1, gate=1, pan=0, freq=200;\r\n\tvar sig;\r\n\tsig = LFSaw.ar(freq * [1,1.001]);\r\n\tsig = RLPF.ar(sig, freq*2);\r\n\tsig = sig * EnvGen.ar(\\adsr.kr(Env.adsr(0.01,0.1,0.8,0.1)),gate,doneAction:2);\r\n\tsig = Pan2.ar(sig, pan, amp);\r\n\tOut.ar(out, sig);\r\n}).add;\r\n\r\nSynthDef(\\raid2, { arg out=0, amp=0.1, gate=1, pan=0, freq=200;\r\n\tvar sig;\r\n\tvar sig1, sig2, sig3, sig4, sig5, sig6, sig7, sig8;\r\n\tvar env1 = EnvGen.kr(Env([1,2,1],[0.01,0.8]), 1);\r\n\tsig = LFSaw.ar(freq * [1,1.001, 1 + Rand(0,0.0001)]);\r\n\tsig1 = (sig * Rand(1,100)).wrap2(1)/2;\r\n\tsig = SelectX.ar( \r\n\t\tSelectX.kr(ExpRand(0.001,1), [\r\n\t\t\tLFSaw.kr(1/8).range(0,1),\r\n\t\t\tSinOsc.kr(freq % 64 / 8).range(0,1),\r\n\t\t])\r\n\t, [sig, sig1]);\r\n\tsig = RLPF.ar(sig, freq*env1 * [1,1 + Rand(0,0.1),2,1.01]);\r\n\r\n\tsig = sig * EnvGen.ar(\\adsr.kr(Env.adsr(0.01,0.1,0.8,0.1)),gate,doneAction:2);\r\n\tsig = Pan2.ar(sig, pan, amp).flop;\r\n\tOut.ar(out, sig);\r\n}).add;\r\n\r\nSynthDef(\\raid3, { arg out=0, amp=0.1, gate=1, pan=0, freq=200, spoon;\r\n\tvar sig;\r\n\tvar xfreq;\r\n\tvar env1 = EnvGen.kr(Env([1,2,1],[0.01,0.8]), 1);\r\n\tenv1 = 1;\r\n\txfreq = freq * ( 1 + ( SinOsc.ar(Rand(100,500)) * Rand(0.1,3) ));\r\n\txfreq = [xfreq, freq];\r\n\tsig = LFSaw.ar(xfreq *.t [1,1.001, 1 + Rand(0,0.0001)]);\r\n\tsig = SelectX.ar( spoon.range(0,1), sig);\r\n\tsig = RLPF.ar(sig, freq*env1 * [1,1 + Rand(0,0.1),2,1.01]);\r\n\tsig = HPF.ar(sig, 100);\r\n\tsig = sig * EnvGen.ar(\\adsr.kr(Env.adsr(0.01,0.1,0.8,0.1)),gate,doneAction:2);\r\n\tsig = Pan2.ar(sig, pan, amp).flop;\r\n\t//sig = sig * 0.5;\r\n\tOut.ar(out, sig);\r\n}).add;\r\n\r\nSynthDef(\\vache, { arg out=0, amp=0.1, gate=1, pan=0, freq=200, totem=1, spoon;\r\n\tvar sig;\r\n\tvar sig1, sig2, sig3, sig4, sig5, sig6, sig7, sig8;\r\n\ttotem = totem.fold(0,8)/8;\r\n\t//totem.poll;\r\n\tfreq = freq * [1,1+spoon.range(0.0001,0.001),1];\r\n\tsig1 = SinOsc.ar(freq);\r\n\tsig2 = LFSaw.ar(freq);\r\n\tsig3 = LFPulse.ar(freq);\r\n\tsig = SelectX.ar( spoon.range(0,2), [sig1, sig2, sig3]);\r\n\tsig = RLPF.ar(sig, spoon.range(1/4,4) * freq, spoon.range(0.3,0.8));\r\n\r\n\tsig1 = sig1.fold2(spoon.range(1,0.1));\r\n\tsig = SelectX.ar( spoon.range(1,0), [sig, sig1]);\r\n\tsig = sig * EnvGen.ar(Env.adsr(0.01,0.1,0.8,0.1),gate,doneAction:2);\r\n\tsig = Pan2.ar(sig, (spoon+[0.1,0.7]).fold(-1,1), amp).flop;\r\n\tOut.ar(out, sig);\r\n}).add;\r\n\r\nSynthDef(\\vache2, { arg out=0, amp=0.1, gate=1, pan=0, freq=200, totem=1, spoon;\r\n\tvar sig;\r\n\tvar sig1, sig2, sig3, sig4, sig5, sig6, sig7, sig8;\r\n\tvar mfreq;\r\n\ttotem = totem.fold(0,8)/8;\r\n\t//totem.poll;\r\n\t//freq = freq * [1,1+spoon.range(0.0001,0.001),1];\r\n\t//freq = freq * [0,5].midiratio;\r\n\tmfreq = freq * ( 1 + ( SinOsc.ar(freq * Rand(1,1.1)) * ( spoon+[0,0.3,0.7] ).fold(0.1,2) ));\r\n\tsig1 = LFSaw.ar(mfreq);\r\n\tsig2 = LFSaw.ar(mfreq * 1/2);\r\n\tsig3 = LFPulse.ar(mfreq);\r\n\tsig = SelectX.ar( spoon.range(0,2), [sig1, sig2, sig3]);\r\n\t//sig = SelectX.ar( ( spoon+[0,1,1.3] ).fold2(0,1), [sig, sig1]);\r\n\r\n\tsig1 = sig1.fold2(spoon.range(1,0.1));\r\n\tsig = SelectX.ar( spoon.range(1,0), [sig, sig1]);\r\n\tsig = RLPF.ar(sig, ( spoon.range(1/4,4) * freq ), spoon.range(0.3,0.8));\r\n\tsig = HPF.ar(sig, (spoon+0.5).fold(1/4,4) * freq);\r\n\tsig = sig * EnvGen.ar(Env.adsr(0.01,0.1,0.8,0.1),gate,doneAction:2);\r\n\tsig = Pan2.ar(sig, (spoon+1.7).fold(-1,1), amp).flop;\r\n\tOut.ar(out, sig);\r\n}).add;\r\n);\r\n\r\n(\r\n\t~genpat = { arg str, id=0;\r\n\r\n\t\tPlazy({\r\n\t\t\tvar a = str.nextN(10);\r\n\t\t\tvar spoon = Ndef(( \\spoon++id ).asSymbol, { SinOsc.kr(1/a[5] * ( (a[0]+1)/5 )) });\r\n\t\t\ta.debug(\"In\");\r\n\r\n\t\t\tPfindur(a[5]+1,\r\n\t\t\t\tPbind(\r\n\t\t\t\t\t\\instrument, [\r\n\t\t\t\t\t\t\\vache,\r\n\t\t\t\t\t\t\\vache2,\r\n\t\t\t\t\t\t\\blo,\r\n\t\t\t\t\t\t\\raid,\r\n\t\t\t\t\t\t\\raid2,\r\n\t\t\t\t\t\t\\default,\r\n\t\t\t\t\t\t\\raid3,\r\n\t\t\t\t\t].wrapAt(a[0]),\r\n\t\t\t\t\t\\legato, a[8]/5 + 0.1,\r\n\t\t\t\t\t\\totem, Ptime(),\r\n\t\t\t\t\t\\spoon, spoon,\r\n\t\t\t\t\t\\adsr, Pseq([\r\n\t\t\t\t\t\t[\r\n\t\t\t\t\t\t\t[ Env.adsr(0.1,0.1,0.8,0.1) ],\r\n\t\t\t\t\t\t\t[ Env.adsr(0.2,0.1,0.8,0.1) ],\r\n\t\t\t\t\t\t\t[ Env.adsr(0.02,0.1,0.8,0.3) ],\r\n\t\t\t\t\t\t\t[ Env.adsr(0.02,0.1,0.6,0.7) ],\r\n\t\t\t\t\t\t].wrapAt(a[1])\r\n\t\t\t\t\t],inf),\r\n\t\t\t\t\t\\root, -4,\r\n\t\t\t\t\t\\degree, \r\n\t\t\t\t\t[\r\n\t\t\t\t\t\tPseq(a.keep(2),inf),\r\n\t\t\t\t\t\tPseq(a[[1,0,1,2]],inf),\r\n\t\t\t\t\t\tPseq(a,inf),\r\n\t\t\t\t\t\tPseq(a.mirror,inf),\r\n\t\t\t\t\t\tPseq(a.drop(2).keep(4),inf),\r\n\t\t\t\t\t\tPseq({a.choose}!(a[6]+1),inf),\r\n\t\t\t\t\t].wrapAt(a[2]),\r\n\t\t\t\t\t\\octave, [3,4,5,6].wrapAt(a[3]),\r\n\t\t\t\t\t\\isRest, \r\n\t\t\t\t\t[\r\n\t\t\t\t\t\tPseq(a.keep(2).collect({ arg x; x < 4 }),inf),\r\n\t\t\t\t\t\tPseq(a.keep(4).collect({ arg x; x > 4 }),inf),\r\n\t\t\t\t\t\tfalse,\r\n\t\t\t\t\t].wrapAt(a[9]),\r\n\t\t\t\t\t\\dur, [\r\n\t\t\t\t\t\tPseq([2**a[7].wrap(0,6)/8, 1/4],inf),\r\n\t\t\t\t\t\tPseq([2**a[7].wrap(0,4)/8, 1/4],inf),\r\n\t\t\t\t\t\tPseq([2**a[7].wrap(0,4)/8, 1/8],inf),\r\n\t\t\t\t\t\tPseq([2**a[7].wrap(0,5)/8],inf),\r\n\t\t\t\t\t\t//Pseq([2**8.rand/8],inf),\r\n\t\t\t\t\t].wrapAt(a[4]),\r\n\t\t\t\t\t\\amp, 0.1/4\r\n\t\t\t\t)\r\n\t\t\t)\r\n\t\t})\r\n\t};\r\n\r\n\t// test\r\n\t//~str = Prand([1,2,3,6,5,6,4,2,9],inf).asStream;\r\n\t//~genpat.(~str).loop.play;\r\n)\r\n\r\n//// GO !\r\n(\r\n~str = Pseq( ~decimals.as(Array).collect(_.asString.asInteger) ).asStream; // pi decimals\r\n//~str = Prand((0..9),inf).asStream; // same with random decimals\r\nPdef(\\soni, Ppar(\r\n\t4.collect { arg i;\r\n\t\tPspawner({ arg sp;\r\n\t\t\tinf.do { arg x;\r\n\t\t\t\tsp.seq(~genpat.(~str), i);\r\n\t\t\t}\r\n\t\t})\r\n\t}\r\n)).play;\r\n)\r\n\r\n////////////////////////////////////////////////////////////\r\n\r\n/// if you want other decimals, you can compute them with bc, scale is number of decimals (could be long)\r\n(\r\n~get_decimals = { arg count, formula;\r\n\t\"echo 'scale=%; %' | bc -l\".format(count, formula).unixCmdGetStdOut.drop(-1)\r\n\t\t.replace(\".\",\"\")\r\n\t\t.replace(\"\\n\",\"\")\r\n\t\t.replace(\"\\\\\", \"\"); \r\n};\r\n)\r\n\r\n// pi\r\n~decimals = ~get_decimals.(2000, \"4*a(1)\")\r\n// square root of 2, i like it better than pi\r\n~decimals = ~get_decimals.(2000, \"sqrt(2)\")\r\n// try less random pattern, each fraction has its little song\r\n~decimals = ~get_decimals.(2000, \"14/13\")\r\n// copy paste to reduce compute time\r\n~decimals.asCompileString;\r\n\r\n\r\n~decimals = ~get_decimals.(2000, \"s(0.5)\"); // sin(0.5)\r\n\r\n(\r\n~decimals = ~get_decimals.(2000, \"2/12345\"); \r\n~decimals.asCompileString.debug(\"playing\");\r\n~str = Pseq( ~decimals.as(Array).collect(_.asString.asInteger) ).asStream; // pi decimals\r\n//~str = Prand((0..9),inf).asStream; // same with random decimals\r\nPdef(\\soni, Ppar(\r\n\t4.collect { arg i;\r\n\t\tPspawner({ arg sp;\r\n\t\t\tinf.do { arg x;\r\n\t\t\t\tsp.seq(~genpat.(~str), i);\r\n\t\t\t}\r\n\t\t})\r\n\t}\r\n)).play;\r\n)",
   "id" : "1-50w",
   "is_private" : null,
   "labels" : [
      "code fork"
   ]
}
