All pastes #963556 Raw Edit

Miscellany

public text v1 · immutable
#963556 ·published 2008-03-30 17:35 UTC
rendered paste body
// ==============================
// it's techno, in supercollider.
// ==============================

s.boot

// WAIT UNTIL NOTIFICATION IS ON!!!

// --- ALL INSTRUMENT SYNTHDEFS ---
(
(
// lead sound (granular synth)

SynthDef(\lead,{ arg freq=440,amp=1,rate=0.003,length=0.005,out=0;
	var signal, outsignal;
	var sinoscs;

	sinoscs = 2;

	rate = rate * MouseY.kr(0.5,10);
	length = length * MouseY.kr(0.5,10);

	signal = Saw.ar(freq);
	signal = Resonz.ar(signal,MouseX.kr(100,4000));
	
	signal = signal * EnvGen.ar(Env.sine(length,1),Impulse.kr((rate*2).reciprocal));
	signal = signal * (sinoscs.reciprocal);

	outsignal = Mix.fill(sinoscs,{ arg i; DelayL.ar(signal,2,rate * i) });

	outsignal = outsignal * EnvGen.ar(Env.new(#[1,0],#[0.2]),doneAction:2);
	outsignal = outsignal * amp;

	Out.ar(out,outsignal);
}).load(s);

// lead sound (simple synth)
SynthDef(\lead2,{ arg freq=440,amp=1,out=0;
	var signal, outsignal;

	signal = Saw.ar(freq/2);
	signal = Resonz.ar(signal,MouseX.kr(100,4000),0.1);

	signal = signal * EnvGen.ar(Env.new(#[1,0],#[0.2]),doneAction:2);
	signal = signal * 2 * amp;

	Out.ar(out,signal);
}).load(s);


// kickdrum
SynthDef(\kick,{ arg amp = 0.4,out=0;
	var signal;
	signal = SinOsc.ar(XLine.kr(330,20,0.15));
	signal = signal * EnvGen.ar(Env.new(#[1,0],#[0.15]),doneAction:2);
	signal = signal * amp;
	Out.ar(out,signal);
}).load(s);

// cymbal
SynthDef(\cymbal,{ arg amp = 0.5,out=0;
	var signal;
	signal = WhiteNoise.ar(1);
	signal = HPF.ar(signal,5000);
	signal = signal * EnvGen.ar(Env.new(#[1,0],#[0.6]),doneAction:2);
	signal = signal * amp;
	Out.ar(out,signal);
}).load(s);

// open hihat
SynthDef(\openhat,{ arg amp = 0.5,out=0;
	var signal;
	signal = WhiteNoise.ar(1);
	signal = HPF.ar(signal,10000);
	signal = signal * EnvGen.ar(Env.new(#[1,0],#[0.3]),doneAction:2);
	signal = signal * amp;
	Out.ar(out,signal);
}).load(s);

// closed hihat
SynthDef(\closedhat,{ arg amp = 0.5,out=0;
	var signal;
	signal = WhiteNoise.ar(1);
	signal = HPF.ar(signal,10000);
	signal = signal * EnvGen.ar(Env.new(#[1,0],#[0.05]),doneAction:2);
	signal = signal * amp;
	Out.ar(out,signal);
}).load(s);

// snare
SynthDef(\snare,{ arg amp = 0.5,out=0;
	var signal;
	signal = WhiteNoise.ar(1);
	signal = HPF.ar(signal,2000);
	signal = signal * EnvGen.ar(Env.new(#[1,0],#[0.2]),doneAction:2);
	signal = signal * amp;
	Out.ar(out,signal);
}).load(s);

// bassline
SynthDef(\bass,{ arg freq = 55, amp = 0.4,out=0;
	var signal;
	signal = Saw.ar(freq);
	signal = LPF.ar(signal,freq*8);
	signal = signal * EnvGen.ar(Env.new(#[1,0],#[0.3]),doneAction:2);
	signal = signal * amp;
	Out.ar(out,signal);
}).load(s);
);


// --- ALL EFFECT SYNTH DEFS ---


(
// mute
SynthDef(\mute, { arg in = 8, out = 0;
}).load(s);

// no effects
SynthDef(\nofx, { arg in = 9, out = 0;
	var signal;
	signal = In.ar(in);
	Out.ar(out,signal!2);
}).load(s);

// high pass filter
SynthDef(\fx1, { arg in = 10, out = 0;
	var signal;
	signal = In.ar(in);
	signal = HPF.ar(signal,(SinOsc.kr(4)*2000)+4000);
	Out.ar(out,signal!2);
}).load(s);

// simple multitap feedback delay
SynthDef(\fx2, { arg in = 11, out = 0;
	var signal, delay;
	signal = In.ar(in) + LocalIn.ar(1);
	delay = DelayL.ar(signal,0.1,0.1);
	signal = signal + delay;
	LocalOut.ar(delay*0.6); // send the delay'ed portion back to LocalIn
	Out.ar(out,signal!2);
}).load(s);

// tremolo (sine wave modulation of amplitude)
SynthDef(\fx3, { arg in = 12, out = 0;
	var signal, delay;
	signal = In.ar(in);
	signal = signal * SinOsc.kr(20);
	Out.ar(out,signal!2);
}).load(s);

// phaser
SynthDef(\fx4, { arg in = 13, out = 0;
	var signal, delay;
	signal = In.ar(in);
	signal = signal + DelayL.ar(signal,1,SinOsc.kr(100,mul:0.01,add:0.02));
	signal = signal/2;
	Out.ar(out,signal!2);
}).load(s);

// chorus
SynthDef(\fx5, { arg in = 14, out = 0;
	var signal, modulated, numDelays = 12;
	signal = In.ar(in);
	modulated = Array.fill(numDelays, {arg i; LFPar.kr(0.05 * rrand(0.94, 1.06), 0.05 * i, 0.1, 0.08);});
	signal = DelayC.ar(signal, 0.5, modulated);
	signal = signal.sum / 4; 
	Out.ar(out,signal!2);
}).load(s);
);

// --- SETUP EFFECT SYNTHS ---

(
~mute.free;
~nofilter.free;
~filter1.free;
~filter2.free;
~filter3.free;
~filter4.free;
~filter5.free;

~mute = Synth.new("mute");
~nofilter = Synth.new("nofx");
~filter1 = Synth.new("fx1");
~filter2 = Synth.new("fx2");
~filter3 = Synth.new("fx3");
~filter4 = Synth.new("fx4");
~filter5 = Synth.new("fx5");
);

// --- initial pattern ---

~currentPattern = 0;
~followSequencer = true;
//start variables
~drumpattern = 1;
~kickdrumfx = 0;
~drumfx = 1;
~bassline = 1;
~bassfx = 0;
~synthline = 0;
~synthfx = 2;

// pattern sequencer
~nextPattern = {
	~currentPattern = ~currentPattern+1;
	("current pattern = " ++ ~currentPattern).postln;

	if (~currentPattern == 1, {
		//start variables
		~drumpattern = 1;
		~kickdrumfx = 0;
		~drumfx = 1;
		~bassline = 1;
		~bassfx = 0;
		~synthline = 0;
		~synthfx = 2;
	});
	if (~currentPattern == 2, {
		//1 more bass
		~bassline = 2;
	});
	if (~currentPattern == 3, {
		//hihats
		~drumpattern = 2;
	});
	if (~currentPattern == 4, {
		//weird pattern with gabba bass
		~drumpattern = 5;
		~kickdrumfx = 4;
		~drumfx = 2;
		~bassline = 2;
		~bassfx = 4;
	});
	if (~currentPattern == 5, {
		//back to normal with chugginess
		~drumpattern = 3;
		~kickdrumfx = 0;
		~drumfx = 1;
		~bassline = 2;
		~bassfx = 0;
	});
	if (~currentPattern == 6, {
		//add synth
		~synthline = 1;
	});
	if (~currentPattern == 7, {
		// just synth
		~drumpattern = 0;
		~bassline = 0;
	});
	if (~currentPattern == 8, {
		//double synth and kick
		~drumpattern = 1;
		~synthline = 2;
	});
	if (~currentPattern == 9, {
		//add hats
		~drumpattern = 2;
	});
	if (~currentPattern == 10, {
		//no drums
		~drumpattern = 0;
	});
	if (~currentPattern == 11, {
		// rock!
		~drumpattern = 3;
		~bassline = 2;
		~synthline = 2;
	});
	if (~currentPattern == 12, {
		// no drums
		~drumpattern = 0;
	});
	if (~currentPattern == 13, {
		// full on
		~drumpattern = 4;
		~bassline = 3;
		~synthline = 3;
	});
	if (~currentPattern == 14, {
		// cut up synth
		~synthfx = 3;
	});
	if (~currentPattern == 15, {
		// wicked synth
		~synthfx = 4;
	});
	if (~currentPattern == 16, {
		// slower bassline and only open hats
		~drumpattern = 3;
		~bassline = 2;
	});
	if (~currentPattern == 17, {
		// only closed hats
		~drumpattern = 2;
	});
	if (~currentPattern == 18, {
		// no hats
		~drumpattern = 1;
	});
	if (~currentPattern == 19, {
		// no drums, initial bass
		~drumpattern = 0;
		~bassline = 1;
	});
	if (~currentPattern == 20, {
		// no bass, double synth
		~bassline = 0;
		~synthline = 2;
	});
	if (~currentPattern == 21, {
		// single synth
		~synthline = 1;
	});
	if (~currentPattern == 22, {
		~synthline = 0;
		t.stop;
	});	
};



// --- THE MAIN 'PATTERN' LOOP
t = TempoClock(18);
(
t.clear;
t.schedAbs(t.beats.ceil, { arg beat, sec;
	// drum patterns

	if (beat % 256==0, {
		if (~followSequencer, { ~nextPattern.value; });
		Synth(\cymbal,[\out,(~kickdrumfx+9)])
	});
	if ((~drumpattern>0), {
		if (beat % 8==0, {Synth(\kick,[\out,(~kickdrumfx+9)])});
	});
	if ((~drumpattern==2), {
		if (((beat % 2==0) && (rrand(0,3)==0)) || (rrand(0,10)==0), {Synth(\closedhat,[\out,(~drumfx+9)])});
	});
	if ((~drumpattern==3) || (~drumpattern==4), {
		if (beat % 16==8, {Synth(\snare,[\out,(~drumfx+9)])});
		if (beat % 8==4, {Synth(\openhat,[\out,(~drumfx+9)])});
	});
	if ((~drumpattern==4), {
		if ((beat % 8==2) || (beat % 8==6) || (beat % 8==0), {Synth(\closedhat,[\out,(~drumfx+9)])});
	});
	if ((~drumpattern==5), {
		if (((beat % 2==0) && (rrand(0,3)==0)) || (rrand(0,10)==0), {Synth(\closedhat,[\out,(~drumfx+9)])});
		if (((beat % 4==0) && (rrand(0,3)==0)), {Synth(\openhat,[\out,(~drumfx+9)])});
	});

	// basslines

	if ((~bassline>0), {
		if (beat % 8==4, {Synth(\bass,[\freq,55,\out,(~bassfx+9)])});
	});
	if ((~bassline==2) || (~bassline==3), {
		if (beat % 128==126, {Synth(\bass,[\freq,110,\out,(~bassfx+9)])});
	});
	if ((~bassline==3), {
		if (((beat % 8==2) || (beat % 8==6)) && (beat % 128!=126) , {Synth(\bass,[\freq,55,\out,(~bassfx+9)])});
	});


	// synthlines

	if ((~synthline>0), {
		if (beat % 8==0, {Synth(\lead,[\freq,220,\out,(~synthfx+9)])});
	});
	if ((~synthline==2), {
		if (((beat % 2==0) && (beat % 8!=0)) || ((beat % 1==0) && (rrand(0,8)==0)), {Synth(\lead2,[\freq,[440,220,110,880,55].choose,\out,(~synthfx+9)])});
	});
	if ((~synthline==3), {
		if (((beat % 2==0) && (beat % 8!=0)) || ((beat % 1==0) && (rrand(0,8)==0)), {Synth(\lead2,[\freq,[440,220,110,880,55].choose,\out,(~synthfx+9)])});
		if (((beat % 2==0) && (beat % 8!=0)) || ((beat % 1==0) && (rrand(0,8)==0)), {Synth(\lead2,[\freq,[440,220,110,880,55].choose,\out,(~synthfx+9)])});
	});

	1; // repeat
});
)


)





// ===== MANUAL SEQUENCER BELOW IF YOU WANT =======


~followSequencer = true;


//1 more bass
~bassline = 2;

//hihats
~drumpattern = 2;

//weird pattern with gabba bass
(
~drumpattern = 5;
~kickdrumfx = 4;
~drumfx = 2;
~bassline = 1;
~bassfx = 4;
)

//normal with chugginess
(
~drumpattern = 3;
~kickdrumfx = 0;
~drumfx = 1;
~bassline = 2;
~bassfx = 0;
)

//add synth
~synthline = 1;

//just synth
(
~drumpattern = 0;
~bassline = 0;
)

//double synth and kick
(
~drumpattern = 1;
~synthline = 2;
)

//add hats
~drumpattern = 2;

//no drums
~drumpattern = 0;

// rock!
(
~drumpattern = 3;
~bassline = 2;
~synthline = 2;
)

// no drums
~drumpattern = 0;

// full on
(
~drumpattern = 4;
~bassline = 3;
~synthline = 3;
)

// cut up synth
~synthfx = 3;

// wicked synth
~synthfx = 4;

// slower bassline and only open hats
(
~drumpattern = 3;
~bassline = 2;
)

// only closed hats
~drumpattern = 2;

// no hats
~drumpattern = 1;

// no drums, initial bass
(
~drumpattern = 0;
~bassline = 1;
)

// no bass, double synth
(
~bassline = 0;
~synthline = 2;
)

// single synth
~synthline = 1;

t.stop;