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 [Strg+.] stoppen Hilfe für Suchbegriffe: [Strg+Shift+D]
Das folgende Beispiel von Nathaniel Virgo stammt aus einer Sammlung von Tweet-fähigen Beispielcodes (<=140 Zeichen)#
- http://swiki.hfbk-hamburg.de:8888/MusicTechnology/899
-> Tweet-sized-(<=140 characters)-Supercollider-Soundfiles
- http://supercollider.sourceforge.net/sc140/
-> noch mehr tweet-sized (<=140 characters) Supercollider Soundfiles
- https://ccrma.stanford.edu/wiki/SuperCollider_Tweets
-> Tweet-sized (144 Zeichen) Supercollider-Examples analysiert
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 Tonfolgen#
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: https://sccode.org/1-58T
|sccode-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
Sinusbubbles#
s.waitForBoot({
//Server.default = s = Server.internal.boot;
play(
{
CombN.ar(
SinOsc.ar(
midicps(
LFNoise1.ar(3, 24,
LFSaw.ar([5, 5.123], 0, 3, 80)
)
),
0, 0.4),
1, 0.3, 2)
}
)
})
Was passiert hier? Sinuswellen bubblen nach oben. (09.10.2021)
Bubbles in Clustern#
Quelle: Kapitel 7 aus Einsteiger-Youtube-Tutorial von Eli Muveil Fieldsteeel
(
s.boot;
SynthDef.new(\blip, { // Soundsource
arg out, fund=300, dens=2, decay=0.2;
var freq, trig, sig;
freq = LFNoise0.kr(3).exprange(fund,fund*4).round(fund);
sig = SinOsc.ar(freq) * 0.25;
trig = Dust.kr(dens);
sig = sig * EnvGen.kr(Env.perc(0.01, 0.3), trig);
sig = Pan2.ar(sig, LFNoise1.kr(10));
Out.ar(out, sig);
}).add;
//)
SynthDef.new(\reverb, { // Soundeffect
arg in, out=0;
var sig;
sig = In.ar(in, 2);
sig = FreeVerb.ar(sig, 0.5, 0.8, 0.2);
Out.ar(out, sig);
}).add;
//)
~sourceGrp = Group.new;
~fxGrp = Group.after(~sourceGrp);
y = Synth.new(\reverb, [\in, ~reverbBus2], ~fxGrp);
8.do{
Synth.new(
\blip,
[
\out, ~reverbBus2,
\fund, exprand(60,300).round(30)
],
~sourceGrp
);
}
)
Was passiert hier? Voll die Bubbles in Clustern (09.10.2021)
Moogbasstone#
Quelle: https://github.com/everythingwillbetakenaway/Synthdefs
s.waitForBoot{
//no use of gate, fixed length
SynthDef(\moogbasstone2,{|out= 0 freq = 440 amp = 0.1 gate=1 attackTime= 0.2 fenvamount=0.5 cutoff= 1000 gain=2.0 pan=0.0|
var osc, filter, env, filterenv;
//alternative: richer source
osc = Mix(Pulse.ar(freq.lag(0.05)*[1.0,1.001,2.0],Rand(0.45,0.5)!3,0.33));
filterenv = EnvGen.ar(Env.adsr(attackTime,0.0,1.0,0.2),gate,doneAction:2);
filter = MoogFF.ar(osc,cutoff*(1.0+(fenvamount*filterenv)),gain);
env = EnvGen.ar(Env.adsr(0.001,0.3,0.9,0.2),gate,doneAction:2);
Out.ar(out,Pan2.ar((0.7*filter+(0.3*filter.distort))*env*amp,pan));
}).add;
//via Comb filter for feedback
SynthDef(\delayeffect, {|out =0 gate= 1|
var source = In.ar(out,2);
var delay;
var env = Linen.kr(gate, 0.1, 1, 0.1, 2);
delay= CombC.ar(source,0.25,0.25,2.0);
XOut.ar(out,env, delay);
}).add;
SynthDef(\choruseffect, {|out =0 gate= 1|
var source = In.ar(out,2);
var chorus;
var env = Linen.kr(gate, 0.1, 1, 0.1, 2);
chorus= Mix.fill(7, {
var maxdelaytime= rrand(0.005,0.02);
DelayC.ar(source, maxdelaytime,LFNoise1.kr(Rand(4.5,10.5),0.25*maxdelaytime,0.75*maxdelaytime) )
});
XOut.ar(out,env, chorus);
}).add;
(
Pfx(
Pfx(
Pmono(
\moogbasstone2,
\amp, 0.8,
\midinote,Pseq([24,36,43,48, 43,48,36,36, 36,36,39,36, 31,31,31,31, 31,34,31,34],inf),
\dur,0.25,
\gain,Pn(Pseries(2,0.1,19),inf),
\cutoff,Pstutter(3,Pn(Pseries(50,250,40),inf)),
\attackTime,Pn(Pseries(0.0,0.01,30),inf),
\fenvamount,Pstutter(4,Pn(Pseries(0.0,0.05,20),inf))
),
\delayeffect
),
\choruseffect
).play
)
}
Was passiert hier? Moog-Synthesizer als Sequenz mit autostart des Supercollider-Servers (09.10.2021)
Chimes#
Quelle: https://depts.washington.edu/dxscdoc/Help/Tutorials/A-Practical-Guide/PG_Cookbook05_Using_Samples.html
|Pattern-Guide-Cookbook, Chapter 5, "Using Patterns"
(
TempoClock.default.tempo = 1;
p = Pbind(
\instrument, \multiSampler,
\bufBase, b.first,
\baseFreqBuf, ~baseBuf,
\degree, Pseries(0, Prand(#[-2, -1, 1, 2], inf), inf).fold(-11, 11),
\dur, Pwrand([0.25, Pn(0.125, 2)], #[0.8, 0.2], inf),
\amp, Pexprand(0.1, 0.5, inf),
// some important conversions
// identify the buffer numbers to read
\freq, Pfunc { |ev| ev.use(ev[\freq]) },
\bufnum, Pfunc({ |ev| ~midinotes.indexInBetween(ev[\freq].cpsmidi) })
.clip(0, ~midinotes.size - 1.001)
).play;
)
Was apssiert hier: Ähnlich einem Zitter- oder Harfenspiel werden hier Töne angeschlagen (09.10.2021)
Add new attachment
Only authorized users are allowed to upload new attachments.