SuperCollider

linguaggio di programmazione

SuperCollider è un ambiente di sviluppo e un linguaggio di programmazione creato nel 1996 da James McCartney per la sintesi audio in tempo reale e la composizione algoritmica[3][4].

SuperCollider
linguaggio di programmazione
AutoreJames McCartney
Data di origine1996
Ultima versione3.10.0
Utilizzosintesi audio in tempo reale e composizione algoritmica
ParadigmiOrientato agli oggetti
TipizzazioneDinamica
Estensioni comuniscd
Influenzato daSmalltalk, C[1]
Implementazione di riferimento
Sistema operativoFreeBSD,[2] Linux, macOS, Windows
LicenzaGNU General Public License
Sito websupercollider.sourceforge.net

Da allora, si è evoluto in un sistema utilizzato e, successivamente, sviluppato sia da scienziati che da artisti che lavorano col suono. Si tratta di un linguaggio di programmazione dinamica efficiente ed espressivo che offre un framework per la ricerca acustica, musica algoritmica e programmazione interattiva.[1]

Distribuito sotto licenza GNU nel 2002, SuperCollider è un software libero. La versione più recente (3.10.0) è stata distribuita il 25 novembre 2018.[5]

Architettura modifica

A partire dalla versione 3, l'ambiente di sviluppo di SuperCollider è stata divisa in due componenti: un server (scsynth) e un client (sclang). Questi componenti comunicano tramite OSC (Open Sound Control).[1]

Il linguaggio SC combina la struttura orientata agli oggetti di Smalltalk con le caratteristiche della programmazione funzionale con una sintassi simile a quella di C.[1]

L'applicazione Server SC supporta una semplice API per plugin in C, facilitando la scrittura di algoritmi sonori efficienti, che possono essere combinati in grafici o calcoli. Poiché il controllo esterno nel server viene effettuato tramite OSC, è possibile usarlo con altri linguaggi o applicazioni.[1]

Il SuperCollider synthesis server (scsynth) modifica

La generazione del suono di SuperCollider è impacchettata all'interno di un file eseguibile da linea di comando che si chiama scsynth. Nella maggior parte dei casi è controllato dall'interno del linguaggio di programmazione SuperCollider, ma può essere usato indipendentemente. Il server audio ha le seguenti caratteristiche:[1]

  • accesso all'Open Sound Control;
  • semplice API per plugin in C;
  • supporta un qualunque numero di canali di input e output, inclusi massicci settaggi multicanale[6];
  • offre l'accesso a una struttura ad albero ordinata di nodi di sintesi che definiscono l'ordine di esecuzione;
  • sistema a bus che permette di ristrutturare dinamicamente il flusso del segnale;
  • buffer di scrittura e lettura;
  • calcolo a tassi diversi in base alle necessità: tasso audio, frequenza di controllo, tasso di richiesta.

Supernova, un'implementazione indipendente dell'architettura del server[7], aggiunge un supporto multi-processore con un raggruppamento parallelo esplicito dei nodi di sintesi.

Il SuperCollider programming language (sclang) modifica

SuperCollider è un linguaggio con una tipizzazione dinamica, dotato di garbage collection, orientato agli oggetti a ereditarietà multipla ed è un linguaggio funzionale simile a Smalltalk,[4] con una sintassi simile a quella di Ruby o di C. La sua architettura offre un compromesso tra la necessità di computazione in tempo reale e la flessibilità e la semplicità di un linguaggio astratto. Come molti linguaggi funzionali, implementa funzioni come oggetti di prima classe, con la possibilità di combinarle tra loro. Funzioni e metodi possono avere valori di default per gli argomenti e liste di argomenti a lunghezza variabile e possono essere richiamate con qualunque ordine di argomenti chiave. Le chiusure sono lessicali e la visibilità è sia lessicale che dinamica. La maggior parte delle caratteristiche tipiche dei linguaggi funzionali è supportata, inclusa la creazione di chiusure tramite applicazione parziale esplicita, ottimizzazione delle chiamate di coda, Comprensione di lista e coroutine. Le specifiche includono l'espansione implicita di tuple e il sistema stateless pattern. Il suo tempo di ricerca dei messaggi costante e il garbage collection in tempo reale permettono a grandi sistemi di essere efficienti e di gestire flessibilmente il processo di segnali.[1]

