Ambienti operativi¶
import os
SuperCollider ¶
Software Open Source
Utilizza un linguaggio di programmazione (Smalltalk) che segue il paradigma della programmazione orientata agli oggetti (OOP - Object Oriented Programming).
Dobbiamo scrivere i comandi che vogliamo fare eseguire al computer sotto forma di linee di codice salvate in files di testo chiamati script.
Interfaccia utente ¶
Lanciamo l’applicazione
La figura sottostante mostra la schermata iniziale delle versioni più recenti (IDE)
Identica su tutti i sistemi operativi
Divisa in quattro parti:

- A - Interprete. Lo spazio dove si scrive il codice.
- B - Help browser. Lo spazio dove possiamo consultare gli help files e la documentazione.
- C - Post window. Lo spazio dove è possibile leggere e postare diverse informazioni utili su quello che sta accadendo in SuperCollider.
- D - (sul bordo in basso a destra). Lo spazio dove sono visualizzate informazioni riguardanti l’Interprete e il Server
Architettura ¶
Due applicazioni separate che comunicano tra loro attraverso il protocollo OSC.
Interprete (o client o SClang)
- dove scriviamo i comandi da far eseguire al computer sotto forma di codice.
- Lavora a tempo di scheduling
- Se non compiamo alcuna azione (come l'esecuzione del codice) o generiamo un qualche tipo di automazione (Routine) non restituisce alcun valore.
Server (o scsynth)
- lavora dietro le quinte, non lo vediamo.
- E' il motore di sintesi del suono di SuperCollider.
- Riceve istruzioni dall’Interprete e in base a queste costruisce gli strumenti virtuali necessari alla generazione o elaborazione un segnale audio.
- Lavora a una determinata rata di campionamento.
Tutti i segnali audio sia in entrata che in uscita esistono solo sul Server. .
Interprete $\rightarrow$ foglio che contiene:
- istruzioni necessarie alla costruzione di uno strumento musicale virtuale,
- tecniche strumentali con le quali sarà suonato
- eventualmente una partitura con indicate le azioni da compiere nel tempo per suonarlo.
Questo foglio viene inviato via OSC al Server, che come un liutaio/strumentista virtuale>
- interpreta le istruzioni di montaggio,
- in base a queste costruisce lo strumento per poi
- suonarlo eseguendo le azioni specificate in una partitura o quelle inviate in tempo reale da un esecutore reale o virtuale esterno al software.
Quando lanciamo l’applicazione, vengono creati automaticamente due Server di default:
- internal: un Server interno all'applicazione client, da considerarsi ”di servizio” - in disuso.
- localhost: un Server indipendente dall'applicazione client, sullo stesso o su un altro computer. E’ quello che viene utilizzato normalimente.
Comandi principali ¶
New file
MAC: cmd+n, WIN: ctrl+n
Open file
MAC: cmd+o, WIN: ctrl+o
Dopo aver creato o aperto un file, se vogliamo far compiere un’azione a SuperCollider (come eseguire un’operazione matematica, scrivere una partitura, definire un algoritmo di sintesi, cambiare i parametri di un Synth, farlo suonare, stopparlo, etc.) dobbiamo:
- Scrivere nell’interprete una o più righe di codice contenenti una sequenza di istruzioni.
- Selezionare una o più righe di codice con il mouse.
- Eseguire (valutare) il codice selezionato schiacciando i tasti cmd+invio oppure shift+invio.
Linee di codice
L’Interprete è suddiviso in linee numerate da 1 a n e ogni linea deve terminare con un ; (punto e virgola).
Se scriviamo su più linee ma non mettiamo punto e virgola prima di andare a capo, SuperCollider le interpreta come una sola.
Se invece scriviamo del codice sulla stessa linea dopo un punto e virgola SuperCollider lo interpreta come se fosse scritto una linea sotto.
1+2; // questa e' una linea
( // ma anche da qua...
1+
2/
3; // a qua per SC e' una sola linea...
1+2; 3*7; // Queste sono due linee...
)
Possiamo raggruppare più linee in blocchi di codice includendoli tra parentesi tonde.
(
"ciao".postln;
a = 12 +24; // Questo è un blocco di codice
a.postln;
)
Eseguire il codice (Evaluate)
Possiamo eseguire il codice scritto nelle celle di questo Notebook copiandolo e incollandolo il contenuto nell'Interprete di SuperCollider oppure riscrivendolo (consigliato come allenamento manuale/mnemonico).
Tre possibilità:
- Una linea alla volta, posizionando il cursore ovunque sulla linea che vogliamo eseguire (cmd+invio):
2+2; // Posta il risultato nella Post window
- Un intero blocco di codice selezionandolo con il mouse (click e drag), oppure facendo doppio click sulla prima o sull’ultima parentesi.
(
13.postln;
[12,"ciao", \miao, 45.567].postln;
(12 + 56).postln
)
- L’intero codice selezionando ’Evaluate File’ dal menù ”Language”.
Ordine di esecuzione
In queste ultime due modalità le operazioni sono eseguite consecutivamente:
- da sinistra a destra,
- linea dopo linea,
- dall’alto verso il basso (in quasi tutti i casi)
alla maggiore velocità fornita dalla potenza del computer.
Messaggi di errore
Eseguiamo il seguente codice che contiene volutamente un errore (manca la virgola prima di 67):
a = [12,34,56 67]
Leggiamo nella post window cosa ci dice SuperCollider: le freccette o il pallino indicano dove si è interrotta la compilazione, quindi l’errore sarà necessariamente prima e tocca a noi scovarlo.
Cancellare il contenuto della post window
MAC: cmd+shift+p - WIN: ctrl+shift+p
Commenti
- agevolare la memoria nel caso volessimo modificare un patch a distanza di tempo,
- passarlo a qualcuno che sarebbe così aiutato nella comprensione del codice.
I commenti sono colorati di rosso e ci sono due possibili sintassi:
- Su una linea:
2+2; // somma
- Su più linee:
/*
...commento...
*/
Help files
Per richiamare un help file dobbiamo selezionare la parola (Doppio click o Click and drag).
SinOsc;
MAC: cmd + d - WIN: ctrl + d.
Save file
MAC: cmd+s - WIN: alt+s.
Si apre un menù a comparsa nel quale possiamo specificare quattro formati diversi:
- All Files (nome_del_file.txt). Formato generico, può essere letto da un editor di testo qualsiasi come TextEdit, Word, LibreOffice, etc.
- SuperCollider Document (nomedelfile.scd). Formato dei documenti di SuperCollider. Se SuperCollider non è stato lanciato e facciamo doppio click sull’icona di un file ’.scd’ il software si apre automaticamente.
- SuperCollider Class File (nomedelfile.sc). Se vogliamo salvare una Classe scritta da noi.
- SuperCollider Help Source (nomedelfile.schelp). Se vogliamo salvare un Help scritto da noi.
N.B. Prestiamo attenzione che in questi formati viene salvato il codice scritto nell’interprete sotto forma di file di testo, non l’audio eventualmente generato da esso.
Tipi di data
Come in tutti i linguaggi formali in SuperCollider ci sono diversi tipi di data (data type) che definiscono:
- la quantità di memoria che occupano.
- le operazioni che possiamo effettuare su di essi.
I principali sono.
12 // Int
12.23 // Float
\ciao // Symbol
'ciao ciao' // Symbol
$c // Char
"vado al mare" // String
3 + 5; // Restituisce 8
"3" + "5"; // Restituisce 35
Audio ¶
Boot del Server
Se vogliamo generare o elaborare segnali audio, prima dobbiamo accendere il Server (boot) e poi valutare il codice.
Possiamo paragonare quest’azione all’accendere o spegnere la corrente che alimenta un sistema elettroacustico (player, mixer, amplificatore e altoparlanti).
Per farlo abbiamo a disposizione tre modi:
Dall'interfaccia utente:
Boot (power on): clicchiamo su *0.00%* a destra della scritta ”Server” tenendo schiacciato il tasto del mouse. Compare un menù a tendina e selezioniamo ”Boot Server”. I numeri diventano verdi e alcuni cominciano a cambiare.
Quit (power off): idem, selezionando ”Quit Server”. I numeri tornano bianchi e si azzerano.
Scrivendo ed eseguendo i comandi con righe di codice:
s.boot; // Power on
s.quit; // Power off
- Usando abbreviazioni da tastiera:
- Boot: MAC: cmd+b - WIN: ctrl+b.
- Quit: solo da interfaccia utente o da codice.
Quando effettuiamo il ”Boot” del Server, accendiamo la computazione audio in SuperCollider, se però non inviamo alcun segnale all’uscita, non udiremo alcun suono.
(
b = {PMOsc.ar(440, MouseY.kr(1, 550), MouseX.kr(1, 15))*Line.kr(0,0.3,1)};
b.play;
b.plot(0.5);
b.scope;
b.freqscope;
)
Stop dei processi in corso, audio compreso
MAC: cmd+. - WIN: alt+.
Quando invece eseguiamo il codice e fermiamo l’esecuzione come abbiamo visto, è come se schiacciassimo i pulsanti ”Play” e ”Stop” di un CD player o di un altro generatore di suono collegato al sistema elettroacustico di cui sopra.
Interfaccia utente ¶
- Lanciamo l’applicazione (doppio click sull’icona)

- CMD + n (new)
- Compare l’interfaccia utente (patch window)

Due stati:
unlocked - programmazione - il cursore ha la forma di una mano.
- creare e connettere tra loro diversi oggetti grafici.
- non possiamo interagire con essi.
locked - esecuzione - il cursore ha la forma di una freccia.
- possiamo interagire attraverso il mouse con gli oggetti inseriti nel patch
- non possiamo modificarli in alcun modo.
cmd + e $\rightarrow$ passiamo da uno stato all'altro
Tipologie di oggetti ¶
Quando un patch è unlocked possiamo creare e posizionare due tipologie di elementi:
Object box
Opcode o codici operativi ovvero un sottoprogrammi creati per svolgere un compito specifico.
- cmd + 1 oppure menù Inserisci $\rightarrow$ Oggetto.
- Compare un oggetto con all'interno un cursore che lampeggia,
- Scriviamo il nome dell'opcode che vogliamo creare tra quelli disponibili
Per visualizzare un elenco $\rightarrow$ tasto destro nel patch $\rightarrow$ Aiuto.
Come esempio scriviamo *****
Questo opcode ha come compito il moltiplicare tra loro due valori.

Oggetti GUI
Tutti gli altri oggetti sono Graphic User Interface (GUI)
Due compiti:
Visualizzare un qualche tipo di informazioni (monitor visivi) come valori numerici, gain di segnali, stato di uno switch, etc.
Permettere l'interazione dell'utente (input manuale) con l'applicazione attraverso azioni del mouse (click, scroll, etc.).

os.system('open 1_ambienti/patch/1.1.pd')
0
Tutti gli oggetti (anche GUI) possono avere uno o più inlet(s) e/o uno o più outlet(s):

"Porte" attraverso le quali fare uscire o entrare un qualche tipo di dato (o un flusso di dati)
Collegano tra loro più oggetti attraverso patch chords

os.system('open 1_ambienti/patch/1.2.pd')
0
Ricoridamoci che per poter interagire con una GUI dobbiamo mettere il patch in locked mode...
Comandi principali ¶
New file
MAC: cmd+n, WIN: ctrl+n
Open file
MAC: cmd+o, WIN: ctrl+o
Cancellare la Max console
cmd+shift=L
Commenti
E' molto utile inserire dei commenti nel codice sia per agevolare la memoria nel caso volessimo modificare un patch a distanza di tempo, sia nel caso volessimo passarlo a qualcuno che sarebbe così aiutato nella comprensione del codice.
cmd+5
Help files
Gli Help files sono i nostri migliori amici quando vogliamo recuperare informazioni su qualche oggetto di PD.
- $\rightarrow$ unlocked mode $\rightarrow$ tasto destro.
- Compare menù $\rightarrow$ Aiuto.
Save file
MAC: cmd+s - WIN: alt+s.
Si apre un menù a comparsa nel quale possiamo specificare diversi formati
- File PD
- Patch Max
- File di testo Max
N.B. Prestiamo attenzione che in questi formati viene salvato il codice scritto nel patch sotto forma di file di testo, non l’audio eventualmente generato da esso.
Audio ¶
Per generare o elaborare segnali audio dobbiamo accenderne il motore (come il boot del Server in SuperCollider).
Due opzioni principali:
- Cliccare sull'icona DSP.
- Collegare un toggle con il messaggio illustrato per poi interagire con esso cliccandoci sopra

os.system('open 1_ambienti/patch/1.3.pd')
0
Questo patch rappresenta il nostro primo algoritmo di sintesi e contiene tutti gli elementi illustrati finora, introducendo inoltre un'ulteriore differenza tra gli oggetti:
Oggetti audio - simbolo tilde alla fine del nome. Se l'audio è acceso dai loro inlet(s) e outlet(s) entrano o escono tanti valori al secondo quanto la rata di campionamento (pensate ad un rubinetto, quando lo apriamo comincia a scorrere l'acqua, quando lo chiudiamo il flusso si ferma).
Oggetti di controllo: tutti gli altri. Indipendentemente dallo stato della computazione audio del patch dai loro inlet(s) e outlet(s) non esce alcun dato se non effettuiamo una qualche azione interagendo con essi attraverso il mouse o dati provenienti da software o devices esterni oppure programmando una sequenza di azioni automatiche.
Risorse in rete ¶
SuperCollider
- A.Valle - Introduzione a SuperCollider.
- B.Ruviaro - A Gentle Introduction to SuperCollider.
- E.Fieldsteel - Tutorials su You Tube.
- AAVV - Codici diversi.
- AAVV - Codici di 140 caratteri commentati.
PD
- Vari - Floss manual.
- Johannes Kreidler - Programming Electronic Music in Pd.
- Tommaso Rosati - Pure data tutorial
- Vari - Tecniche di sintesi
- M.Puckette - The Theory and Technique of Electronic
Music