Programmeren


Shortcuts

Er zijn een aantal toetsenbordcombinaties die nuttig zijn om te onthouden. In het geval van MacOS gebruik je cmd, in het geval van Windows & Linux ctrl

Uitvoeren van de code

Als je op cmd/ctrl + enter drukt wordt de regel code waar op dat moment je cursor staat uitgevoerd. Als je meerdere regels code in een keer wil uitvoeren moet je die regels selecteren. Er is ook een manier om dat makkelijker te doen, als de regels code die je wilt uitvoeren omsloten zijn door ( ) worden deze regels uitgevoerd als je ergens binnen deze regels staat met je cursor en cmd/ctrl + enter drukt.


(
    SynthDef(\test,{|freq=440|
        var sig;
        sig = SinOsc.ar(freq);
        Out.ar(0,sig);
        //als je cursur ergens hier tussen de ronde haakjes staat
        //wordt de code uitgevoerd bij ctrl/cmd + enter
    }).add;
)

Alle code in een keer uitvoeren

Als je code uit een aantal grotere blokken bestaat dan wil je niet elk blokje apart hoeven uitvoeren, dus eerst je server opstarten, dan de synthdefs uitvoeren, een synth maken en vervolgens de midi- of OSC-functies uitvoeren. Je wil het liefst een keer alles selecteren en dan uitvoeren. Het nadeel hierbij is dat een SynthDef eerst bekend moet zijn bij de server, voordat je deze kan afspelen met behulp van Synth. Om dit te voorkomen kan je gebruik maken van s.waitForBoot en s.sync.

s.waitForBoot

Met s.waitForBoot zorg je dat de server opstart en vervolgens een bepaalde functie uitvoert. Deze functie bevat alle andere code die uitgevoerd moet worden. Hieronder zie je een voorbeeld.

(
s.waitForBoot({
    SynthDef(\test,{|freq = 440, amp = 0.5|
        var sig, env;
        env = EnvGen.ar(Env.perc(),doneAction:2);
        sig = SinOsc.ar(freq,0,amp);
        Out.ar(0,sig*env!2)
    }).add;

    s.sync;

    ~test = Synth(\test);
})
)

Zoals je ziet staat er een keer s.sync tussen. Dit zorgt ervoor dat de language-kant van SuperCollider weer synchroon loopt met de server kant. Zodat de language weet dat de server de daarvoor aangemaakt SythDef kent.

Sommetjes & console

Net als in elke andere programmeertaal kan je getallen bij elkaar optellen, van elkaar aftrekken, vermenigvuldigen en delen. Houd er wel rekening mee dat Supercollider geen voorrangsregels kent zoals we die in andere talen en uit de wiskunde kennen. Vermenigvuldigen gaat dus niet voor optellen. Zet altijd haakjes om expressies heen als er verwarring kan ontstaan.

1 + 2 * 3;
//je zou 7 verwachten maar SC berekent dit als (1 + 2) * 3

Typ de volgende code in en druk op cmd/ctrl+enter:

1 + 2;

Je zult nu zien dat het resultaat in het post window verschijnt. In het post window verschijnt altijd het resultaat van de laatst uitgevoerde regel code. Als je de volgende code uitvoert zul je zien dat alleen het laatste antwoord, 2, in het postwindow verschijnt:

(
    1-2;
    3/4;
    5%3;
)

Wil je nu toch dat de andere resultaten ook zichtbaar zijn dan moet je .postln achter de code zetten:

(
    1-2.postln;
    3/4.postln;
    5%3.postln;
)

Commentaar

Net als bij JavaScript zet je commentaar bij je code door het gebruik van een dubbele forward slash

//dit is commentaar

Meerdere regels commentaar gaat ook op dezelfde manier als bij JavaScript:

/* dit is commentaar
   dit ook
*/
"en dit niet meer".postln;

Variabelen

Er zijn twee manieren om globale variabelen te definiΓ«ren binnen Supercollider. Je kunt de letters a t/m z gebruiken. Dit is voornamelijk handig bij prototyping maar bij grotere stukken code wordt je code er snel onleesbaar door dus dat wordt afgeraden. Daarnaast is bijvoorbeeld de letter s al in gebruik om de server mee aan te sturen.
Een betere manier om globale variabelen te declareren is door de tilde ~ te gebruiken voor een woord:

~som = 3 + 5;
~som.postln;

Binnen een blok, functie of synthdef kun je met variabelen werken als je ze eerst declareert:

(
  var sampleRate=44100;
  sampleRate.postln;
)