{
   "author" : "Muse Score",
   "name" : "Experiment with roots of unity",
   "description" : "This is an experiment with roots of unity in supercollider.\r\nI took Eulers formula \r\nexp(2*pi*I*k/n) = cos(2*pi*k/n)+sin(2*pi*k/n)*I\r\nto sonify sums of roots of unity where the sums run through divisors of some numbers.",
   "ancestor_list" : [],
   "labels" : [],
   "code" : "(\r\n\r\n~divisors = {\r\n\targ n;\r\n\t~divs = List.newClear(0);\r\n\tfor( 1, floor(sqrt(n)), {arg i; if(n%i==0,{\r\n\t\t\t//i.postln;\r\n\t\t\t~divs.add(i);\r\n\t\t//\t(i==n.div(i)).postln;\r\n\t\t\tif(i==n.div(i),{},{~divs.add(n.div(i))});\r\n\t\t   },{});\r\n\t\t});\r\n\t~divs.sort;\r\n\t~divs;\r\n};\r\n\r\n\r\nSynthDef(\\rootsOfUnitySum, { |out=0,freq=1,amp=1,n=1,ks=#[1]|\r\n    var l,sigl,sigr,env;\r\n\r\n\r\n\tsigl = SinOsc.ar(freq:0,mul:0);\r\n\tsigr = SinOsc.ar(freq:0,mul:0);\r\n\tks.do({arg item,i;\r\n\t\tk = item;\r\n        sigr = sigr+SinOsc.ar(freq:freq*2pi*k/n,mul:amp,phase:0.5*pi);\r\n\t\tsigl = sigl+SinOsc.ar(freq:freq*2pi*k/n,mul:amp);\r\n\t});\r\n\tenv = EnvGen.kr(Env.linen(attackTime: 0.001, sustainTime: 1, releaseTime: 0.01, level: 1.0, curve: 'lin'), doneAction: Done.freeSelf);\r\n\tsigr = sigr*env;\r\n    sigl = sigl*env;\r\n\r\n\tOut.ar(out, [sigl,sigr])\r\n}).add;\r\n\r\n\r\n~getPbind = { arg n, amps, durs, freq;\r\n    ~nums = ~divisors.value(n);\r\n    r = Pbind(\\instrument,\\rootsOfUnitySum,\r\n\t\\amp,amps,\r\n\t\\dur,durs,\r\n\t\\freq,freq,\r\n\t\\n,Pseq([n],~nums.size),\r\n\t\\ks , Pseq(all{:~divisors.value(n),n<-~nums},1)).trace();\r\n\tr\r\n};\r\n\r\n~seq = (1..13);\r\n~tau = all{:~divisors.value(n).size,n<-~seq};\r\n\r\n\r\n~r = Pseq(all{:~getPbind.value(\r\n\t  n:n,\r\n\t  amps:Pseq(all{:0.5/t,t<-~tau},1),\r\n\t  durs:Pseq(all{:0.3333/t,t<-~tau},1),\r\n\tfreq:220/3),n<-~seq},1);\r\n\r\n~s = Pseq(all{:~getPbind.value(\r\n\t  n:n,\r\n\t  amps:Pseq(all{:0.5/t,t<-~tau},1),\r\n\t  durs:Pseq(all{:0.5/t,t<-~tau},1),\r\n\tfreq:110),n<-~seq},1);\r\n\r\n~t = Pseq(all{:~getPbind.value(\r\n\t  n:n,\r\n\t  amps:Pseq(all{:0.5/t,t<-~tau},1),\r\n\t  durs:Pseq(all{:1/t,t<-~tau},1),\r\n\tfreq:220),n<-~seq},1);\r\n\r\n~x = Pseq([\r\n\t    Ppar([~t],1),\r\n\t    Ppar([~s],1),\r\n\t    Ppar([~s,~t],1),\r\n\t    Ppar([~r],1),\r\n\t    Ppar([~r,~t],1),\r\n\t    Ppar([~r,~s],1),\r\n\t    Ppar([~r,~s,~t],1),\r\n     ],inf);\r\n\r\n);\r\n\r\nPdef(\\mplayer, ~x).clock_(TempoClock(100/60)).play;\r\nPdef(\\mplayer, Pn(Event.silent)).fadeTime_(8);",
   "is_private" : null,
   "id" : "1-5gJ"
}