Supportando metodologie di riflessione, programmazione interattiva e programmazione letterale, SuperCollider rende relativamente semplice losviluppo di nuovi algoritmi sonori[8] e sviluppare software e framework personalizzati. Per quanto riguarda la conoscenza specifica del dominio, è sia generico (per esempio, permette di rappresentare proprietà come tempo e pitch a livelli di astrazione variabili) che pieno di esempi di implementazioni per scopi specifici.[1]

GUI modifica

SuperCollider permette agli utenti di costruire per le applicazioni delle GUI multi-piattaforma. La libreria standard con le componenti per le interfacce utente può essere estesa con un grande numero di framework disponibili. Per quanto riguarda la programmazione interattiva, il sistema supporta l'accesso programmatico a file .rtc (rich text code). Può essere usato per generare algoritmicamente grafica vettoriale[9].

Interfaccia e supporto di sistema modifica

Client modifica

Poiché il server viene gestito tramite OSC, è possibile usare diverse applicazioni per controllarlo. Solitamente si usano ambienti di sviluppo per il linguaggio SuperCollider (vedi sotto), ma è possibile usare anche altri sistemi OSC-aware come Pure Data.[1]

Esistono client di "terze parti" per il server SuperCollider, come rsc3, un client Scheme, hsc3, basato su Haskell, ScalaCollider[10], basato su Scala e Overtone, basato su Clojure.[11] Questi sono diversi dagli ambienti di sviluppo menzionati di seguito perché non forniscono un'interfaccia al linguaggio di SuperCollider, ma comunicano direttamente con il server audio per facilitare l'utente.[1]

Sistemi operativi supportati modifica

SuperCollider può essere eseguito sotto macOS, Linux, Windows e FreeBSD. Tuttavia, la versione per Windows è rimasta indietro rispetto alle altre, poiché la maggior parte dello sviluppo si è svolta su Mac e Linux. Per ognuno di questi sistemi operativi, esistono diversi ambienti di language-editing e client che possono essere usati con SuperCollider.[1]

Si è dimostrato che SuperCollider può essere eseguito sotto iOS[12] e Android.[13]

Editor modifica

 
Screenshot of SuperCollider Vim on puredyne linux.

La versione di SuperCollider per Mac è solitamente usata con l'interfaccia (Cocoa), specifica per Mac; su Windows e Linux, è possibile usare vari editor e diversi ambienti di sviluppo integrato comuni, come:

Per ognuno dei precedenti ambienti, un plugin abilita l'esecuzione in tempo reale del codice SuperCollider e l'interazione col server audio.

Precedenti tentativi di portare SuperCollider su Windows hanno dato vita ad ambienti di sviluppo basati su Python, chiamati PsyCollider, e un a plugin per Eclipse, ma non sono stati aggiornati recentemente. Ad ogni modo, è tuttora in atto un nuovo tentativo di sviluppare un IDE multi-piattaforma basato sul framework Qt.[16]

Esempi di codice modifica

// stampa "Hello world!"
"Hello world!".postln;
// esegue un mix tra un'onda sinusoidale a 800 Hz e del rumore rosa
{ SinOsc.ar(800, 0, 0.1) + PinkNoise.ar(0.01) }.play;
// modula una frequenza sinusoidale e l'ampiezza del rumore con un'altra onda sinusoidale 
// la cui frequenza dipende dalla posizione del puntatore orizzontale del mouse
{ 
	var x = SinOsc.ar(MouseX.kr(1, 100));
	SinOsc.ar(300 * x + 800, 0, 0.1) 
	+ PinkNoise.ar(0.1 * x + 0.1) 
}.play;
// moltiplica gli elementi di una lista per i loro indici
[1, 2, 5, 10, -3].collect { |elem, idx| elem * idx };
// funzione fattoriale
f = { |x| if(x == 0) { 1 } { f.(x-1) * x } };

