https://supercollider.github.io/
|SuperCollider]-Codebeispiele#
(erstmalig verfasst: 09.10.2021, geändert: 09.10.2021)
Vorarbeit: 1. % pw-jack scide ... ruft die SuperCollider-Entwicklungsumgebung auf, so sie installiert ist 2. Mit [Strg+B] den SuperCollider-Server starten 3. Code eintippern oder per Clipboard übertragen 4. Cursor in Code positionieren und mit [Strg+Returntaste] Code ausführen 5. Nach getaner Arbeit des Codes die Ausführung mit [Alt+.] stoppen Hilfe für Suchbegriffe: [Strg+Shift+D]
Nathaniel Virgo ("SC140/01-Nathaniel_Virgo.scd")#
(
s.waitForBoot{
//Nathaniel Virgo
{
LocalOut.ar(a=CombN.ar(
BPF.ar( // Butterworth bandpass filter
LocalIn.ar(2)*7.5+Saw.ar([32,33], 0.2),
2**LFNoise0.kr(4/3,4)*300,0.1).distort.postln, // frequency
2, // rq = bandwith/frequency
2, // mul
40 // add
)
);
a
}.play//#supercollider
}
)
Was macht es: zufällig komponieren. Für meine Begriffe (Markus) beinahe endlos hörbar.
Reverb-Example mit zufälligen Tonnfolgen#
Quelle: https://depts.washington.edu/dxscdoc/Help/Tutorials/Mark_Polishook_tutorial/17_Delays_reverbs.html
(
{
var s, z, y;
// 10 voices of a random sine percussion sound :
s = Mix.ar(Array.fill(10, { Resonz.ar(Dust.ar(0.2, 50), 200 + 3000.0.rand, 0.003)}) );
// reverb predelay time :
z = DelayN.ar(s, 0.048);
// 7 length modulated comb delays in parallel :
y = Mix.ar(Array.fill(7,{ CombL.ar(z, 0.1, LFNoise1.kr(0.1.rand, 0.04, 0.05), 15) }));
// two parallel chains of 4 allpass delays (8 total) :
4.do({ y = AllpassN.ar(y, 0.050, [0.050.rand, 0.050.rand], 1) });
// add original sound to reverb and play it :
s+(0.2*y)
}.scope
)
Was macht es: abspielen auf- und abklingender, verhallter, zufälliger Tonfolgen
Gabber Rave#
Quelle: Forum mit Hommage an Rave von 1995
// 60Hz Gabber Rave 1995
Server.default.boot;
(
SynthDef(\gabberkick, {
var snd, freq, high, lfo;
freq = \freq.kr(440) * (Env.perc(0.001, 0.08, curve: -1).ar * 48 * \bend.kr(1)).midiratio;
snd = Saw.ar(freq);
snd = (snd * 100).tanh + ((snd.sign - snd) * -8.dbamp);
high = HPF.ar(snd, 300);
lfo = SinOsc.ar(8, [0, 0.5pi]).range(0, 0.01);
high = high.dup(2) + (DelayC.ar(high, 0.01, lfo) * -2.dbamp);
snd = LPF.ar(snd, 100).dup(2) + high;
snd = RLPF.ar(snd, 7000, 2);
snd = BPeakEQ.ar(snd, \ffreq.kr(3000) * XLine.kr(1, 0.8, 0.3), 0.5, 15);
snd = snd * Env.asr(0.001, 1, 0.05).ar(2, \gate.kr(1));
Out.ar(\out.kr(0), snd * \amp.kr(0.1));
}).add;
SynthDef(\hoover, {
var snd, freq, bw, delay, decay;
freq = \freq.kr(440);
freq = freq * Env([-5, 6, 0], [0.1, 1.7], [\lin, -4]).kr.midiratio;
bw = 1.035;
snd = { DelayN.ar(Saw.ar(freq * ExpRand(bw, 1 / bw)) +
Saw.ar(freq * 0.5 * ExpRand(bw, 1 / bw)), 0.01, Rand(0, 0.01)) }.dup(20);
snd = (Splay.ar(snd) * 3).atan;
snd = snd * Env.asr(0.01, 1.0, 1.0).kr(0, \gate.kr(1));
snd = FreeVerb2.ar(snd[0], snd[1], 0.3, 0.9);
snd = snd * Env.asr(0, 1.0, 4, 6).kr(2, \gate.kr(1));
Out.ar(\out.kr(0), snd * \amp.kr(0.1));
}).add;
// this will record to the disk
/*SynthDef("help-Diskout", { |bufnum|
DiskOut.ar(bufnum, In.ar(0,2));
}).add;
*/
) // zuerst mit [Strg+Return] ausführen
(
var durations;
durations = [1, 1, 1, 1, 3/4, 1/4, 1/2, 3/4, 1/4, 1/2];
Ppar([
Pbind(*[
instrument: \gabberkick,
amp: -23.dbamp,
freq: 60,
legato: 0.8,
ffreq: Pseq((0..(durations.size * 4 - 1)).normalize, inf).linexp(0, 1, 100, 4000),
dur: Pseq(durations, inf),
bend: Pfuncn({ |x| if(x < (1/2), 0.4, 1) }, inf) <> Pkey(\dur),
]),
Pbind(*[
instrument: \hoover,
amp: -20.dbamp,
midinote: 74,
dur: durations.sum * 2,
sustain: 7,
])
]).play(TempoClock(210 / 60));
)
) // als zweites mit [Strg+Return] ausführen