t S C I R M A // Andrea Valle CIRMA Centro Interdipartimentale di Ricerca sulla Multimedialità e l Audiovisivo Università di Torino



Documenti analoghi
Il sofware è inoltre completato da una funzione di calendario che consente di impostare in modo semplice ed intuitivo i vari appuntamenti.

Tale attività non è descritta in questa dispensa

Definizione Parte del software che gestisce I programmi applicativi L interfaccia tra il calcolatore e i programmi applicativi Le funzionalità di base

SwingDialog. WiiNunchukGUI PriorityQueue RawPointer SuperCollider: ciò di cui si parla (

Mac Application Manager 1.3 (SOLO PER TIGER)

LRUNumberAllocator. JStethoscope. Tempo. GeoGraphSynth. Exception. Insets. PageLayout. SwingGUI. UGenInstr. FreqShift. PitchCollection.

Il Sistema Operativo (1)

MANUALE MOODLE STUDENTI. Accesso al Materiale Didattico

APPENDICE I Pratiche di tecnologie informatiche per la elaborazione della musica e del suono

12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP)

Corso di Informatica

Per chi ha la Virtual Machine: avviare Grass da terminale, andando su Applicazioni Accessori Terminale e scrivere grass

Istruzioni per l installazione del software per gli esami ICoNExam (Aggiornate al 15/01/2014)

Corso di Informatica (Programmazione) Lezione 6 (31 ottobre 2008)

FPf per Windows 3.1. Guida all uso

Istruzioni di installazione di IBM SPSS Modeler Text Analytics (licenza per sito)

Il web server Apache Lezione n. 3. Introduzione

Architetture Applicative

Sistema operativo. Sommario. Sistema operativo...1 Browser...1. Convenzioni adottate

Corso basi di dati Installazione e gestione di PWS

11/02/2015 MANUALE DI INSTALLAZIONE DELL APPLICAZIONE DESKTOP TELEMATICO VERSIONE 1.0

Corso Eclipse. Prerequisiti. 1 Introduzione

Manuale Utente Albo Pretorio GA

Corso di Informatica

Statistica 4038 (ver. 1.2)

istruzioni per l uso

Configuration Managment Configurare EC2 su AWS. Tutorial. Configuration Managment. Configurare il servizio EC2 su AWS. Pagina 1

Software di controllo per le denunce retributive e contributive individuali mensili - Ver.1.0

Protocollo di tracciamento e valutazione degli studenti dei corsi di italiano ICoNLingua A.A

Il controllo della visualizzazione

Guida all uso dell ambiente di sviluppo 1 integrato o IDE. JCreator LE 4.50

Automatizzare i compiti ripetitivi. I file batch. File batch (1) File batch (2) Visualizzazione (2) Visualizzazione

. A primi passi con microsoft a.ccepss SommarIo: i S 1. aprire e chiudere microsoft access Start (o avvio) l i b tutti i pro- grammi

UTILIZZATORI A VALLE: COME RENDERE NOTI GLI USI AI FORNITORI

Database 1 biblioteca universitaria. Testo del quesito

COS È UN LINGUAGGIO? LINGUAGGI DI ALTO LIVELLO LA NOZIONE DI LINGUAGGIO LINGUAGGIO & PROGRAMMA

Funzioni in C. Violetta Lonati

MANUALE UTENTE. In questo manuale verranno descritte tutte le sue funzioni. Il sistema OTRS è raggiungibile al seguente link:

