// patch4 /fO 010911 ( var tempo,overtones,spec,spec2,freq,freq2,length,length2, instr1,instr2 ; //-- tempo = 130; overtones = 2; //-- freq = ([[360,119.97],[360,299.97],[101.25,240.03],[299.97,360],[112.5,202.5],[90,119.97]].scramble); freq2 = ([[112.5,101.25],[270,168.75],[270,150.03]])+332; length = Pseq([15,17,20,22,25].scramble.copyRange(0,3),inf).asStream; length2 = Pseq([15,17,20,22,25].scramble.copyRange(0,2),inf).asStream; spec = Array.fill(freq.size, { arg i; Array.fill(11, { `[ Array.series(overtones,freq.at(i).choose,freq.at(i).choose)+Array.fill(overtones,{0.5.rand2}), Array.fill(overtones,{arg i; 1/(i+1)}), Array.fill(overtones,{0.5+4.0.rand}) ] }); }); spec2 = Array.fill(freq2.size, { arg i; Array.fill(16, { `[ Array.series(overtones,freq2.at(i).choose,freq2.at(i).choose)+Array.fill(overtones,{0.5.rand2}), Array.fill(overtones,{arg i; 1/(i+1)}), Array.fill(overtones,{0.5+4.0.rand}) ] }); }); //-- { arg synth; synth.tempo_(tempo/60); instr1 = EnvGen.kr(Env.linen(20,180,35,0.9)) * Spawn.ar({ arg spawn,index; var l; l = length.next; spawn.nextTime = l; EnvGen.ar( Env.new([0,1,0],[0.01,1.05.rrand(1.25)]*l*60/tempo), Klank.ar(spec.at(index%(freq.size)),BrownNoise.ar(0.0005)); )}, 2 ); instr2 = EnvGen.kr(Env.linen(199,1,40,0.5,3)) * Spawn.ar({ arg spawn,index; var l; l = length2.next; spawn.nextTime = l; EnvGen.ar( Env.new([0,1,0],[0.01,1.05.rrand(1.25)]*l*60/tempo), Klank.ar(spec2.at(index%(freq2.size)),BrownNoise.ar(0.0003)); )}, 2 ); //-- Mix.ar([instr1,instr2]) }.play )