Info:
Zusätzliche Informationen:
http://wiki.no-brain.net/doku.php?id=no-brain:uni:ws08:rosarauschen
/*
* * * * * * * * * * * * * * * * * * * * * * * * *
* SC Project by Volker 'sushi' Spaarmann *
* *
* THE SEA - THE WIND - THE SID Chip *
* *
* * * * * * * * * * * * * * * * * * * * * * * * *
*/
/* STAGE I "THE SEA" */
(
SynthDef(\Sea, { |amp=0.2, gate=1, attack, decay, sustain, retreat|
var sound, env;
env = EnvGen.kr(Env.adsr(attack, decay, sustain, retreat, amp), gate, doneAction: 2);
sound = { Pan2.ar(PinkNoise.ar, Rand(-1, 1))}.dup(5).sum; ////Stereopanning
Out.ar(0 , sound * env);
};
).store;
);
(
Pdef(\AmbiSea,
Pbind(
\instrument, \Sea,
\freq, 0.1,
\amp, Pstutter(2, Prand([1, 0.7, 0.3], inf) * 0.2) + Pwhite(0, 0.1, inf), //jede zweite variiert
\attack, 6.5,
\decay, 1,
\sustain, 2,
\retreat, 2.5,
\gate, 1,
\dur, Prand([1, 4], inf) //some variation
)
).play;
)
/* STAGE II "THE WIND" */
(
SynthDef(\Wind, { |freq=0.1, baseAmp=0.5|
var mod, sound;
mod = SinOsc.kr(freq, 0, baseAmp.dup);
sound = { BPF.ar(WhiteNoise.ar, LFNoise2.kr(0.1).exprange(400, 8000), 0.2) };
sound = { Pan2.ar(sound, Rand(-1, 1))}.dup(5).sum;
Out.ar(0 , sound * mod);
};
).store;
);
(
Pdef(\AmbiWind,
Pbind(
\instrument, \Wind,
\freq, 0.05,
\amp, 0.05,
\dur, Pwhite(5.0, 10.0, inf),
\legato, 1.9
)
).play;
)
/* STAGE III "THE SID Chip" */
// get the SID6581f UGen from: http://www.fredrikolofsson.com/pages/code-sc.html
// to control one of the 3 generator of the SID emu
(
SynthDef(\sid6581f_single, {|out= 0, gate= 1, freqLo= 0, freqHi= 0, pwLo= 0, pwHi= 0, ctrl= 65, atkDcy= 5, susRel= 5, fcLo= 0, fcHi= 0, res= 0, mode= 15, rate= 1, amp= 1, pan= 0|
var e, z;
e= EnvGen.kr(Env.asr(0.01, amp, 0.05), gate, doneAction:2);
z= SID6581f.ar(
freqLo, freqHi, pwLo, pwHi,
ctrl, atkDcy, susRel,
0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0,
fcLo, fcHi,
res, mode, rate
);
Out.ar(out, Pan2.ar(z*e, pan));
}).store
)
// Random tunes from the past
(
Pdef(\SID_one,
Pbind(
\instrument, \sid6581f_single,
\dur, 0.8,
\amp, 0.5,
\freqHi, 4,
\pwHi, 10,
\rate, Pstutter(1, Prand([8, 7, 6, 5, 4, 3, 2], inf)),
\pan, -0.8 //pan far left
)
);
)
Pdef(\SID_one).play;
(
Pdef(\SID_two,
Pbind(
\instrument, \sid6581f_single,
\dur, 1.6, // twice the duration of SID_one
\amp, 0.5,
\freqHi, 5,
\pwHi, 30,
\rate, Pstutter(1, Prand([8, 7, 6, 5, 4, 3, 2], inf)),
\pan, 0.8 //pan far right
)
);
)
Pdef(\SID_two).play;
(
Pdef(\SID_three,
Pbind(
\instrument, \sid6581f_single,
\dur, 0.4, // half the duration of SID_one
\amp, 0.3,
\freqLo, 80,
\pwLo, 4,
\freqHi, 5,
\pwHi, 4,
\rate, Pstutter(1, Prand([8, 7, 6, 5, 4, 3, 2], inf))
)
);
)
Pdef(\SID_three).play;
(
fork {
Pdef(\SID_one).fork;
Pdef(\SID_two).fork;
Pdef(\SID_three).fork;
}
)
// some melodies ... simple but that is old-skool ;)
(
SynthDef(\sid6581f_full, {|out= 0, gate= 1, freqLo0= 0, freqHi0= 0, pwLo0= 0, pwHi0= 0, ctrl0= 65, atkDcy0= 5, susRel0= 5, freqLo1= 0, freqHi1= 0, pwLo1= 0, pwHi1= 0, ctrl1=0 , atkDcy1= 0, susRel1= 0, freqLo2= 0, freqHi2= 0, pwLo2= 0, pwHi2= 0, ctrl2= 0, atkDcy2= 0, susRel2= 0, fcLo= 0, fcHi= 0, res= 0, mode= 15, rate= 1, amp= 1, pan= 0|
var e, z;
e= EnvGen.kr(Env.asr(0.01, amp, 0.05), gate, doneAction:2);
z= SID6581f.ar(
freqLo0, freqHi0, pwLo0, pwHi0, ctrl0, atkDcy0, susRel0,
freqLo1, freqHi1, pwLo1, pwHi1, ctrl1, atkDcy1, susRel1,
freqLo2, freqHi2, pwLo2, pwHi2, ctrl2, atkDcy2, susRel2,
fcLo, fcHi,
res, mode, rate
);
Out.ar(out, Pan2.ar(z*e, pan));
}).store
)
// "pling" base
(
Pdef(\SID_melody_one,
Pbind(
\instrument, \sid6581f_full,
\dur, 0.2,
\amp, 0.4,
\freqLo0, 8,
\freqHi0, 100,
\pwLo0, 2,
\pwHi0, 15,
\freqLo1, 10,
\freqHi1, 130,
\mode, 143,
\rate, Pstutter(2, Pseq([1, 3],inf), inf))
)
);
)
// Some drums
(
Pdef(\SID_melody_two,
Pbind(
\instrument, \sid6581f_full,
\dur, Pseq([ Pn(0.4, 2), Pn(0.2, 2), Pn(0.4, 3), 0.3, 0.1, Pn(0.2, 2)], inf),
\amp, 0.9,
\ctrl0, 2r10000001,
\freqHi0, Pseq([ 20, 30, Pn(20, 2), 30, 20, 30, Pn(20, 2), Pn(30, 2)], inf),
\rate, 1
)
);
)
// Melody
(
Pdef(\SID_melody_three,
Pbind(
\instrument, \sid6581f_full,
\dur, 0.2,
\amp, 0.2,
\freqHi0, Pstutter(16, [ 8, 4], inf),
\pwHi0, 10,
\rate, Pseq([ Pseq([ 2, 4, 9, 0], sid2), Pseq([ 2, 4, 9, 9], 4), Pseq([ 1, 1, 3, 8], 8), Pseq([ 0.5, 1], 2), Pseq([ 9, 8, 6, 4, 2, 1, 0, 1], 1)], inf).midicps,
\legato, 1.2
)
);
)
// Let's go...
(
fork {
Pdef(\SID_melody_one).fork;
Pdef(\SID_melody_two).fork;
Pdef(\SID_melody_three).fork;
}
)