(
x = {
	arg gate=1;
	var sum, snd0, snd1, snd2, env, gen, faderosc, numosc;

	numosc = 10; 
	env = Env.adsr(20, 0, 1, 30, 1, \sin);
	gen = EnvGen.kr(env, gate, doneAction:2);

	faderosc = SinOsc.ar(1/60).range(-1,2).min(1).max(0);

	snd0 = Array.fill(numosc, {
		var freq, local;
		freq = [100,150,300,400] * 0.5;
		local = Saw.ar(rrand(freq, freq * 1.03 ) * LFNoise1.kr(0.3).range(1, 1.03), -10.dbamp);
		local = Mix(local);
	});
	snd0 = Splay.ar(snd0);
	snd0 = faderosc * snd0;
	snd0 = LPF.ar(snd0, LFNoise1.ar(0.06).exprange(300,10000));
	snd0 = CombL.ar(snd0, 1, LFNoise1.ar(0.05).range([0.5,0.65],[0.53,0.68]), 15, -1.dbamp) + snd0;

	snd1 = Array.fill(numosc, {
		var freq, local;
		freq = [100,150,300,400] * 0.8;
		local = Saw.ar(rrand(freq, freq * 1.03 ) * LFNoise1.kr(0.3).range(1, 1.03), -10.dbamp);
		local = Mix(local);
	});
	snd1 = Splay.ar(snd1);
	snd1 = (0-faderosc+1) * snd1;	
	snd1 = LPF.ar(snd1, LFNoise1.ar(0.07).exprange(300,10000));
	snd1 = CombL.ar(snd1, 1, LFNoise1.ar(0.05).range([0.77,0.65],[0.80,0.68]), 15, -1.dbamp) + snd1;

	snd2 = WhiteNoise.ar * LFPulse.ar(0.06, width:0.02) * -25.dbamp;
	snd2 = HPF.ar(snd2, 2000);
	snd2 = snd2 + Dust.ar(LFNoise1.ar(0.1).range(1,100), mul:0.2);
	
	sum = snd0 + snd1;
	sum = sum * gen + snd2;
}.play
)

x.set(\gate,0); // fadeout

