SuperCollider

Da Wikipedia, l'enciclopedia libera.
SuperCollider
Autore James McCartney
Data di origine 1996
Ultima versione 3.6.5
Utilizzo sintesi audio in tempo reale e composizione algoritmica
Paradigmi Orientato agli oggetti
Tipizzazione Dinamica
Estensioni comuni scd
Influenzato da Smalltalk, C[1]
Implementazione di riferimento
Sistema operativo FreeBSD,[2] Linux, Mac OS X, Windows
Licenza GNU General Public License
Sito web http://supercollider.sourceforge.net

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].

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]

Rilasciato sotto licenza GNU nel 2002, SuperCollider è un software libero. La versione più recente (3.6.5) è stata rilasciata nell'Aprile 2013.[5]

Architettura[modifica | modifica wikitesto]

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 | modifica wikitesto]

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 | modifica wikitesto]

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 | modifica wikitesto]

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 | modifica wikitesto]

Client[modifica | modifica wikitesto]

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 mensionati 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 | modifica wikitesto]

SuperCollider può essere eseguito sotto Mac OS X, Linux, Windows e FreeBSD. Tuttavia, la versione per Windows è rimasta indietro rispetto alle altre, poiché la maggior parte dello sviluppo si è svolta su Mac and 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 | modifica wikitesto]

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 | modifica wikitesto]

// 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 | modifica wikitesto]

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 | modifica wikitesto]

  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.
  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
  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. 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..., Berlin, 2010, CiteSeerX10.1.1.186.9817.
  11. ^ More examples on the SuperCollider wiki
  12. ^ Tiny Music System - Cylob Blog, 04.11.2009
  13. ^ SuperCollider Android project on GitHub
  14. ^ SuperCollider con emacs: scel
  15. ^ Progetto Scate
  16. ^ Cyberpipe @ Slovenia & the future SuperCollider development - 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. DOI: 10.1017/S135577180300030X
  18. ^ J. Rohrhuber and A. de Campo. Waiting and uncertainty in computer music networks. 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 | modifica wikitesto]

Collegamenti esterni[modifica | modifica wikitesto]

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