153 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
			
		
		
	
	
			153 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
(
 | 
						|
// before boot, raise memory?
 | 
						|
#[\internal, \local].do { |s|
 | 
						|
	s = Server.perform(s);
 | 
						|
	s.options.memSize = 2097152; // 2 gigs
 | 
						|
};
 | 
						|
 | 
						|
Server.default.waitForBoot {
 | 
						|
	fork {
 | 
						|
 | 
						|
		// SynthDefs ////////////////////////////////////////////
 | 
						|
		
 | 
						|
		// sawtoothwave-based droney pad
 | 
						|
		SynthDef(\sawLine, {
 | 
						|
			arg out=0, freq=440, gate=1, amp=1, cutoff=10;
 | 
						|
			var snd, env, gen, numosc;
 | 
						|
 | 
						|
			numosc = 10;
 | 
						|
			cutoff = cutoff * 0.1;
 | 
						|
			env = Env.adsr(4, 0, 1, 10, 1, \lin);
 | 
						|
			gen = EnvGen.kr(env, gate, doneAction:2);
 | 
						|
 | 
						|
			// using Array.fill multiplies number of oscilators
 | 
						|
			snd = Array.fill(numosc, {
 | 
						|
				var local, lfreq;
 | 
						|
				lfreq = [freq, freq*2.01, freq/1.99 ];
 | 
						|
				local = Saw.ar( rrand(lfreq, lfreq * 1.02)
 | 
						|
					* LFNoise1.kr(0.3).range(1, 1.01), -10.dbamp * [0.5, 0.3, 0.3]);
 | 
						|
				local = Mix(local);
 | 
						|
			});
 | 
						|
			snd = Splay.ar(snd); // Splay mixes-down all arrays to 2ch - stereo
 | 
						|
			snd = LPF.ar(snd, LFNoise1.ar(0.06).exprange(3000,10000) * cutoff);
 | 
						|
 | 
						|
			// another delay with variing delay times to add to harmonic offsets
 | 
						|
			snd = CombL.ar(snd, 1, LFNoise1.ar(0.1).range([0.5,0.65],[0.53,0.68]), 15, -1.dbamp) + snd;
 | 
						|
 | 
						|
			snd = snd * gen * amp;
 | 
						|
			Out.ar(out, snd);
 | 
						|
		}).add;
 | 
						|
 | 
						|
 | 
						|
		// a sinewave-ish beep with a home-made reverb
 | 
						|
		SynthDef(\revBeep, {
 | 
						|
			arg freq=440, amp = 0.3, gate=1, pan=0, revwet=0.1;
 | 
						|
			var snd, env, rev, del, in;
 | 
						|
			snd = LFCub.ar(freq);
 | 
						|
			env = EnvGen.ar(Env.asr(0.01, 1, 0.1), gate,
 | 
						|
				doneAction:0);
 | 
						|
			snd = snd * env * amp;
 | 
						|
 | 
						|
			// ## reverb ##
 | 
						|
			del = DelayN.ar(snd, 0.048);
 | 
						|
			// mix/fill 16 instances of short delay with CombL:
 | 
						|
			rev = Mix.ar(Array.fill(16,{ CombL.ar(del, 0.1, LFNoise1.kr(0.001.rand, 0.04, 0.05), 15) }));
 | 
						|
			// add delays to the signal recursively with AllPassN 4x:
 | 
						|
			6.do({ rev = AllpassN.ar(rev, 0.050, [0.050.rand, 0.050.rand], 1) });
 | 
						|
			// adjust volume:
 | 
						|
			rev = rev * revwet * 0.1; // carefull
 | 
						|
			snd = snd + rev;
 | 
						|
 | 
						|
			// the end of the sound determined by silence. free synth.
 | 
						|
			DetectSilence.ar(snd, amp: 0.0001, doneAction:2);
 | 
						|
			
 | 
						|
			Out.ar(0, snd);
 | 
						|
		}).add;
 | 
						|
 | 
						|
		// s.scope(16)
 | 
						|
 | 
						|
		// a beep sound with a delay/echo
 | 
						|
		SynthDef(\delBeep, {
 | 
						|
			arg freq=200, amp = 0.3, gate = 1, pan = 0;
 | 
						|
			var snd, env;
 | 
						|
 | 
						|
			snd = Pulse.ar(freq)!2;
 | 
						|
			env = EnvGen.ar(Env.perc(0.01, 0.1), doneAction:0);
 | 
						|
			snd = snd * env * amp;
 | 
						|
 | 
						|
			// delay:
 | 
						|
			snd = CombN.ar(snd, 1, [0.39,0.51], 10, mul:0.3) + snd;
 | 
						|
			DetectSilence.ar(snd, time:0.5, doneAction:2);
 | 
						|
			
 | 
						|
			Out.ar(0, snd);
 | 
						|
		}).add;
 | 
						|
 | 
						|
 | 
						|
		SynthDef(\hh, {
 | 
						|
			arg amp=0.1, outBus=0, gate=1, sustain=0.2, cutoff=2000, pan=0;
 | 
						|
			var snd, env;
 | 
						|
 | 
						|
			snd = WhiteNoise.ar;
 | 
						|
			snd = HPF.ar(snd, cutoff);
 | 
						|
			env = EnvGen.ar(Env.perc(0, sustain), doneAction:2);
 | 
						|
			snd = snd * env * amp;
 | 
						|
			snd = Pan2.ar(snd, pan);
 | 
						|
			
 | 
						|
			Out.ar(outBus, snd);
 | 
						|
		}).add;
 | 
						|
 | 
						|
		// end of SynthDef-initions. /////////////////////////////////////////
 | 
						|
 | 
						|
		s.sync; // sync server before moving on //
 | 
						|
 | 
						|
		// let's pattern! ////////////////////////////////////////////////////
 | 
						|
 | 
						|
		Pbindef(\delBeepPat,
 | 
						|
			\instrument, \delBeep,
 | 
						|
			\degree, Pseq([7,0], inf),
 | 
						|
			\dur, Pseq([0.1,15.9], inf),
 | 
						|
			\sustain, 0.1,
 | 
						|
			\amp, 0.05
 | 
						|
		).play;
 | 
						|
 | 
						|
		Pbindef(\hhPat,
 | 
						|
			\instrument, \hh,
 | 
						|
			\dur, 2,
 | 
						|
			\amp, Pseq([0.5,0.3],inf),
 | 
						|
			\pan, Pseq([-1,1], inf),
 | 
						|
			\sustain, 0.1,
 | 
						|
			\cutoff, 12000
 | 
						|
		).play;
 | 
						|
 | 
						|
		Pbindef(\revBeepPat,
 | 
						|
			\instrument, \beep1,
 | 
						|
			
 | 
						|
			\dur, Pseq([1,2,3] * 4, inf) * Prand([1/4,1/8,1/2,1],inf),	
 | 
						|
			\degree, Prand([0,3,-2,4],inf),
 | 
						|
 | 
						|
			\octave, 6,
 | 
						|
			\sustain, Prand((2..6)*0.1, inf),
 | 
						|
			\amp, 0.04,
 | 
						|
			\revwet, 1,
 | 
						|
			\scale, Scale.minor(\just),
 | 
						|
			\pan, Pseg([-1, 1, -1], 20, \lin, inf)
 | 
						|
		).play;
 | 
						|
 | 
						|
		Pbindef(\padPat,
 | 
						|
			\instrument, \sawLine,
 | 
						|
			\dur, Pseq([Rest(32), Pn(8)]),
 | 
						|
			\degree, Prand([[0,9],[0,8],[0,10]],inf),
 | 
						|
			\octave, [4,5,6],
 | 
						|
			
 | 
						|
			\amp, Pseq([0, Pseq((1..5) ++ (4..2) * 0.1, inf)]),
 | 
						|
			\cutoff, Pseq((1..7)++(6..2),inf),
 | 
						|
			\scale, Scale.minor(\just)
 | 
						|
		).play;
 | 
						|
 | 
						|
 | 
						|
	} // end of fork.
 | 
						|
}
 | 
						|
)
 | 
						|
 | 
						|
// --------------------------------------------------------------------
 |