E possibile modificare la lingua dei testi dell interfaccia utente, se in inglese o in italiano, dal menu [Tools

Soluzione dell esercizio del 2 Febbraio 2004

CERTIFICATI DIGITALI. Manuale Utente

EXPLOit Content Management Data Base per documenti SGML/XML

Che differenza c è tra una richiesta XML ed una domanda XML? (pag. 4)

Architettura del. Sintesi dei livelli di rete. Livelli di trasporto e inferiori (Livelli 1-4)

SOMMARIO... 3 INTRODUZIONE...

PORTALE CLIENTI Manuale utente

Capitolo 4 Pianificazione e Sviluppo di Web Part

Programmazione Orientata agli Oggetti in Linguaggio Java

Excel. A cura di Luigi Labonia. luigi.lab@libero.it

Manuale di KSystemLog. Nicolas Ternisien

Introduzione a Dev-C++

Guida utilizzo e-care Pagina 1 di 13 E-CARE GUIDA UTENTE INDICE 1. INTRODUZIONE PREREQUISITI TECNICI COME ACCEDERE A E-CARE...

lo PERSONALIZZARE LA FINESTRA DI WORD 2000

EW1051 Lettore di schede USB

Progettazione : Design Pattern Creazionali

Modulo. Programmiamo in Pascal. Unità didattiche COSA IMPAREREMO...

Gestione delle informazioni necessarie all attività di validazione degli studi di settore. Trasmissione degli esempi da valutare.

Andrea Valle. Introduzione a SuperCollider

IL SISTEMA OPERATIVO IL SISTEMA OPERATIVO INTERFACCE TESTUALI INTERFACCE TESTUALI FUNZIONI DEL SISTEMA OPERATIVO INTERFACCE GRAFICHE

Modulo 4: Ereditarietà, interfacce e clonazione

Visual basic base Lezione 01. L'ambiente di sviluppo

GHPPEditor è un software realizzato per produrre in modo rapido e guidato un part program per controlli numerici Heidenhain.

FOXWave Gestione gare ARDF IZ1FAL Secco Marco Sezione ARI BIELLA

Strumenti per la programmazione

Corso di PHP. Prerequisiti. 1 - Introduzione

Object Oriented Programming

POSTECERT POST CERTIFICATA GUIDA ALL USO DELLA WEBMAIL

Supporto On Line Allegato FAQ

MODELLO CLIENT/SERVER. Gianluca Daino Dipartimento di Ingegneria dell Informazione Università degli Studi di Siena

Linguaggi di programmazione

Programmazione II. Lezione 4. Daniele Sgandurra 30/09/2011.

Manuale Amministratore Legalmail Enterprise. Manuale ad uso degli Amministratori del Servizio Legalmail Enterprise

Modulo 2 Uso del computer e gestione dei file

Portale tirocini. Manuale utente Per la gestione del Progetto Formativo

PowerPoint 2007 Le funzioni

Manuale Utente Amministrazione Trasparente GA

ShellExcel. Una domanda contiene i riferimenti (#A, #B, #C) alle celle che contengono i dati numerici del

START Easy GO! Il gestionale sempre in tasca! Procedura di aggiornamento. Documentazione utente Pagina 1 di 18

Modello per la compilazione della scheda progetto SK_3.1.xls (da utilizzarsi per la presentazione di progetti di attività formative)

Il SOFTWARE DI BASE (o SOFTWARE DI SISTEMA)

Uso di JUnit. Fondamenti di informatica Oggetti e Java. JUnit. Luca Cabibbo. ottobre 2012

Capitolo 3. L applicazione Java Diagrammi ER. 3.1 La finestra iniziale, il menu e la barra pulsanti

Guida Compilazione Piani di Studio on-line

GUIDA AL SITO DELLE RIPARAZIONI BARWARE SOMMARIO

Database. Si ringrazia Marco Bertini per le slides

Per scrivere una procedura che non deve restituire nessun valore e deve solo contenere le informazioni per le modalità delle porte e controlli

1) GESTIONE DELLE POSTAZIONI REMOTE

Preparazione di una immagine di Windows XP per la distribuzione

Manuale di Aggiornamento BOLLETTINO. Rel H4. DATALOG Soluzioni Integrate a 32 Bit

STAMPA DI UNA PAGINA SEMPLICE

Organizzazione degli archivi

Lezione 8. La macchina universale

EXCEL PER WINDOWS95. sfruttare le potenzialità di calcolo dei personal computer. Essi si basano su un area di lavoro, detta foglio di lavoro,

Il database management system Access

MANUALE UTENTE Fiscali Free

Avvio di Internet ed esplorazione di pagine Web.

Introduzione alla programmazione in C

Istruzioni per installare EpiData e i files dati ad uso di NetAudit

WoWords. Guida all uso: creare ed utilizzare le frasi. In questa guida è descritto come creare ed utilizzare le frasi nel software WoWords.

MANUALE SOFTWARE F24 ISTRUZIONI PER L UTENTE

Transcript:

CIRMA Centro Interdipartimentale di Ricerca sulla Multimedialità e l Audiovisivo Università di Torino t S C I R M A h e u p e r o l l i d e r t a l i a n a n u a l (--> DRAFT: 17 maggio 2007) // Andrea Valle 1

Quest opera è stata rilasciata sotto la licenza Creative Commons Attribuzione-Non commerciale-condividi allo stesso modo 2.5 Italia. Per leggere una copia della licenza visita il sito web http://creativecommons.org/licenses/bync-sa/2.5/it/ o spedisci una lettera a Creative Commons, 171 Second Street, Suite 300, San Francisco, California, 94105, USA. Questo lavoro utilizza molti software open source SuperCollider: ciò di cui si parla (http://supercollider.sourceforge.net/) Praat: analisi e visualizzazione dei segnali audio (http://www.praat.org/) Python: generazione del codice TEX colorato a partire da quello in SuperCollider (http://www.python.org/) TEX: tipografia automatica (http://www.ctan.org/) ConTEXt: preparazione globale del documento basata su TEX (http://www.pragma-ade.nl/) PyX: visualizzazione dei segnali audio (cap. 5) (http://pyx.sourceforge.net/) GraphViz: generazione dei grafi che rappresentano le relazioni di ereditarietà tra classi in SuperCollider, diagrammi di flusso per le unità audio (http://www.graphviz.org/) TeXShop: tutto l editing basato su TEX (http://www.uoregon.edu/~koch/texshop/) 2

1 Introduzione 6 1.1 Ciò di cui si parla: SuperCollider 6 1.2 Obiettivi 7 1.3 Fonti 7 1.4 Convenzioni grafiche 8 2 SuperCollider grado 0 9 2.1 Che cos è SuperCollider 9 2.2 Alcuni buoni motivi (a scelta) per usare SC 10 2.3 Disponibilità rispetto ai sistemi operativi 12 2.4 Dove reperire SuperCollider 12 2.5 SwingOSC 13 2.6 Altri siti di rilievo 13 2.7 Installazione (MacOSX e Win32) 14 2.8 Informazioni di base sull ambiente di sviluppo 14 2.9 Salvare ed aprire documenti, help file compresi 17 3 Object Oriented Programming in SC: fondamenti 18 3.1 Minima objectalia 18 3.2 Oggetti in SC 19 3.3 Metodi e messaggi 25 3.4 I metodi di tipo post e dump 31 3.5 Numeri 33 4 Sintassi: elementi fondamentali 37 4.1 (Parentesi) 37 4.2 // Commenti (/*di diverso tipo*/) 37 4.3 "Stringhe" 38 4.4 Variabili 39 4.5 Simboli 40 4.6 Espressioni ; 40 4.7 Errori 41 4.8 {Funzioni} 42 4.9 Classi, messaggi/metodi e keyword 46 4.10 Esempio 47 4.10.1 Introduzione 48 4.10.2 Creazione degli elementi GUI 49 4.10.3 Interazione 49 4.10.4 Per finire 50 4.11 Controlli di flusso 51 4.12 Ancora un esempio GUI 54 3

4.12.1 La funzione di generazione dei valori colore 54 4.12.2 Modularizzare la GUI 56 4.12.3 Controllo delle azioni 57 5 Sintesi, I: fondamenti 64 5.1 Poche centinaia di parole d acustica 66 5.2 Algoritmi di sintesi 68 5.3 Nota sul metodo play 76 5.4 Altri segnali e altri algoritmi 76 5.5 Funzione valore assoluto e funzione quadratica 85 5.6 Ancora sull elaborazione di segnali 86 5.7 Segnali di controllo 91 5.8 Conclusioni 98 5.9 Nota sulla rappresentazione dei segnali 99 6 L architettura e il server 100 6.1 L architettura 100 6.2 Esempi 103 6.2.1 SwingOSC 103 6.2.2 Graphista! 105 6.3 Il client sclang 106 6.4 Un impianto chimico per la produzione di liquidi e un server audio in tempo reale 106 6.5 Appetizer: un esempio si sintesi e controllo in tempo reale 113 6.5.1 Una synthdef 114 6.5.2 UGen e UGen-Graph 116 6.5.3 Un synth 120 6.5.4 GUI e controller 120 7 Controlli e canali 122 7.1 Inviluppi 122 7.2 Generalizzazione degli inviluppi 126 7.3 Sinusoidi & sinusoidi 132 7.4 Segnali pseudo-casuali 145 7.5 Espansione e riduzione multicanale 149 8 Sintesi, II: tecniche di generazione del segnale audio 158 8.1 Oscillatori e tabelle 158 8.2 Campionamento 165 8.2.1 Campionamento semplice 165 8.2.2 Resampling e interpolazione 167 4

8.2.3 Looping 173 8.3 Segnali in entrata 175 8.4 Sintesi additiva 179 8.5 Sintesi sottrattiva 186 8.6 Analisi e risintesi 192 8.7 Modulazione 197 8.7.1 Modulazione ad anello e d ampiezza 199 8.7.2 Modulazione di frequenza 206 8.7.3 C:M ratio 208 8.7.4 Waveshaping 211 9 Suono organizzato: (minimal) scheduling in SC 215 9.1 Routines 215 9.2 Orologi 216 5

1 Introduzione 1.1 Ciò di cui si parla: SuperCollider SuperCollider (SC) è un pacchetto software per la sintesi e il controllo dell audio in tempo reale 1. Attualmente rappresenta lo stato dell arte nell ambito della programmazione audio: non c è altro software disponibile che sia insieme così potente, efficiente, flessibile. L unico punto a sfavore di SC è che non è intuitivo : richiede competenze relative alla programmazione, alla sintesi del segnale audio, alla composizione musicale (nel senso più lato, aperto e sperimentale del termine). Ci si potrebbe chiedere d altra parte in che senso un violino, una chitarra elettrica, una batteria presentino un interfaccia utente intuitiva : non c è forse bisogno di un duro lavoro per cavare fuori una nota da un violino o per tenere un tempo suonando una batteria? Il disagio che il neofita prova con SC dipende però forse da un altro fatto: SC è preciso ed efficiente ma è puntiglioso ed ha un forte senso della responsabilità. Ciò che spetta al programmatore, spetta a lui solo: SC non lo aiuterà in caso di sue mancanze. Per chiudere il parallelo, SC è come uno Stradivari per il violinista: dipende da quest ultimo farlo suonare come quello sa fare. Non è come un carillon in cui basta caricare la molla, poiché tutta la competenza relativa alla generazione e al controllo del suono è in fondo già ascritta al meccanismo. Anche se a dire il vero, come si vedrà, SC può tramutare un carillon in uno Stradivari. 1 Si vedrà più avanti che cosa indica specificamente pacchetto software 1.2 6

1.2 Obiettivi L obiettivo di quanto segue è duplice: 1. introdurre alcuni aspetti fondamentali relativi a quell ambito che viene usualmente indicato, con una definizione a volte imprecisa e a volte impropria, computer music 2. fornire una breve panoramica ed insieme un introduzione a SuperCollider in italiano. L ipotesi di partenza (e indipendentemente di risultati) è quella di far interagire i due ambiti, attraverso una reciproca specificazione 1.3 Fonti Il materiale presentato è, in qualche misura, originale. La parte relativa alla sintesi riprende alcune parti di Audio e multimedia 2 e vi include parti di materiali provenienti dai corsi degli anni precedenti. Trattandosi di materiale introduttivo, è chiaro che il testo si affida saldamente al suo intertesto costituito dai molti testi analoghi, più complessi e più completi, che lo precedono. Questo vale a maggior ragione per la parte dedicata a SuperCollider. Non è una traduzione in senso stretto di scritti già esistenti: tra l altro, attualmente, non esiste un libro di riferimento per SuperCollider 3. E tuttavia è chiaro che il testo scritto è fittamente intessuto di prestiti provenienti dagli help file, dai tutorial di James McCartney, Mark Polishook, Scott Wilson, dal testo di David Cottle, dalle osservazioni preziosi fornite dalla SuperCollider mailing list, dalle informazioni accessibili attraverso il SuperCollider wiki. La lettura di queste fonti non è in nessun modo resa superflua dal testo seguente, il quale ha invece semplicemente un ruolo propedeutico 2 Lombardo, V. e Valle, A., Milano, Apogeo 2005, 2ed. 3 È in fase di definizione il progetto di un SuperCollider Book, sull esempio del Csound Book, potenzialmente per gli stessi tipi della MIT press. 1.4 7

rispetto alle stesse, perché quantomeno evita al lettore italiano la difficoltà supplementare della lingua straniera. 1.4 Convenzioni grafiche Il manuale prevede tre distinzioni: 1. testo: in carattere nero normale, senza particolarità, esattamente come quanto scritto qui 2. codice: è scritto in carattere typewriter, utilizza lo schema colori della versione MacOSX per la sintassi, è riquadrato in blu e le righe sono numerate. Al di sotto di ogni esempio è presente un marcatore interattivo. Esso permette di accedere al file sorgente dell esempio che è incluso nel pdf, e di aprirlo direttamente con l applicazione SuperCollider. Per garantire la funzione è bene usare Acrobat Reader. Alla prima apertura Reader richiede di impostare il suo comportamento nei confronti dell allegato 1 // ad esempio 2 "a caso".postln ; 3. post-window: è scritto in nero; con carattere typewriter, e riporta una parte di sessione con l interprete SuperCollider. È riquadrato in arancio e le righe sono numerate. 1 "così".postln 1.4 8

2 SuperCollider grado 0 2.1 Che cos è SuperCollider SuperCollider (SC) è un pacchetto software per la sintesi e il controllo dell audio in tempo reale. La definizione di pacchetto software tuttavia si rivela piuttosto vaga. Per arrivare ad una definizione più analiticamente ed esauriente, è meglio partire dalla definizione di SC che appare sulla homepage di Sourceforge 4 : SuperCollider is a state of the art, realtime sound synthesis server as well as an interpreted Object Oriented language which is based on Smalltalk but with C language family syntax. The language functions as a network client to the sound synthesis server. (http://supercollider.sourceforge.net/) Più analiticamente: 1. a state of the art: attualmente SC rappresenta lo stato dell arte nell ambito della programmazione audio: non c è altro software disponibile che sia insieme così potente, efficiente, flessibile (e ormai anche portabile). 2. realtime sound synthesis: SC è ottimizzato per la sintesi del segnale audio in tempo reale. Questo lo rende ideale per un utilizzo strumentale (performance live) così come per la realizzazioni di 4 Il sito è in fase di ricostruzione, e può darsi che una simile formulazione venga rimossa a breve. Ma è utile lo stesso. 2.1 9

installazioni/eventi. È senz altro possibile utilizzare SC non in tempo reale per generare materiale audio, ma in un certo senso è meno immediato che non utilizzarlo in tempo reale. 3. server: SC è un fornitore di servizi audio. In altre parole, SC fornisce audio su richiesta: chi richiede audio a SC è un suo cliente (client). 4. as well as: SC è anche un altra cosa del tutto diversa. 5. an interpreted Object Oriented language which is based on Smalltalk but with C language family syntax: SC è infatti anche un linguaggio di programmazione, tipologicamente vicino a Smalltalk, con alcuni aspetti che ricordano il linguaggio C. La frase with C language family syntax non è chiarissima. A scanso di equivoci: SC è tipologicamente un parente stretto di Smalltalk, con alcuni aspetti (pochi, fortunatamente...) che ricordano il C. Il codice del linguaggio SC, per essere operativo ( per fare qualcosa ), deve essere interpretato da un interprete. SC è anche l interprete del linguaggio SC. 6. The language functions as a network client to the sound synthesis server: che relazione c è tra 3 e 5? L interprete del linguaggio SC è anche un cliente che chiede servizi a SC fornitore di servizi audio attraverso una rete. Riassumendo: quando si parla di SC si possono indicare (generando una certa confusione) cinque cose diverse. Queste cose sono: 1. un server ( un fornitore di servizi) audio 2. un linguaggio di programmazione per l audio 3. l interprete ( il programma interprete) per il linguaggio 4. l interprete in quanto cliente del server audio 5. il programma ( l applicazione complessiva) che comprende tutte le componenti 1-4 La situazione è schematizzata in 2.1. L applicazione SC prevede due parti: una è il server audio (denominato scsynth), l altra è l interprete per il linguaggio (denominato sclang) che, oltre a interpretare il linguaggio SuperCollider, svolge il ruolo di client rispetto a scsynth. Può sembrare complicato. In effetti lo è. Installare SC vuol dire perciò installare un applicazione complessiva che comprende un server audio e un interprete del linguaggio/client del primo. Si vedrà in seguito meglio che cosa indicano i termini: per ora si tenga a mente che esistono due programmi distinti, e che quando si installa SC si ottengono due programmi al costo di 1 (il costo si calcola così: 2 0 = 0. Come recita un madrigale di Cipriano de Rore, mia benigna fortuna ). 2.2 Alcuni buoni motivi (a scelta) per usare SC 2.2 10

SuperCollider application 5 Client 4 Server 3 Interprete Linguaggio 2 1 sclang scsynth Fig. 2.1 Struttura di SC. Alcune applicazioni di SC, in ordine sparso: costruire un proprio sistema per fare musica live, interfaccia grafica compresa http://www.dewdrop-world.net/sc3/index.php fare musica dance (nel senso più vago del termine) http://crucial-systems.com/supercollider allestire un dj set http://www.durftal.com/music/cylob/bf/ fare composizione elettroacustica (nel senso più vago del termine) http://www.bridgerecords.com/pages/catalog/9210.htm sonificare dati http://www.sonification.de/ controllare un complesso sistema di altoparlanti (> 170) dal vivo http://www.woutersnoei.nl/ ricostruire in audio binaurale il Poème électronique (ovvero: la diffusione di 3 tracce in movimento su 350 altoparlanti) http://www.edu.vrmmp.it/vep/ integrare audio e video dal vivo http://www.klippav.org/ praticare live coding http://www.toplap.org/ 2.3 11

2.3 Disponibilità rispetto ai sistemi operativi SuperCollider è stato originariamente sviluppato da James McCartney su piattaforma Macintosh. In particolare la versione 2 era fortemente integrata con il sistema operativo Mac OS9. SuperCollider 3 (che è insieme molto simile e molto diverso da SC 2 5 ) è stato sviluppato per il sistema operativo Mac OSX ed è ora un software open source, sviluppato da una consistente comunità di programmatori a partire dal lavoro di James McCartney. La comunità di sviluppatori ha così effettuato il porting anche per le piattaforme Windows e Linux 6. Queste ultime due versioni di SC differiscono principalmente per difetto rispetto alla versione per OSX, nel senso che alcune funzionalità presenti in quest ultima non sono state portate nelle altre due. Tuttavia, si può dire forse che il 90% del programma SuperCollider nella versione MacOSX sia disponibile sulle altre piattaforme 7. 2.4 Dove reperire SuperCollider SuperCollider può essere scaricato da Sourceforge, in particolare all indirizzo http://sourceforge.net/projects/supercollider La versione per Windows è stata sviluppata allo IEM di Graz nell ambito del progetto Sonenvir (http://sonenvir.at/) ed è accessibile all indirizzo http://sonenvir.at/downloads/sc3/sc3-win/ Esistono poi altre versioni che comprendono librerie esterne o che sono state compilate per piattaforme specifiche (and esempio sistemi Mac OSX meno recenti). Il sito di SC su Sourceforge è in fase di ridefinizione e presto fornirà chiare informazioni su tutti le versioni disponibili. 5 6 7 Nella documentazione di SC sono ancora numerosi i riferimenti alla versione 2. Sebbene di fondamentale importanza per gli utenti che passino da una versione all altra, rischiano però di confondere chi si avvicina per la prima volta a SC3 In particolare, Stefan Kersten è il principale autore della versione Linux, mentre la versione Windows è stata implementata da Christopher Frauenberger. I riferimenti, scarsi, a piattaforme specifiche in questo testo si riferiscono alle versioni MacOSX e Win32, non a Linux. 2.5 12

2.5 SwingOSC La principale differenza tra le versioni per i diversi sistemi operativi concerne le classi per lo sviluppo di interfacce grafiche (in SC è possibile programmare la GUI così come si programma la generazione dell audio), rispetto alle quali ogni piattaforma ha le sue specificità. Recententente si è reso disponibile il server grafico SwingOSC http://www.sciss.de/swingosc/ SwingOSC è un server grafico del tutto autonomo rispetto a SC (può essere utilizzato anche da altre applicazioni), ma, ed è quanto qui interessa, può essere utilizzato da dentro SC (in altre parole l utente può praticamente dimenticarsi dell esistenza del meccanismo client/server). SwingOSC è scritto in Java e per funzionare richiede che sia installata il Java Runtime Environment. Per controllare lo stato della propria macchina e installare la versione più recente di Java si può visitare il sito dedicato: http://java.com/en/download/installed.jsp SwingOSC permette la costruzione di interfacce grafiche di qualità superiore rispetto a quelle originariamente sviluppate per MacOSX. È decisamente consigliabile sviluppare interfacce grafiche con SwingOSC: essendo disponibile anche sulle altre piattaforme, anche la parte di codice relativo alla programmazione di GUI è di fatto portabile fra le diverse piattaforme (Linux incluso). Il problema della scelta si può porre al limite in MacOSX, dove è possibile scegliere tra il sistema GUI Cocoa e quello SwingOSC: la versione per Windows (detta PsyCollider ) integra in forma predefinita SwingOSC, che è l unica interfaccia grafica disponibile. Se si guarda la Post Window durante l avviamente di PsyCollider si potrà notare come il server SwingOSC venga avviato automaticamente (booting java -jar SwingOSC... etc). 2.6 Altri siti di rilievo Il sito di James McCartney ha un valore eminentemente storico: http://www.audiosynth.com/ Il SC wiki è il punto di raccolta principale per tutto ciò che concerne SC: http://swiki.hfbk-hamburg.de:8888/musictechnology/6 La mailing list (a partire dagli archivi) è un altra risorsa fondamentale: 2.6 13

http://www.create.ucsb.edu/mailman/listinfo/sc-users L interfaccia web via Nabble è forse di più agevole consultazione: http://www.nabble.com/supercollider---user-f535.html 2.7 Installazione (MacOSX e Win32) Una volta scaricato i file binari, l installazione in sé è un processo banale. Mac OSX: l apertura del file.dmg permette di montare un disco che contiene l applicazione SuperCollider. Dopo averla copiata (tipicamente ma non necessariamente) nella cartella Applicazioni è sufficiente un doppio click per far partire SC. nota: esistono versioni compilate anche per versioni ormai superate del sistema operativo (10.2) così come per processori più datati (G3). Per ottenerle si può consultare la mailing list. Windows: le istruzioni per Windows sono reperibili presso http://sonenvir.at/downloads/sc3/sc3-win/ Dopo aver decompresso il file, è necessario lanciare l installer vcrrt.msi, quindi è possibile eseguire Psycollider.exe 8. nota 1: il porting su Win32 richiede 2000 o XP, con service pack 3. nota 2: esiste un curioso bug, attualmente irrisolto, per cui in rarissimi casi (l Aula 30 di Palazzo Nuovo all Università di Torino, ad esempio...) l eseguibile sembra non riuscire a risolvere un problema di dipendenze e l installazione fallisce. La soluzione è quella di installare la versione da SVN che comprende il codice py. Requisiti sono Python 2.5 e wxpython (package per la generazione dell interfaccia grafica del programma). 2.8 Informazioni di base sull ambiente di sviluppo 8 Il nome deriva da Py + SCollider (con metatesi), poiché l implementazione utilizza il linguaggio Python. A differenza di quanto avveniva inizialmente, l utente finale non è tenuto né conoscere né ad avere Python installato sulla propria macchina per potre eseguire Psycollider.exe. Python è incluso nei file binari ed è utilizzato internamente da Psycollider. 2.8 14

SC funziona in tempo reale ed in forma interattiva attraverso un interfaccia testuale: tutte le comunicazioni tra utente e programma avvengono attraverso testo. Si osservino le figure 2.2 e 2.3. Eseguendo il programma si apre appunto un editor di testo. In particolare si apre la Post Window, la finestra che visualizza i messaggi che SC indirizza all utente (2.2 e 2.3, 1). In Windows, la finestra SC Log stampa gli stessi messaggi di un terminal aperto in parallelo (2.3, 4 all interno però dell applicazione PsyCollider, 2.3, 5). Entrando in esecuzione, SC effettua alcuni passaggi di inizializzazione (di cui si discuterà più avanti), il cui risultato viene scritto sulla Post Window. Nel caso di PsyCollider, viene immediatamente avviato il server audio (si vede bene sul terminal, 2.3, booting 57110, 6): si notino i messaggi relativi al rilevamento della scheda audio (Device options:, Booting with:). L avviamento del server audio avviene invece per mano dell utente in OSX, attraverso due interfacce grafiche gemelle: in particolare, sono disponibili due server distinti, local e internal 9 (2.2, 4 e 5). In Windows viene altresì avviato il server grafico SwingOSC (2.3, 7, booting java -jar SwingOSC... etc). È possibile utilizzare la Post Window per scrivere il proprio codice (almeno in fase di test) ma è sempre meglio creare una nuova finestra (2.2 e 2.3, 2). A questo punto, l utente immette del codice e chiede all interprete di valutarlo. Ad esempio, il codice "Hello World".postln richiede di stampare sullo schermo la stringa "Hello World". Si noti la sintassi colorata che distingue tra la stringa e il metodo.postln; 10. Se l interpretazione va a buon fine, SC risponderà con un certo comportamento che dipende dal codice immesso: in questo caso, stampando sulla Post Window la stringa "Hello World" (2.2 e 2.3, 3). Altrimenti segnalerà l errore attraverso la Post Window. L editor di testo (sia in OSX che in Windows) prevede un insieme di caratteristiche tipiche di ogni editor, ed è inutile soffermarvicisi. Altre funzioni sono utili ad un utente più avanzato, ed esulano da quanto qui previsto. Alcune indicazioni minimali: MacOSX Valutazione del codice: selezionare il codice e premere enter (non return). Se il codice consiste in una sola riga, è sufficiente posizionare il cursore in un punto della riga e premere enter. Arresto dell audio: apple +. Aiuto: apple +?. Se la combinazione è premuta contestualmente alla selezione di codice Windows SC, si apre il file di aiuto correlato (laddove esistente). Pulizia della Post Window: apple + shift + k 9 10 Si veda dopo. Gli schemi colori per le due piattaforme sono differenti (chissà perché). Qui si segue quella originale di OSX 2.8 15

1 3 2 4 5 Fig. 2.2 SC in OSX. 4 5 6 1 7 2 3 Fig. 2.3 SC in Windows (PsyCollider). Valutazione del codice: selezionare il codice e premere Ctrl + enter (invio). Se il codice consiste in una sola riga, è sufficiente posizionare il cursore in un punto della riga e premere Ctrl + enter (invio). Arresto dell audio: Alt +. Aiuto: F1. Se la combinazione è premuta contestualmente alla selezione di codice SC, si apre il file di aiuto correlato (laddove evistente). Pulizia della Post Window: Alt + P 2.9 16

2.9 Salvare ed aprire documenti, help file compresi Il contenuto della finestra può essere salvato su file e riaperto in un altra sessione di lavoro, per essere modificato o semplicemente per essere rieseguito. Una caratterstica importante di SC è che gli help files contengono codice valido che può essere valutato. Quando si apre un file di help è allora possibile sperimentare con gli esempi contenuti per capire esattamente il funzionamento descrittovi. Rispetto al formato dei files predefinito MacOSX e Windows prevedono alcune differenze che si riflettono sugli help files: MacOSX: il formato file prescelto è una versione speciale del formato di testo RTF. In MacOSX gli help file sono in formato RTF, e sono documenti validi per SC: in altre parole, è possibile valutare il codice che vi è contenuto. In ogni caso è perfettamente possibile utilizzare il formato ASCII (cioè: testo semplice). Windows: il formato file è ASCII (si può aprirlo con Notepad/Blocconote), e spetta all utente scegliere l estensione (.rtf è una scelta sensata). Il formato degli help files è hmtl, che non è un formato valido per SC. Quando si vuole eseguire il codice che vi è contenuto è necessario convertire il formato HTML in codice selezionando HTML To Code Window dal menu File (ctrl+t). Si apre una finestra in cui il formato HTML viene convertito in ASCII (la nuova finestra è una finestra di codice, la sintassi è colorata): a questo punto, è possibile valutarlo. 2.9 17

3 Object Oriented Programming in SC: fondamenti 3.1 Minima objectalia Nella programmazione orientata agli oggetti si assume che l utente, per programmare il comportamento di un calcolatore, manipoli entità dotate di proprietà e di capacità. Il termine, volutamente generico, per indicare queste entità è oggetti, mentre tipicamente le proprietà sono pensate come attributi degli oggetti stessi e le capacità come metodi che gli oggetti possono adottare per compiere delle operazioni. Per poter essere riconosciute dal linguaggio le entità devono appartenere ad un insieme finito di tipi: un oggetto è del tipo A, l altro del tipo B e così via. I tipi vengono chiamati classi in OOP. Un oggetto è dunque una particolare istanza di una classe: la classe può essere pensata come il tipo astratto, ma anche come lo stampo da cui si fabbricano le istanza. Da un unico conio (la classe) si stampa un un numero indefinito di monete uguali (gli oggetti). È nella classe che si definiscono i metodi di cui tutti gli oggetti di quel tipo saranno dotati. Una classe descrive anche il modo in cui creare un oggetto a partire dalla classe. Le classi sono organizzate gerarchicamente: ogni classe può derivare da un altra classe e ogni classe può avere delle classi derivate. Questo principio prende il nome di ereditarietà. Ad esempio un conio è una ulteriore specificazione di un più generico stampo : lo stampo è la sopraclasse del conio, e il conio è una sottoclasse dello stampo. Un sigillo (per la ceralacca) è un altro stampo, ma di un tipo completamente diverso dal conio: il sigillo è una sottoclasse dello stampo, da cui eredita alcuni aspetti che condivide con il conio (la capacità di impressione), ma da cui si differenza per altri (prevede un impugnatura manuale, mentre il conio viene battuto a martello). L ereditarietà va pensata in termini genetici: i caratteri del padre sono presenti (come patrimonio genetico, appunto) nei figli. 3.1 18

[Lavori in corso: mettere figura] Per chiedere ad un oggetto di fare qualcosa è necessario inviargli un messaggio. Ad ogni messaggio inviato ad un oggetto corrisponde un metodo che l oggetto deve conoscere per potervi rispondere. L oggetto che riceve il messaggio è il ricevente di quel messaggio. Riassumendo: oggetto e metodo concernono la definizione dell oggetto dall interno messaggio e ricevente concernono la comunicazione con l oggetto dall esterno [Lavori in corso: mettere figura] L insieme dei messaggi a cui un oggetto può rispondere prende il nome di interfaccia : ed è un interfaccia in senso proprio, perché è ciò che l oggetto rende disponibile all utente per l interazione, dove l utente può essere anche un altro oggetto. Nella maggior parte dei linguaggi ad oggetti, la sintassi tipica per passare un messaggio ad un oggetto utilizza il punto (.) e prende la forma oggetto.messaggio. La relazione tra oggetto e messaggio va pensata come una coppia vocativo/imperativi: oggetto, fai qualcosa!. Ad esempio, Conio.imprimi. 3.2 Oggetti in SC SuperCollider (qui intendendo: sclang) è un linguaggio orientato agli oggetti. Lo è per di più in termini molto puri, poiché ha come suo modello storico, e come parente tipologico assai prossimo, il linguaggio Smalltalk. In Smalltalk, come in SC, letteralmente ogni entità possibile è un oggetto. Questa radicalità può essere spiazzante inzialmente, ma è un punto di forza poiché garantisce che tutte (proprio tutte) le entità potranno essere controllate dall utente secondo un unico principio: tutte avranno attributi e metodi, a tutte sarà possibile inviare dei messaggi poiché presenteranno all utente una certa interfaccia. Si prenda il caso delle strutture dati: SC possiede una grande ricchezza di strutture dati, cioè di classi che funzionano da contenitori di altri oggetti, ognuna dotati di particolari capacità e specializzata per certi tipi di oggetti. Ad esempio un array è un contenitore ordinato di oggetti. Si scriva Array. Se si richiama la colorazione della sintassi, si nota come venga applicato il blu, colore che contraddistingue le classi (oltre che le parole riservate var, arg, this e alcune altre). SC sa che Array è una classe perché la prima lettera è maiuscola: tutto ciò che inizia con la maiuscola per SC indica una classe. Se si esegue il codice, SC restuituisce (stampa sullo schermo) la classe stessa. Se si richiama l help file, si nota come immediatamente venga indicata la sopraclasse, Superclass: ArrayedCollection. L help file fornisce alcune indicazioni sui metodi disponibili per gli oggetti di tipo Array. Il codice: 3.2 19

z = Array.new; costruisce un nuovo array vuoto attraverso il messaggio new invocato sulla classe Array. Tipicamente un messaggio viene inviato ad un istanza particolare e non ad una classe. Ma prima di poterlo fare, è necessario avere un istanza a cui inviare un messaggio. Al messaggio new rispondono allora tutte le classi restituendo una loro istanza. Il metodo new è il costruttore della classe: il metodo cioè che istanzia un oggetto a partire dalla classe. Possono esserci molti metodi costruttori, che restituiscono un oggetto secondo modalità specifiche: sono tutto metodi della classe perché, invocati sulla classe, restituiscono un oggetto. Uno di essi è il messaggio newclear, che prevede anche una parte tra parentesi tonde: z = Array.newClear(12); Nell esempio le parentesi contengono una lista di argomenti (uno solo, in questo caso), che specificano ulteriormente il messaggio newclear, ovvero oggetto, fai qualcosa (così)!. In particolare newclear(12) prevede un argomento (12) che indica che l array dovrà contenere al massimo 12 posti. È possibile indicare esplicitamente l argomento: oggetto, fai qualcosa (nel modo: così)!. Ogni argomento ha un nome specifico, la sua keyword: nel caso di newclear è indexedsize, che indica il numero di posti contenuti nel nuovo array. Il codice: z = Array.newClear(indexedSize:12); è identico al precedente ma esplicita la keyword dell argomento. Infine, z = indica che l array verrà assegnato alla variabile z. Si noti che la lettera utilizzata è minuscola: se si scrivesse Z = SC intepreterebbe Z come una classe (inesistente) 11 e solleverebbe un errore. Adesso z rappresenta un array vuoto di capienza 112: è un istanza della classe Array. Si può chiedere a z di comunicare la classe a cui appartiene invocando il metodo class: 1 z.class 2 Array Il metodo class (1) restituisce la classe di z: Array (2). Quando si usano degli array molto spesso si è insoddisfatti dei metodi elencati nell help file: sembra che manchino molti metodi intuitivamente utili. È molto difficile che sia veramente così: molto spesso il metodo cercato c è ma è definito nella sopraclasse ed ereditato dalle classi figli. A partire da Array si può navigare la struttura degli help file risalendo a ArrayedCollection, SequenceableCollection, Collection: sono tutte sopraclassi (di tipo sempre più astratto) che definiscono metodi che le sottoclassi possono ereditare. Se si prosegue si arriva a Object. 11 La Z verrebbe colorata di blu. 3.2 20