{
   "labels" : [
      "noise",
      "random",
      "chaos",
      "fractal"
   ],
   "code" : "// Script for generating fractal noise by cascading N first order filters. From: \"The Sounding Object\", chapter 8\r\ns.boot; s.scope\r\n\r\n(\r\nvar fp1,n,fp,fo,a,b,beta,t,norm;\r\n\r\nfp1 = 50;                                         // frequency of first pole\r\nn = 6;                                            // nr. of poles\r\nh = 2;                                            // density of poles per frequency decade\r\nbeta = 1;                                         // spectral parameter\r\nt = s.sampleRate.reciprocal ? 44100.reciprocal;   // sampling period\r\nnorm = exp(beta).reciprocal**1.72;\r\n\r\nfp = Array.newClear(n).put(0,fp1);   // pole frequencies\r\nfo = Array.newClear(n);              // zero frequencies\r\na = Array.newClear(n);               // pole coefficients\r\nb = Array.newClear(n);               // zero coefficients\r\n\r\nn do: { |i|\r\n   (i > 0).if { fp[i] = 10**h.reciprocal*fp[i-1] };\r\n   fo[i] = 10**(0.5*beta*h.reciprocal)*fp[i];\r\n   a[i] = exp(-2pi*fp[i]*t);\r\n   b[i] = exp(-2pi*fo[i]*t)\r\n};\r\n\r\nSynthDef(\\fractalNoise,{ arg out=0;\r\n   var signal = WhiteNoise.ar(1!2);\r\n   n do: { |i| signal = FOS.ar(signal,1,b[i].neg,a[i]) };\r\n   Out.ar(out,norm*signal)\r\n}).add;\r\n)\r\n\r\n// test it\r\ns.sendMsg('/s_new',\\fractalNoise,s.nextNodeID,0,1);\r\nFreqScope.new\r\n\r\n\r\n// probably more useful as a pseudo-ugen\r\nFractalNoise {\r\n\r\n   *ar { arg beta = 0, mul = 1, add = 0;\r\n      var n = 6, h = 2, fp = 50, t = SampleDur.ir, norm = exp(beta).reciprocal**1.72, sig = WhiteNoise.ar(mul,add);\r\n\r\n      n do: {\r\n         var fo = 10**(0.5*beta*h.reciprocal)*fp;\r\n         sig = FOS.ar(sig,1,exp(-2pi*fo*t).neg,exp(-2pi*fp*t));\r\n         fp = 10**h.reciprocal*fp\r\n      };\r\n\r\n      ^(norm*sig)\r\n   }\r\n\r\n}",
   "id" : "1-4UN",
   "is_private" : null,
   "name" : "Fractal Noise",
   "author" : "Michael Dzjaparidze",
   "ancestor_list" : [],
   "description" : "This code generates fractal noise by cascading N first order filter sections. beta = 0 -> white noise, beta = 1 -> pink noise, beta = 2 -> brown noise. Not too sure about the normalization constant, since it is purely based on empirical reasoning, but it seems to work pretty well."
}
