{
   "author" : "rumush",
   "name" : "Doppler Effect Composition",
   "ancestor_list" : [],
   "description" : "Almost finished composition based on Doppler Effect from 'Operators-Hypot' in the help file. It just needs a couple of finishing touches and a way to terminate it, as it will run forever but after 8 repeates it just takes longer for it to do so.",
   "labels" : [],
   "is_private" : null,
   "id" : "1-50p",
   "code" : "// Rumush\r\n// https://mycelialcordsblog.wordpress.com/\r\n// https://fungorumush.bandcamp.com/releases\r\n\r\n(\r\nfork{\r\nvar pFreq = [108, 128, 132, 144, 162, 180, 192, 204,\r\n216, 240, 264, 288, 324, 360, 384, 408,\r\n432, 480, 528, 576, 648, 720, 768, 816,\r\n864, 960, 1056, 1152, 1296, 1440, 1536, 1632,\r\n1728, 1920, 2112, 2304, 2592, 2880, 3072, 3264\r\n];\r\nvar rep = 0;\r\nvar t = 30;\r\nvar speed = 10;\r\nvar modF = 4;\r\nvar arrayI = 31;\r\nn = 2;\r\nloop{\r\n// Value Checkers\r\nif(rep >= 8,\r\n{ t = 150 },\r\n{ t = [20,30].choose }\r\n);\r\nif(arrayI < 0,\r\n{arrayI = 0}\r\n);\r\n// Structure Info\r\n(„rep”+rep).postln;\r\n(„t”+t).postln;\r\n(„speed”+speed).postln;\r\n(„modF”+modF).postln;\r\n(„n”+n).postln;\r\n(„arrayI”+arrayI).postln;\r\nplay{\r\n// Sine Envelope\r\nvar env1 = EnvGen.ar(Env.sine(90, 1), doneAction:2);\r\n\r\n// Doppler Effect\r\nvar src1 = Mix.fill(8,{\r\nvar x, y, distance, velocity, pitchRatio, amplitude, azimuth, panValue, sound, index;\r\nindex = Array.series(7, 8, 1);\r\nx = 50.rand;\r\ny = LFSaw.kr(1/IRand(speed, speed*3), 0, 100);\r\ndistance = hypot(x, y);\r\nvelocity = Slope.kr(distance);\r\npitchRatio = (344 – velocity) / 344;\r\namplitude = 2.5 / distance.squared;\r\nsound = if(0.6.coin,\r\n{Saw.ar(pFreq[index.choose] * pitchRatio, 1)},\r\n{Saw.ar(pFreq[index.choose] * pitchRatio, LFPulse.ar(IRand(1, speed)))}\r\n);\r\nazimuth = atan2(y, x);\r\npanValue = (azimuth / 0.5pi).clip2(1);\r\nPan2.ar(sound, [panValue, panValue.neg].choose, amplitude)\r\n});\r\n\r\n// Noise\r\nvar src2 = Mix.fill(n,{\r\nvar index = Array.series(8, arrayI, 1);\r\nvar fm = Pan2.ar(SinOsc.ar(pFreq.choose+SinOsc.ar(pFreq[index.choose]/IRand(2, modF), 0, 100000), 0, 1/64*LFSaw.ar(1/IRand(speed/2, speed*2)).linexp(-1, 1, 0.01, 1)), 0.9*SinOsc.ar(4/IRand(speed/2, speed*2)));\r\nvar noise = Pan2.ar(BPF.ar(PinkNoise.ar(1), pFreq[index.choose]+SinOsc.ar(1.rand, 0, 108), Rand(0.05, 0.25)), 0.9*SinOsc.ar(1/IRand(speed/2, speed*2)));\r\n\r\nfm+noise\r\n});\r\n\r\n// Structure Progression\r\nrep = rep+1;\r\nspeed = speed-1;\r\nmodF = modF*2;\r\nn = n+2;\r\narrayI = arrayI-4;\r\n\r\n// Output\r\n(((src1)+(src2*(1/2)))*(0+env1))\r\n};t.wait\r\n}\r\n}\r\n)"
}
