Les 4 - SuperCollider introductie


Hier de presentatie sysbas-1b-supercollider-1-introductie.pdf

Hier de code van de les:

// ====> Shortcuts
//
// cmd (macOS) of ctrl (Windows/Linux)
//
// cmd + B      server opstarten
// cmd + enter  code/regel uitvoeren
// cmd + .      alle draaiende code stoppen
//
// cmd + D      documentatie van code openen
// cmd + M      geluid in/out meter openen

// Opstarten kan ook zo:
s.boot;

// Speel een sinus
{ SinOsc.ar(220) }.play;

// ====> Globale variabelen
//
// door hele file te gebruiken

~docent = "Roald";
~docent = "Ward";

// Je kan iets printen (in de postwindow)
// door ergens .postln achter te zetten
~test.postln;

// De laatste regel wordt altijd gepost
"Marc".postln;
~docent = "Ward";
~les = "SuperCollider";

// ====> Lokale variabelen
//
// binnen blocks/scopes te gebruiken
// daarbuiten dus niet bekend

{
    var amp = 0.5;
    SinOsc.ar(432, 0, amp);
}.play;

amp.postln; // hier is amp dus onbruikbaar

// ====> Code organiseren
//
// Code verzameld binnen {  } en
// opgeslagen in een globale variabele

~zee = {
    var lfo = SinOsc.ar(0.1, pi, 0.4, 0.6);
    PinkNoise.ar([lfo, lfo]);
}

// Gebruik variabele:
~zee.play;      // geluid afspelen
~zee.plot;      // plot maken
~zee.scope;     // scope openen (Ên afspelen)

// ====> unit-generators (UGens)
//
// oscillatoren, filters, effecten...

SinOsc.ar();
BLowPass.ar();
Delay1.ar();
FreeVerb.ar();
LFSaw.kr();

// UGen op audio rate (samplerate):
SinOsc.ar();

// UGen op kontrol rate (samplerate / 64):
// Gebruikt minder CPU
// Handig als je bijv. een LFO maakt
SinOsc.kr();

// ====> UGen mul en add
//
// UGens hebben meerdere argumenten.
//
// Veel UGens hebben een mul en add:
//  mul vermenigvuldigd het signaal
//  add voegt een offset toe aan signal

SinOsc.ar(freq, phase, mul, add);
BHiPass.ar(in, freq, reso, mul, add);

// SinOsc gaat van -1 naar 1
// Hoe maken we dat -0.25 t/m 0.25?
// En van 0 naar 1?
{ SinOsc.ar(440, 0, mul, add) }.scope;

// ====> UGen nesting en multichannel
//
// Als argument van een UGen kan je ook
// een andere UGen gebruiken
{
    Saw.ar(SinOsc.kr(5, 0, 5, 110));
}.play;

// Door bij een argument een array
// mee te geven kan je meerdere
// kanalen aan geluid generen
{
    Saw.ar(SinOsc.kr(0.25, 0, 5, [55, 110]));
}.play;