Live coding modifica

Come linguaggio di programmazione dinamica versatile, SuperCollider può essere usato per live coding, ad esempio per performance che coinvolgono l'esecutore modificando ed eseguendo codice on-the-fly.[17] Tipi specifici di proxy pattern possono essere utilizzati come placeholder ("segnaposto") di alto livello per gli oggetti di sintesi, che possono essere interscambiati o modificati a runtime. Gli ambienti permettono la condivisione e la modifica di oggetti e la dichiarazione di processi all'interno del network.[18] Varie librerie supportano diversi tipi di astrazione e accesso agli oggetti sonori, ad esempio dewdrop_lib[19] permette la creazione live e la modifica di pseudo-classi e oggetti.

Note modifica

  1. ^ a b c d e f g h i j k Scott Wilson, David Cottle e Nick Collins, The SuperCollider Book, The MIT Press, 2011, ISBN 978-0-262-23269-2. URL consultato il 4 settembre 2013 (archiviato dall'url originale il 1º maggio 2011).
  2. ^ SourceForge.net: Files
  3. ^ J. McCartney, SuperCollider: A new real time synthesis language, in Proc. International Computer Music Conference (ICMC'96), 1996, pp. 257–258.
  4. ^ a b J. McCartney, Rethinking the computer music language: SuperCollider, Computer Music Journal, 26 (2002), pp. 61–68.
  5. ^ SuperCollider Download Page
  6. ^ BEASTmulch tools for multichannel audio Archiviato il 6 novembre 2009 in Internet Archive.
  7. ^ T. Blechmann, supernova, a multiprocessor-aware synthesis server for SuperCollider, Proceedings of the Linux Audio Conference, Utrecht 2010.
  8. ^ J. Rohrhuber, A. de Campo and Renate Wieser. Algorithms Today. Notes on Language Design for Just in Time Programming Archiviato il 28 luglio 2011 in Internet Archive.. In Proceedings of the International Computer Music Conference, Barcelona, 2005.
  9. ^ L'interfaccia con grafica vettoriale è gestita dalla classe Pen. Si possono trovare vari esempi su Audiovisuals with SC, blog di Fredrik Olofsson, 02.05.2009 (updated 11.05.2012)
  10. ^ H. H. Rutz, Rethinking the SuperCollider Client..., in Proceedings of SuperCollider Symposium, Berlin, 2010, CiteSeerX10.1.1.186.9817.
  11. ^ More examples on the SuperCollider wiki, su supercollider.sourceforge.net. URL consultato il 4 settembre 2013 (archiviato dall'url originale il 23 ottobre 2013).
  12. ^ Tiny Music System - Cylob Blog, 04.11.2009
  13. ^ SuperCollider Android project on GitHub
  14. ^ SuperCollider con emacs: scel, su supercollider.sourceforge.net. URL consultato il 4 settembre 2013 (archiviato dall'url originale il 5 giugno 2012).
  15. ^ Progetto Scate
  16. ^ Cyberpipe @ Slovenia & the future SuperCollider development Archiviato il 25 marzo 2015 in Internet Archive. - annuncio sulla mailing list degli utenti di SuperCollider, 22.02.2012
  17. ^ Collins, N., McLean, A., Rohrhuber, J. & Ward, A. (2003), Live Coding Techniques for Laptop Performance, Organised Sound 8(3): pp 321-30. DOI10.1017/S135577180300030X
  18. ^ J. Rohrhuber and A. de Campo. Waiting and uncertainty in computer music networks Archiviato il 14 marzo 2006 in Internet Archive.. In Proceedings of the International Computer Music Conference, Miami, 2004.
  19. ^ Una delle numerose librerie realizzate dagli utenti, conosciuta come "Quarks" e pubblicata su SuperCollider Quarks repository.

Voci correlate modifica

Altri progetti modifica

Collegamenti esterni modifica

  Portale Informatica: accedi alle voci di Wikipedia che trattano di informatica