UNIVERSITA’ DEGLI STUDI DI BOLOGNA FACOLTA’ DI LETTERE E FILOSOFIA Corso di Laurea in Discipline delle Arti, della Musica e dello Spettacolo
Genesi della forma nella composizione musicale assistita dal computer: modelli teorici e prospettive poietiche nell’ambiente di programmazione OpenMusic
Tesi di laurea in ACUSTICA MUSICALE Relatore
Presentata da
Prof. Gianni ZANARINI
Fabio SELVAFIORITA
SESSIONE III Anno Accademico 2004-2005
PREMESSA
Prima Parte
CAPITOLO 1 - INTRODUZIONE 1.1 Struttura della dissertazione 1.1.1 Introduzione ad OpenMusic 1.1.2 Librerie di OpenMusic 1.2 Una definizione di Composizione Musicale Assistita dal Computer 1.2.1 Le Modalità dell’Assistenza tra Oggetti e Processi compositivi 1.3 Tecnologia informatica, tecnica e composizione musicale 1.3.1 La tecnologia come tecnica 1.3.1.1 L’informatica 1.3.1.1.1 Il paradigma algoritmico 1.3.1.1.2 I linguaggi di programmazione 1.3.1.1.2.1 Componenti software e interazione 1.3.2 La composizione musicale e le tecniche dell’artificiale manuale e automatizzato 1.3.2.1 Prospettive di un’estetica computazionale per la composizione musicale Simulazione del modello e livelli di interazione Modelli Interazione Creazione e generazione, tra etica ed epistemologia Complessità e strutture 1.4 La composizione musicale assistita tra informatica musicale e musicologia computazionale 1.4.1 La nascita dell’informatica musicale 1.4.1.1 Max Mathews e i programmi MusicN 1.4.1.1.1 Il concetto di Unit Generators e il passaggio a MusicV 1.4.1.1.2 Esempi di composizione algoritmica in MusicN 1.4.2 Introduzione ad un linguaggio per la sintesi del suono: Csound Dall’algoritmo alla musica di sintesi – sintassi del linguaggio come estensione del concetto di partitura Orchestra e partitura La dimensione temporale I timbri e la modulazione dinamica dei parametri – genesi della trasformazione 1.4.3 Lejaren Hiller 1.4.4 Barbaud, Iannis Xenakis e Gottfried Koenig
1.4.5 L’Italia musicale verso l’informatica: Pietro Grossi e la nascita del Centro di Sonologia Computazionale (CSC) di Padova Pietro Grossi Un’esperienza di composizione assistita al Centro di Sonologia Computazionale di Padova 1.4.6 La musicologia cognitiva 1.4.6.1 Breve introduzione all’Intelligenza Artificiale
CAPITOLO 2 - I FONDAMENTI DI OPEN MUSIC 2.1 Introduzione alla tecnologia di Open Music (OM) 2.1.1 Paradigmi di OM: Lisp e Object Oriented Programming (OOP) 2.1.2 Lisp 2.1.2.1 Introduzione al paradigma computazionale Lisp Ricorsione e -calcolo Dal modello computazionale al linguaggio di programmazione 2.1.2.2 Dati, S-espressioni e tipi numerici 2.1.2.3 Primitive Lisp e operazioni sui dati operazioni sui simboli operazioni sui numeri definizione di funzioni numeriche operazioni sulle liste definizione di funzioni di liste espressioni logiche e condizionali programmazione applicativa ricorsioni e iteratori 2.1.3 OOP 2.1.3.1 Breve introduzione ai linguaggi orientati agli oggetti oggetti e classi attributi, istanze e metodi polimorfismo ereditarietà 2.1.3.2 CLOS CLASSI, SUPERCLASSI e SLOTS ISTANZE Metaprogrammazione CLOS: l’implementazione di OM 2.1.4 OM come linguaggio visivo 2.1.4.1 Sintassi e semantica 2.1.4.2 Primitive lessicali 2.1.4.3 Sintassi 2.1.4.4 Semantica funzionale 2.1.5 L’ambiente di programmazione Open Music 2.1.5.1 Workspace 2.1.5.2 Packages 2.1.5.2.1 classi e funzioni 2.1.5.3 Le classi musicali: il package Music-Score
NOTE REST MIDIFILE SOUND CHORD GROUP MEASURE VOICE POLY CHORD-SEQ MULTI-SEQ 2.1.5.4 Patches e Maquette
Seconda Parte
CAPITOLO 3 -
COMPOSIZIONE DI PATCHES IN OPENMUSIC I: introduzione e assistenza
deterministica 3.1 Introduzione Nota sull’analisi degli algoritmi 3.1.1 Trasposizione di un accordo 3.1.2 Inversione di un intervallo 3.1.3 Costruzione di una successione combinata di altezze 3.1.4 Quattro operazioni su una serie di dodici suoni 3.1.5 Espansione e compressione di una sequenza di note I 3.1.6 Costruzione di uno spettro armonico 3.1.7 Costruzione di uno spettro con N parziali 3.1.8 Espansione e contrazione di una sequenza di note II 3.1.9 Sei operazioni su una serie di dodici suoni 3.1.10 Costruzione random di una sequenza I – introduzione a om-random 3.1.11 Costruzione random di una sequenza II – introduzione alle durate e alle dinamiche 3.2 TEMPO METRO E RITMO: introduzione alla definizione di strutture ritmiche 3.2.1 Alberi ritmici
CAPITOLO 4 - COMPOSIZIONE DI PATCHES IN OPENMUSIC II: introduzione a OMLOOP 4.1 OMLOOP Iteratori e collettori 4.1.1 Iteratori 4.1.1.1 FOR Esempio 1: Forloop I Esempio 2: Forloop II Esempio 3: Forloop III Esempio 4: Forloop – Collect I Esempio 5: Forloop – Collect II 4.1.1.2 WHILE Esempio 1: whileloop I Esempio 2: whileloop II Esempio 3: whileloop III 4.1.1.3 LISTLOOP Esempio 1: listloop I Esempio 2: listloop II Esempio 3: listloop III Esempio 4: listloop IV Esempio 5: listloop V Esempio 6: listloop VI 4.1.1.4 ONLISTLOOP Esempio 1: onlistloop I Esempio 2: onlistloop II Esempio 3: onlistloop III Esempio 4: onlistloop IV calcolo degli intervalli tra altezze di un accordo 4.1.2 Collettori 4.1.2.1 ACCUM Esempio 1: somma Esempio 2: moltiplicazione Esempio 3: somma e moltiplicazione Esempio 4:patch come terzo input 4.1.2.2 COLLECT Esempio 1 4.1.2.3 SUM Esempio 1 Esempio 2 4.1.2.4 MIN 4.1.2.5 MAX 4.1.2.6 IF-COUNT 4.2 Applicazioni di OMLOOP Esempio 1: applicare una funzione Esempio 2: serie aritmetiche Esempio 3: somma dei termini di una serie aritmetica Esempio 4: x -› dx Esempio 5: segmentazione di liste
CAPITOLO 5 - COMPOSIZIONE DI PATCHES IN OPENMUSIC III 5.1 Esempi di applicazioni musicali con OMLOOP Esempio 1: moltiplicazione di due accordi Esempio 2: moltiplicazione di un accordo per se stesso Esempio 4: generazione di una sequenza di note a partire da una interpolazione 5.2 Uso di BPF (break-point function) campionare una sequenza di note. 5.2.2 Uso del BPF: trasformazione di un BPF in una sequenza di note 5.2.3 Affinamento delle tecniche di campionamento 5.3 Esempi dalle librerie I: OMTREE e Profile OMTREE reverse-tree, retrogradazione ritmica invert-rhythm, inversione ritmica rotate-tree, rotazione di alberi ritmici I rotate-tree, rotazione di alberi ritmici II rotate-tree, rotazione di alberi ritmici II tietree subst-rhythm I subst-rhythm II subst-rhythm III subst-rhythm IV make-tree-groups PROFILE compr/expan, compressione ed espansione del profilo interpol-prof, interpolazione di profili bpf-interpolx interpolazione mediante bpf range-approx group-list notes-change subst-list 5.4 La MAQUETTE 5.5 Introduzione alle tecniche non deterministiche
CONCLUSIONI
APPENDICE I Tabelle di conversione MIDI note – pitch – frequenze
BIBLIOGRAFIA
Prima Parte
PREMESSA Oggetto di studio della dissertazione è l’analisi del rapporto tra composizione musicale e strumenti informatici. All’inizio del XXI°secolo è possibile sostenere che l’insieme delle tecnologie informatiche ha ricontestualizzato paradigmaticamente1 il complesso di tutte quelle attività musicali e musicologiche che beneficiano del supporto della tecnologia2. Questa dissertazione analizza le potenzialità di un nuovo artigianato compositivo che è il risultato dell’incontro delle conoscenze e delle strategie della composizione musicale con i paradigmi dell’informatica. In questo contesto si limita l’indagine al rapporto tra composizione e software con particolare riferimento al fenomeno storico conosciuto in letteratura con il nome di Composizione Musicale Assistita dal Computer (CMAC).3 Per la definizione di questo nuovo artigianato si fa riferimento all’analisi dell’ambiente di programmazione software per la composizione musicale assistita, OpenMusic.
1
In tutta la dissertazione, il termine paradigma fa riferimento alla teoria sviluppata da Thomas Kuhn in La struttura delle rivoluzioni scientifiche, Einaudi 1978: “Con la scelta di questo termine ho voluto far presente che alcuni esempi di effettiva prassi scientifica riconosciuti come validi…leggi, teorie, applicazioni e strumenti, forniscono modelli che danno origine a particolari tradizioni di ricerca scientifica con una loro coerenza.”. 2
Il beneficio non è scontato per tutti i contesti culturali dove si dà ancora musica senza tecnologia elettronica e mediante forme di organizzazione performativa e sociale alternative a modelli tecnoscientifici dominanti. 3 La composizione musicale assistita è oggi conosciuta nell’ambito della letteratura critica anche con il solo utilizzo degli acronimi CAO per la Francia (Composition assistée par Ordinateur), CAC nei paesi di lingua anglosassone (Computer Aided Composition), CMAC o CAC in Italia.
CAPITOLO 1 INTRODUZIONE Oggetto di analisi della dissertazione è la composizione musicale assistita dal computer mediante l’ambiente di programmazione OpenMusic. In questo capitolo introduttivo l’analisi è contestualizzata nell’insieme dei rapporti che le tecnologie dell’assistenza intrattengono con la composizione musicale, l’informatica musicale e la musicologia computazionale. 1.1 Struttura della dissertazione L’analisi è organizzata in modo da strutturare la dissertazione in due parti complementari. Nella PRIMA PARTE (Capitoli 1 e 2), si definiscono le caratteristiche principali della composizione assistita in riferimento allo sviluppo dell’informatica musicale e della musicologia computazionale. Nel Capitolo 1, dopo avere introdotto la relazione tra tecnica, composizione musicale e strumenti della tecnologia, si introduce la tecnologia informatica teorica, i fondamenti della teoria della programmazione software e la sua evoluzione storica. In questo contesto assume una particolare rilevanza la definizione del concetto di algoritmo, di linguaggi di programmazione, di interazione e interfaccia, intesi come fondamentali per un’adeguata comprensione della composizione assistita dal computer. Successivamente tali concetti sono relazionati alle prassi della composizione tradizionale, dove si riscontrano importanti analogie e conseguenze pratiche, teoriche ed epistemologiche. Tra queste, si evidenziano quelle che saranno definite come le “modalità dell’assistenza”, peculiari della composizione assistita e dei metodi di controllo per la generazione del materiale musicale definiti dai paradigmi di riferimento. Conclude questa introduzione, una panoramica storica di alcune esperienze di composizione musicale al computer, con particolare riguardo alle prime esperienze internazionali di composizione assistita al computer (Lejaren Hiller, Max Mathews, Iannis Xenakis e Gottfried Koenig) e alle origini di questa in Italia (Pietro Grossi e i primi programmi del Centro di Sonologia Computazionale di Padova). Il Capitolo 2 della dissertazione è dedicato all’analisi dell’ambiente di programmazione Open Music. Il software viene inizialmente analizzato dal punto di vista tecnologico-progettuale. Si evidenziano quindi gli aspetti paradigmatici da cui traggono origine i linguaggi di programmazione di riferimento per l’utente-compositore: il concetto di calcolo e di ricorsione per il linguaggio Lisp e il concetto di oggetto per la programmazione orientata agli oggetti. Conclude la prima parte una breve introduzione all’utilizzo operativo del software con l’analisi dell’interfaccia grafica e dei principali oggetti musicali presenti nel programma.
La SECONDA PARTE (Capitoli 3 4 e 5) è dedicata all’analisi operativa, poietica del software OpenMusic. Nel Capitolo 3 si analizzano alcune strategie di produzione per la composizione musicale, mediante la definizione di algoritmi per l’elaborazione e la generazione di partiture secondo il sistema di notazione tradizionale. Si analizzano, secondo una difficoltà progressiva, modelli algoritmici tratti dal tutorial del software e da altre fonti. Conclude il capitolo una descrizione dei metodi di rappresentazione delle strutture ritmiche. Data la loro importanza il Capitolo 4 è integralmente dedicato all’analisi delle strutture di controllo definite dall’oggetto OMLOOP. Il Capitolo 5, conclusivo, offre una panoramica su alcune possibili applicazioni musicali di una certa complessità strutturale e di oggetti tratti da alcune librerie software.
1.1.1 Introduzione ad OpenMusic OpenMusic è un software sviluppato all’IRCAM (Institut de Recherche et Coordination Acoustique/Music) da Carlos Agon e Gérard Assayag, membri dell’équipe di ricerca Représentation Musicales presso lo stesso istituto. Finalità del gruppo di ricerca è lo “studio della rappresentazione simbolica delle strutture musicali e delle loro applicazioni per la composizione assistita dal computer e per la musicologia computazionale (teoria e analisi musicale al computer)”. OpenMusic fu presentato alla comunità informatico musicale nel 1998 all’ICMC International Computer Music Conference (Agon, Assayag, Delerue e Rueda 1998 Assayag, Agon, Fineberg, e Hanappe 1997). OpenMusic è il risultato di un lungo lavoro di ricerca nel campo dell’aiuto alla composizione con il computer (Assayag, Rueda, Laurson, Agon, Delerue, 1999), i cui primi risultati furono resi noti a partire dalla metà degli anni 80, con il programma FORMES (1982), ambiente per la composizione finalizzato al controllo di strumenti per la sintesi del suono. A questo importante ambiente di lavoro fecero poi seguito i software CRIME (1985-1986), CARLA ed infine PatchWork, sviluppato da Mikael Laurson, Jacques Duthen e Camilo Rueda. Grazie al sostegno ricevuto dalla comunità internazionale di compositori che lo utilizzarono per il loro lavoro e per la robustezza della tecnologia, PatchWork ha rappresentato un momento molto importante nella storia dei software per la composizione musicale assistita dal computer: un ambiente di lavoro per il compositore in cui poter manipolare degli oggetti musicali (accordi, sequenze di altezze e strutture di durate), avere la possibilità di comunicare con altri software come Max4 o con programmi di notazione musicale come Finale5 o la possibilità di controllare i processi di sintesi del suono. Da PatchWork derivano direttamente OpenMusic, sviluppato presso l’IRCAM e PWGL (Laurson, Norilo, Kuuskankare 2005) sviluppato da Mikael Laurson presso il Centre for Music and Technology della Sibelius Academy di Helsinki.6 Entrambi gli ambienti, OpenMusic e PWGL ereditano e ampliano la tecnologia e le funzionalità operative di PatchWork.
4
Ambiente di programmazione per la composizione assistita orientata al linguaggio MIDI. Si veda (Winkler 1999), (Elsea e tutorial http://www.sfu.ca/sca/Manuals/247/Max/Max.html#articles) (Rowe 2001), (Essl www.essl.at ), www.cycling74.com. 5 www.codamusic.com 6 PWGL rappresenta una grande innovazione nel campo degli ambienti software per la composizione assistita. Esso tende all’integrazione in un unico ambiente di lavoro delle principali tecnologie di riferimento per il compositore che si interessi all’informatica musicale, dall’elaborazione del suono, alle tecniche di sintesi e alla formalizzazione dei processi compositivi. Il software è attualmente infase di beta-testing.
A partire da PatchWork sono numerosi i compositori che hanno utilizzato l’ambiente di lavoro e contribuito allo sviluppo del software fino alla nascita di OpenMusic: JeanBaptiste Barrière, Antoine Bonnet, Marc-André Dalbavie, Michel Fano, Brian Ferneyhough, Gérard Grisey, Paavo Heininen, Magnus Lindberg, Claudy Malherbe, Tristan Murail, Kaija Saariaho, Jacopo Baboni Schilingi, Marco Stroppa e molti altri. “Il computer è un mezzo che ha la peculiarità di non avere peculiarità, e che quindi dovrebbe in teoria assecondare le più sottili e personali esigenze compositive a priori” (GabrielMaldonado www.csounds.com/maldonado )
Una caratteristica particolare degli ambienti software utilizzati dai compositori è il loro configurarsi come sistemi aperti, modulari e modellabili secondo le particolare esigenze di ogni singola tecnica del compositore. Il sistema deve essere in grado di descrivere, interpretare e risolvere, ogni problema compositivo musicale formalizzabile. Per questo motivo i compositori si sono principalmente rivolti ad “ambienti di programmazione” musicale; questi permettono al compositore di interagire con il sistema da loro formalizzato mediante l’uso dei più opportuni e flessibili linguaggi di programmazione, dotati possibilmente di un’interfaccia grafica in cui definire il pensiero musicale mediante algoritmi definiti da oggetti. OpenMusic è l’interfaccia visiva musicale di un linguaggio di programmazione completo chiamato CommonLisp/CLOS. Indipendentemente da finalità musicali è possible quindi utilizzare il sistema per differenti scopi, incluso l’insegnamento della Programmazione Funzionale (cfr. Capitolo 1 § 2.1.1-2.1.2), Orientata agli Oggetti (cfr. Capitolo 1 § 2.1.3), e delle tecnologie di riferimento per la Programmazione Logica per Vincoli7. Nella prassi della composizione musicale, il metodo per la definizione di modelli musicali al computer si è identificato con la formalizzazione di procedure compositive. La formalizzazione, come vedremo, non è elemento esclusivo delle prassi di composizione al computer, ma anche di quelle tradizionali esperienze di composizione che hanno utilizzato il numero come principio ordinatore dell’artigianato compositivo (dal metodo per la composizione con i dodici suoni a Donatoni, dalle matrici seriali alla proliferazione del materiale in Boulez, fino ai processi generativi di Alessandro Solbiati, Ivan Fedele, Luca Francesconi). Il fine della formalizzazione non è quindi la produzione di una sterile “musica algoritmica dove le ragioni di una composizione risiedono nella logica che definisce un calcolo o un algoritmo…ma una tecnica che permette una interazione tra compositore e sistema”
7
Data la complessità delle tecnologie si farà solo accenno a quest’ultima. Come introduzione all’argomento si rimanda di seguito alla descrizione della libreria per OpenMusic OMRC.
(Baboni Schilingi 2005) in cui il compositore orienta le scelte in un campo di possibilità da valutare artigianalmente ed esteticamente. Questo è il senso ultimo di un sistema musicale artificiale che “assista” il compositore e ne garantisca la “libertà espressiva”. 1.1.2 Librerie di OpenMusic Per introdurre all’ambiente di lavoro OpenMusic, capire cosa fa e quali sono le sue possibili applicazioni, si riporta di seguito la libera traduzione (con opportune integrazioni nella descrizione delle librerie) della descrizione divulgativa del software così come fornita del dipartimento marketing dell’IRCAM. OpenMusic OpenMusic (OM) è un ambiente di programmazione visivo finalizzato alla creazione di applicazioni per la composizione assistita dal computer ed è disponibile per i sistemi operativi Mac OS9, Mac OSX, Linux (una versione per i sistemi Windows è in fase di sviluppo). Caratteristiche principali OM permette all’utente la gestione e l’organizzazione di diversi moduli, ciascuno dei quali associa una funzione specifica ad un’icona. L’utente compositore connette i moduli tra loro con il mouse per creare un programma, chiamato patch, che permette la generazione o la trasformazione del materiale musicale. Editors
8
9
Common Music Notation è una particolare implementazione di un sistema di notazione musicale che permette l’elaborazione e la visualizzazione di semplici oggetti musicali (note, ritmo, accordi ecc.) o complesse polifonie. MIDI piano-roll
10
con l’utilizzo di MidiShare
11
(GRAME France).
8
Gli editors ampliano il concetto di notazione musicale a nuove possibilità di rappresentazione musicali fornite dalla tecnologia informatica. 9 Common Music Notation è un sofware sviluppato al CCRMA, USA per la rappresentazione del sistema di notazione musicale tradizionale. 10 MIDI è l’acronimo di Musical Instrument Digital Interface. Protocollo finalizzato alla comunicazione tra strumenti digitali. Il primo protocollo (Standard 1.0) risale al 1982 e fu concordato tra le case costruttrici di strumenti musicali Seq.Circuits, Roland, Korg, Kawai. Il protocollo, mediante un linguaggio, definisce un tipo di rappresentazione musicale (Lombardo, Valle 2002). Per esempio la codifica dell’altezza della nota (pitch) avviene assegnando ad ogni nota del sistema temperato un valore compreso tra 0 e 127 chiamato MIDI
La visualizzazione di file sonori mediante la visualizzazione della forma d’onda. La Maquette è un editor attraverso cui fornire all’utente una rappresentazione di alto livello, nel tempo, della struttura di lavoro (macroforma), con possibilità di integrazione e playback di dati audio e midi, patches e con la possibilità di esportazione del contenuto verso programmi di notazione musicale come Finale.
Come si è detto OpenMusic è un linguaggio di programmazione. La caratteristica principale di un linguaggio di programmazione è la genericità, cioè la sua capacità di descrivere la maggior parte dei problemi per cui esiste una possibile soluzione. Nell’ambito della composizione musicale assistita, OpenMusic non definisce quindi l’utilizzo particolare di una o più tecniche compositive. OpenMusic fornisce al compositore/musicologo la possibilità di sfruttare diversi paradigmi di programmazione con cui formalizzare una qualsiasi regola per la composizione o l’attività analitica. La complessità del software è quindi molto elevata. Per capire quale sia il dominio applicativo dell’ambiente di lavoro per la composizione musicale è necessario perciò fare riferimento a quanto disponibile in letteratura, documentazione informatica e risorse umane. Nonostante la copiosa produzione manualistica si ribadisce l’importanza della comunicazione orale senza la quale non sarebbe possibile comprendere la complessità di alcune funzioni, delle applicazioni e dell’intepretazione analitica degli algoritmi. E’possibile inizialmente fornire una descrizione delle applicazioni musicali del linguaggio attraverso l’analisi della documentazione, dei tutorial del software e delle librerie sofware fino ad oggi realizzate. Si introduce di seguito la definizione delle librerie (Library) presenti all’interno della versione del sofware considerata in questa dissertazione: OpenMusic 4.6.6. Le librerie rappresentano porzioni di software sviluppate in aggiunta al software originale e progettate ad hoc da compositori, programmatori e musicologi per specifici problemi musicali e/o analitici. Ogni libreria affronta problemi particolari (per esempio di musica stocastica, spettrale, di programmazione basata su regole, sintesi del suono, ecc.). Spesso, l’uso approfondito di alcune librerie, richiede competenze nell’ambito di specifici settori dell’informatica musicale e/o della musicologia computazionale.
note. (cfr. Appendice 1) l’editor definito come PianoRoll nei software MIDI rappresenta le note come linee orizzontali con una lunghezza che ne definisce la durata. La rappresentazione è corredata da un piccolo disegno di una tastiera di pianoforte. (cfr.Cap.2 §2.1.5.4) 11 Permette la comunicazione del software con i componenti MIDI installati sul computer.
1.1.2 Le Librerie di Open Music
12
OMSDIF per leggere e scrivere file nel formato SDIF . SDIF è l’acronimo di Sound Descriprion Interchange Format, formato standard che uniforma le differenti descrizioni di un suono incluso il suo modello spettrale, sinuosoidale, nel dominio temporale, ecc. Lo standard SDIF è stato realizzato in collaborazione tra l’IRCAM, il CNMAT13 e l’IUA-UPF di Barcellona14. E’ disponibile per OpenMusic una recente implementazione grafica per la visualizzazione 3D delle differenti modalità di descrizione possibili con il formato SDIF.15 16
OM2Csound generazione di partiture per Csound .
oMChroma per il controllo dei processi di sintesi del suono (Stroppa, 2000) Libreria sviluppata da Carlos Agon e dal compositore Marco Stroppa. Il modello originale della libreria è l’ambiente di programmazione CHROMA sviluppato dal compositore Marco Stroppa presso il Centro di Sonologia Computazionale di Padova a partire dal 1980. In questo ambiente egli ha realizzato le sue composizioni con elettronica. omChroma permette l’estensione dei processi di composizione assistita al controllo microstrutturale definibile con le tecniche di sintesi del suono.
OM2AS per la generazione di parametri per AudioSculpt (Tutschku 1998, 1999): Libreria sviluppata dal compositore Hans Tutschku, definisce un protocollo di comunicazione tra due software dell’Ircam, OpenMusic e Audiosculpt. Audiosculpt è un software per l’analisi e l’elaborazione sonora. La libreria OM-AS è “una collezione di funzioni per la generazione di parametri finalizzati alla trasformazione sonora in AudioSculpt.” Viceversa è possibile sfruttare le analisi del suono in Audiosculpt per la generazione di parametri in OpenMusic. A questo fine la libreria OM-AS è stata fine utilizzata anche da etnomusicologi per la trascrizione in notazione tradizionale di repertori monodici o polifonici anche non equabilmente temperati della tradizione orale.
12
www.ircam.fr/sdif Center for New Music and Audio Technologies www.cnmat.berkeley.edu 14 www.iua.upf.es 15 La documentazione relativa all’implementazione dell’interfaccia grafica è disponibile sul sito http://recherche.ircam.fr/equipes/repmus/bresson/stage.html. 16 Software per la sintesi e l’elaborazione sonora. www.csounds.com e cfr.§ 1.4.2. 13
OM2Modalys per la costruzione di strumenti virtuali per Modalys. Modalys è un linguaggio software dell’Ircam per lo studio della sintesi del suono per modelli fisici mediante cioè la simulazione di oggetti fisici come corde, membrane, tubi, plettri, superfici di metallo, ecc. La libreria OM2Modalys permette di interfacciarsi, in OpenMusic, direttamente con il linguaggio di Modalys.
OMLZ per la modellazione statistica e la generazione di improvvisazioni (Lartillot 2000). La libreria, sviluppata da Olivier Lartillot, permette la generazione di strutture per apprendimento da esempi musicali. Lartillot deduce il suo modello dalla considerazione secondo cui “l’approccio informatico alla modellizazzione statistica delle strutture musicali è fondato su due differenti metodi di generazione delle stesse. Il primo è basato sulla formulazione esplicita delle regole di costruzione…implementate sotto forma di sistema esperto per la gestione di conoscenza musicale (musical knowledge engineering). Il secondo approccio consiste nel fornire al computer le condizioni per un apprendimento empirico delle strutture a partire da un elevato numero di esempi musicali…(Seguendo questo secondo approccio, nella libreria si implementano) metodi di apprendimento basati sullo sviluppo della teoria dell’informazione.” (Lartillot 2000)
OMKant per la quantificazione e la segmentazione ritmica (Meudic 2001).
OMRC programmazione ritmica per vincoli (Sandred 2000). La libreria, sviluppata da Örjan Sandred utilizza il metodo conosciuto in Intelligenza Artificiale come “constraints satisfaction problems”. “Tecnica utilizzata in particolare per problemi di tipo combinatorio. Invece di trovare un algoritmo appropriato per la soluzione di un problema, l’utente definisce il proprio problema mediante delle regole che devono essere seguite quando si cerca la soluzione del problema. Una interessante conseguenza e che possono essere trovate numerose risposte corrette per un singolo problema definito.” (Sandred 2000) Con una efficace metafora si paragona questa tecnica alla definizione di regole dell’armonia classica, rispettando le quali possono essere formulate varie soluzioni.
OMCS programmazione per vincoli generica.
OMSituation programmazione per vincoli sulle altezze e sul ritmo (Bonnet Rueda 1999).
Repmus collezione delle funzioni del team di ricerca Representation musicale.
Profile per la manipolazione del profilo e del contorno delle altezze (Baboni Schilingi Malt 1998). La libreria, sviluppata dal compositore Jacopo Baboni Schilingi è finalizzata alla elaborazione delle altezze per mezzo della rappresentazione e la trasformazione geometrica.
Morphologie funzioni di analisi per sequenze numeriche e di simboli (Baboni Schilingi, Sarhan, Voisin, 1999) La libreria Morphologie è un insieme di funzioni e algoritmi destinati all’analisi, la classificazione e il riconoscimento di forme e la ricomposizione dei profili e delle sequenze numeriche e simboliche.
OMChaos funzioni matematiche delle teorie del caos e OMAlea funzioni aleatorie (Malt 1996a, Malt 1996, Malt 1997) Le librerie sono state realizzate da Mikhail Malt. OMAlea implementa le principali operazioni matematiche relative alle funzioni random (generazione casuale di numeri con distribuzioni di Gauss, Cauchy, Poisson e random walk, simulazione del moto browniano e generazione di numeri con distribuzione 1/f). OMChaos implementa le operazioni matematiche relative alle teorie del caos (per esempio Lorentz, ecc.)
Esquisse funzioni per la generazione spettrale e frequenziale. Libreria sviluppata con il contributo del compositore Tristan Murail. Implementa alcune tecniche di composizione utilizzate nella musica spettrale, dalla generazione di spettri armonici o inarmonici, alla simulazione di tecniche elettroniche come la sintesi FM e la modulazione ad anello.
17
OMMiel per l’analisi musicale
OM2pt esportazione della maquette a ProTools 17.
OMPitchfield e OMTimepack composizione basata sulla teoria di Allen Forte.
Uno dei più noti e utilizzati sistemi di montaggio audio-midi disponibili nel mercato dell’informatica musicale www.digidesign.com.
OMTrees elaborazione di alberi ritmici.
CompoTonal composizione e contrappunto tonale.
OMClouds programmazione per vincoli.
OMZN formalizzazione algebrica delle strutture musicali.
18
Libreria per l’analisi e la composizione legata alla descrizione algebrica delle strutture musicali: comprende l’ars combinatoria di Babbit, Vieru, Benjamin, Carter; la Set Theory classica di Forte e trasformazionale di Lewin, tecniche del serialismo integrale, Babbit, Boulez, la teoria dei ‘setacci’ e della musique symbolique di Xenakis; analisi di canoni ritmici e imparità ritmica.
1.2 Una definizione di Composizione Musicale Assistita dal Computer La musica è un fenomeno multidimensionale. Oggi, su uno schermo di un comune computer, è possibile rappresentare qualsiasi brano del repertorio musicale occidentale mediante il sistema di notazione musicale tradizionale. Di un qualsiasi fenomeno acustico è possibile ottenere una rappresentazione visiva della struttura temporale e di questa struttura è possibile indagarne le dimensioni microtemporali. E’possibile strutturare degli algoritmi, in modo da trasformare gli eventi di un qualsiasi paesaggio sonoro, in tempo reale o in tempo differito, à la maniere de la musique concrete. Nuovi artigianati della composizione sono possibili a tutti i livelli della rappresentazione temporale degli oggetti sonori. Un problema di composizione musicale assistita dal computer non può prescindere dalla conoscenza della tecnologia informatica e dalle possibilità che questa offre nell’articolazione della rappresentazione degli oggetti sonori a qualsiasi livello temporale. E’ necessario, secondo il compositore Horacio Vaggione, “comprendere l’importanza di definire chiaramente le scale di tempo nelle quali realizzare operazioni compositive, e della necessità di articolarle in una prospettiva fortemente interattiva…rappresentazioni pertinenti possono essere ormai definite a qualunque livello temporale: la sintesi e la trasformazione dei suoni fanno appello ugualmente a delle manipolazioni di simboli, a delle “scritture”. La questione che si pone, in queste condizioni, è quella di trovare delle strategie per articolare questa diversità di rappresentazione”. (Vaggione 2002) Delle strategie di articolazione di questa diversità, si occupa la composizione musicale assistita dal computer.
18
Tutta la documentazione relativa allo sviluppo e alla contestualizzazione teorica di questa libreria è possibile trovarla sul sito di Moreno Andreatta recherche.ircam.fr/equipes/repmus/moreno
La precedente presentazione delle librerie software di OpenMusic ha evidenziato come sia possibile “muoversi” all’interno di questi differenti livelli di rappresentazione, diremmo di “notazione/scrittura”, per articolarne le potenzialità morfogenetiche. Strutture di dati e algoritmi, analisi sonore e rappresentazioni di queste mediante forme d’onda o sonogrammi, i protocolli MIDI o SDIF, rappresentano una ulteriore possibilità della “scrittura”19 nelle mani del compositore. La presente introduzione fornisce un quadro generale del concetto di composizione assistita. Non si escludono dalla definizione i processi di sintesi del suono per i quali, storicamente, è stato possibile definire differenti strategie di articolazione del materiale sonoro. Una teoria generale che voglia definire la composizione assistita dal computer non può, oggi, non tenere conto dei molteplici livelli di rappresentazione del continuum sonoro: dalle strategie di articolazione del singolo campione audio (Iannis Xenakis, Herbert Brün), alla complessità delle strutture ritmiche in notazione tradizionale (Ferneyhough) all’elaborazione di oggetti sonori (Hans Tutschku). Tuttavia, si ribadisce quanto il controllo di alto livello sui microprocessi di sintesi ed elaborazione sonora abbia rappresentato storicamente “a very delicate issue” (Stroppa 2000) rappresentando una vexata quaestio che non può essere affrontata in questa dissertazione. Nella storia di questa disciplina essa è stata affrontata nei modi più diversi con risultati estetici, implicazioni teoriche e tecnologie software particolari per le quali si rimanda per una esauriente descrizione a (Roads 2001 e Vaggione 1999). In questo contesto introduttivo faremo riferimento ad alcune semplici strategie di composizione di sintesi definite nelle prime prassi di composizione al computer (Tenney 1976), alla descrizione della sintassi di un linguaggio per la sintesi del suono con l’identificazione di un livello minimo di articolazione sonora (Csound). Nel Capitolo 3, con lo studio di applicazioni pratiche nell’ambiente di programmazione OpenMusic, si concentra l’analisi solo sulla realizzazione di algoritmi per la generazione e l’elaborazione di partiture visualizzabili mediante il sistema di notazione musicale tradizionale. La composizione musicale assistita dal computer è sintesi dell’evouzione dell’informatica-musicale e della musicologia-computazionale. In questo contesto la composizione musicale assistita dal computer costituisce un ampio e complesso processo di integrazione di conoscenze e tecnologie. Un processo che ha avuto inizio con le prime esperienze di computer music verso la fine degli anni 50, con i pioneristici esperimenti di composizione di partiture di Lejaren Hiller e di sintesi del suono di Max
19
Scrittura quindi come tecnologia, che ha sempre rappresentato, per la musica d’arte occidentale, “un atto creativo originale solo dal momento in cui ha sottoposto l’orecchio all’influenza dell’occhio” (Dufourt 1997).
Mathews. Successivamente si è sviluppato, con una forte evoluzione a partire dalla fine degli anni 60, parallelamente alla nascita della musicologia computazionale. La composizione musicale assistita dal computer può essere definita come “la creazione di ambienti software che aiutino la formalizzazione delle rappresentazioni e delle conoscenze musicali, parallelamente alla ricerca di sistemi che permettano l’esplorazione di nuove idee” (Agon 1997) La definizione può apparire generica ma ci aiuta a introdurre e contestualizzare una disciplina che è stata definita in numerosi modi:, “algorithmich composition, automatic composition, composition pre-processing, computer-aided composition (CAC), computer composing, computer music, procedural composition…score synthesis…computer aided algorithmic composition”, (Ariza 2005) computer aided score synthesis, computer aided interactive composition. Diremo inizialmente che la composizione musicale assistita è un fenomeno caratterizzato “dall’esistenza di strumenti software che aiutino il compositore nella creazione e nella manipolazione degli oggetti e nei processi musicali.” (Roads 1987) In questo senso essa si distingue dal più ampio contesto della composizione al computer per una caratteristica fondamentale: le modalità dell’assistenza. Se tutti i sistemi software per la composizione convergono nel definire l’oggetto e il processo della composizione non tutti implementano le modalità dell’assistenza. 1.2.1 Le Modalità dell’Assistenza tra Oggetti e Processi compositivi L’assistenza è un concetto riconducibile alla funzionalità stessa del computer in quanto costrutto tecnologico. Il computer è nato per computare, per aiutare l’uomo a risolvere complessi problemi matematici e simbolici altrimenti irrisolvibili nell’arco della vita umana.20 E’inevitabile quindi che un computer nelle mani del compositore rappresenti, per qualche aspetto, un valore aggiunto misurabile nei termini dell’aiuto o dell’assistenza che esso può fornire alla sua prassi. Inoltre, l’assistenza, nelle tecnologie informatiche, è un concetto generalizzabile, per esempio, a tutti i software CAD (computer aided design o OAD oriented aided design) dedicati alla progettazione e al disegno architettonico, industriale ed elettronico.21
20
Paul E.Ceruzzi, A history of modern computing, MIT press
21
Si riscontra, in particolare per l’architettura e le arti legate alla visione, una considerevole produzione di letteratura divulgativa sulle relazioni tra il computer e i problemi di progettazione/composizione. In particolare, per importanza e notorietà, si ricorda l’opera dell’architetto Frank O’Ghery, la produzione teorica degli architetti Peter Eisenmann, Marcos Novak, Greg Lynn e Karl Chu. Si ricordano a tale proposito le parole di Pierre Boulez a proposito di Paul Klee (le cui lezioni al Bauhaus gli furono regalate da Stockhausen come “manuale di composizione”) il quale evidenziava molteplici analogie tra i processi compositivi di differenti discipline; nel nome di un osmosi comune ad una data epoca le implicazioni e le
In che cosa consiste, praticamente, l’assistenza? Le modalità dell’assistenza si sono definite, parallelamente all’evoluzione della tecnologia informatica, con l’uso di differenti tecniche di programmazione di un computer. Queste tecniche sono il risultato di un lungo confronto della tecnologia informatica con le possibilità di rappresentazione di modelli matematici e gli studi sull’Intelligenza Artificiale. Definiremo l’insieme di queste procedure, distinguendo successivamente tra tecniche di programmazione deterministiche e tecniche non-deterministiche (Anders 2003 –Truchet 2004). Per ora, definiamo l’insieme di queste tecniche, come il tratto caratteristico dell’assistenza dal computer.22 Il complesso delle attività artigianali del compositore al computer può essere così descritto mediante le seguenti caratteristiche principali: -
Le modalità dell’assistenza definiscono l’insieme delle tecniche che permettono l’articolazione degli oggetti e dei processi compositivi. In questo senso esse sono caratteristiche di un software per la composizione assistita.23
-
L’oggetto identifica il livello di rappresentazione di un evento sonoro (nel continuum temporale dal suono alla nota). La scelta di un particolare livello di descrizione dell’evento implica una relativa scala temporale. Non tutti i software per la composizione assistita possono gestire contemporaneamente tutti i livelli di rappresentazione degli oggetti sonori. In particolare, si è detto, le scale microtemporali implicano l’adozione di particolari modalità di descrizione del fenomeno.
-
Il processo rappresenta l’insieme di regole e strategie (interpretazione delle tecniche) che il compositore applica agli oggetti sonori.
conseguenze sulla morfogenesi della composizione in campo architettonico e visivo sono comuni a quelle considerate in questa dissertazione. 22 In sintesi: l’insieme delle tecniche deterministiche è definito dalla possibilità di “traduzione” di un qualsiasi modello matematico ad un processo compositivo. Tra questi, metodi stocastici, modelli del caos e di autoorganizzazione, mapping di dati verso partiture ecc. le tecniche non deterministiche sono quelle derivate da quelle tecniche di programmazione “which define restrictions or mutual dependecies with multiple solution …the restrictions are called constraints” (Anders 2003) definita in italiano come programmazione logica per vincoli. In questa dissertazione si farà principalmente riferimento a tecniche di programmazione deterministiche. 23 Non sono cioè implementate nella maggior parte dei software per fare musica al computer.
-
La definizione di differenti scale temporali è derivata dalla scelta del livello di rappresentazione dell’oggetto.
A partire dall’analisi storica delle prime esperienze di informatica musicale e in considerazione dei recentissimi sviluppi della ricerca è possibile sostenere che, a priori, gli oggetti della composizione non cosituiscono l’aspetto peculiare della composizione assistita dal computer. Questa, enfatizza piuttosto i processi di composizione per applicazione delle tecniche di programmazione sopra citate. Le tecnologie dell’assistenza ricontestualizzano gli oggetti e i processi del proprio dominio di applicazione (la composizione musicale) parallelamente all’evoluzione delle tecnologie deterministiche e non-determinisitche. Diverse intepretazioni del sistema informatico come strumento per l’assistenza alla composizione, hanno dato vita, dalla fine degli anni 50 ad oggi, a diverse applicazioni software che articolano diversamente l’oggetto della composizione. Tutti i sofware detti “per la composizione assistita” permettono la gestione di processi; non tutti i software applicano questi agli stessi oggetti. Per cui esistono programmi per la composizione assistita decisamente orientati verso la sintesi del suono (come Supercollider24) altri orientati verso la rappresentazione musicale mediante il protocollo MIDI (MAX), ambienti ibridi per la sintesi, l’elaborazione e il MIDI anche in tempo reale (MAX/MSP), altri ancora orientati maggiormente alla definizione dei processi ma che possono “comunicare” con altri software di sintesi, per l’elaborazione, ma non in tempo reale, ecc. (OpenMusic). E’solo la necessità e sensibilità estetica a guidare un compositore alla scelta del software più adatto alla realizzazione della propria idea. Spesso, nella storia musicale degli ultimi cinquant’anni, è stata sentita come esigenza particolare la realizzazione ad hoc di programmi per la composizione assistita, soprattutto presso quei compositori interessati ai microprocessi di sintesi del suono (Iannis Xenakis, Herbert Brün, Curtis Roads, Agostino DiScipio per fare alcuni nomi). Per definire esattamente le modalità dell’assistenza è tuttavia necessario comprendere quali siano le caratterisitche generali della tecnologia informatica, capire come questa possa “tradurre” un pensiero o un modello matematico per mezzo di algoritmi e linguaggi di programmazione. E’ necessario poi comprendere come il compositore interpreti i risultati proposti da un modello artificiale. In conclusione: la composizione assistita può essere definita come trait d’union di settori fortemente interdisciplinari (composizione musicale, informatica musicale e musicologia computazionale), in cui la simulazione e la formulazione di procedimenti, strategie, regole per l’analisi e la composizione musicale, trovano un adeguato supporto formale e computazionale. 24
www.audiosynth.com
Nella seguente introduzione si definiscono i rapporti tra tecnologia, tecnica e musica nella prassi della composizione del XX° secolo. Contestualmente all’evoluzione dell’informatica, dell’informatica musicale e della musicologia computazionale, si definisce lo sviluppo dei processi compositivi che hanno visto nel numero una guida per l’ideazione formale. Conclude l’introduzione una descrizione delle pionieristiche esperienze della composizione musicale al computer. 1.3 Tecnologia informatica, tecnica e composizione musicale Tecnologia, informatica e pensiero estetico, riflettono, nel momento di sintesi della composizione musicale, tutto il peso della loro storia. Nel tentativo di definire il rapporto tra composizione musicale e tecnologia software è sembrata subito evidente la difficoltà di contestualizzare l’ambito di una disciplina che coinvolge intimamente aspetti tecnologici, estetici ed epistemologici. Da un lato, la composizione musicale nel XX°secolo, ha spesso riconosciuto negli strumenti del metodo scientifico una fonte inesauribile di idee da cui attingere per l’ideazione formale. Soprattutto a partire dal dopoguerra, quando “la gran parte della musica europea, è attraversata da una eterogenea ricerca di significati paradigmatici, molti dei quali tessono la relazione tra musica e matematica. Questo stato delle cose musicali è l’effetto derivato dalla scomposizione infinitesimale dello spazio acustico, e che produce soluzioni radicali che si incarnano di matematizzarne tutti gli elementi, come accade nell’iperstrutturalismo bouleziano…E’ il problema di confermare una direzione attraverso l’assolutismo di una tecnica.” (Galante Sani 2000) E’ possibile tuttavia affermare che, ben prima del dopoguerra, l’entrata in campo della tecnica ha accompagnato la genesi stessa del pensiero novecentesco artistico e scientifico. Cioè di quella coscienza che, autodeterminando i suoi oggetti fino al punto di farsi essa stessa oggetto di indagine, individua nella tecnica il mezzo ideale per raggiungere tale fine. A partire dalla metà dell’800 la tecnica, come dimensione delle strategie scientifiche25 del positivismo, contribuisce tanto alla fondazione del metodo musicologico (Serravezza 1996) quanto a quello che possiamo considerare come il paradigma compositivo del Novecento, sintesi di un “vibrato tra intuizione e lavoro razionale”.26
25
“Al servizio delle mutevoli strategie che li oppongono e li rendono simili, gli esseri umani utilizzano in effetti, in tutti i modi possibili, entità e forze non umane: animali, piante, lieviti, pigmenti, montagne, fiumi, correnti marine, vento, carbone, elettroni, macchine, ecc. E in circostanze infinitamente diverse. Ripetiamolo: la tecnica non è che la dimensione delle strategie che passano attraverso attori non umani” (Lévy 2000). 26 Da un’intervista di Karlheinz Stockhausen con Richard Buffalo dell’8 aprile del 1987. Questa ed altre interviste al compositore sono disponibili sul sito Internet www.stockhausen.org
Arnold Schönberg: “Non si può rifiutare l’idea che il piacere mentale dato dalla bellezza delle struttura possa equivalere al piacere che proviene dalle qualità emotive.” O “il metodo con cui viene ristabilito un equilibrio è, secondo me, la vera idea della composizione” (Schönberg 1960) identificando nel metodo dodecafonico una strategia per la genesi del materiale musicale.27 Dalla fine del XIX° secolo metodi e tecniche della composizione si incaricano di riorganizzare il pensiero musicale occidentale mediante la costruzione di nuovi spazi sonori; con il progressivo abbandono delle logiche funzionali tonali o di una loro reinterpretazione (come, “illusionismi erano le dominanti di Strawinsky e i suoi falsi Do maggiore”28) ovvero per sostituzione di queste con nuovi sistemi di riferimento sonoro. Da Varèse a Debussy, da Cage a Schönberg e Stravinsky, con differenti tecniche al servizio di strateghi del caso e della necessità, interpreti del colore e pionieri della musica elettroacustica. Viceversa, il metodo scientifico ha identificato nella musica un modello ideale per lo studio e l’analisi dei processi creativi. Dapprima con la fondazione di una Musikwissenschaft, successivamente, in epoca cibernetica, con lo studio della musica come modello esemplare e problematico della conoscenza. La tecnica diventa quindi interprete di quell’ “osmosi più o meno cosciente che conferisce un profilo comune a una data epoca, grazie alla sotterranea coincidenza dei mezzi utilizzati; coincidenza che, anche se non è possibile constatare sistematicamente, si presenta di continuo, ora sfumata, ora con una precisione stupefacente.” (Boulez 1990) Più esplicito, a proposito, è Hugues Dufourt: “la produzione musicale, che ne sia stata consapevole o no, ha lavorato sulle basi della rivoluzione scientifica e tecnica la cui dinamica ha condizionato la stessa produzione. La storia delle categorie del pensiero scientifico sottende, a mio avviso, la storia delle categorie del pensiero musicale”. (Dufourt 1997)
27
Genesi che, in Schönberg, è direttamente correlata all’emergenza tematica, in quanto “connessione della Grundgestalt (figura-base) con le sue ripetizioni più o meno varie” (Epstein 1998). Nella prospettiva delineata in Epstein anche “il serialismo totale affonda le sue radici non solo nel metodo schoenberghiano di serializzazione dell’altezza, ma , in senso più generale, nel concetto di Grundgestalt da cui nacque la teoria dodecafonica”. Sarà sempre il concetto di “figura” a farsi portavoce del rinnovamento del linguaggio postseriale (si vedano i saggi di Donatoni, Ferneyhough, Sciarrino, Gentilucci, Lombardi, Maggi, Melchiorre, e altri in “I quaderni della Civica Scuola di Musica” Anno 6, numero 13, 1986). Dal punto di vista analitico si rimanda anche all’analisi del periodo “atonale” di Schönberg in (Mastropasqua 2004): fondamentale il concetto di “variazione evolutiva come manifestazione della logica musicale” e di svelamento del modo di condurre l’idea. 28 Citazione tratta dalle note di copertina di Luca Francesconi al libretto del CD “Luca Francesconi, cobalt scarlet – rest” Stradivarius
Ben presto, nel mondo occidentale, i migliori intepreti della razionalità tecnica divennero le macchine, gli artefatti della tecnologia scientifica, giungendo ad un importante crocevia storico proprio negli anni 50, con la nascita della cibernetica e con l’affermazione del calcolatore come “del prodotto più complesso e ricco di comportamenti possibili sviluppato dalla tecnologia.” (Serra Zanarini 1986) Nel 1956, negli Stati Uniti, gli scienziati John McCarthy e Marvin Minsky tennero a battesimo la nascita dell’Intelligenza Artificiale. Esattamente un anno dopo, nel 1957, gli scienzati e musicisti Max Mathews e Lejaren Hiller cominciarono a far “suonare” i primi calcolatori dell’era contemporanea. 1.3.1 La Tecnologia come tecnica Il concetto di tecnologia, in quanto caratteristica mediatica delle tecniche di produzione (poietiche) e degli stessi strumenti tecnologici, permette di interpretare meglio il rapporto tra scienza e arte, composizione musicale e strumenti informatici. La tecnologia, nel contesto di questa dissertazione, è da intendersi quindi nella sua accezione generica, tanto come manifestazione concreta di artefatti e manufatti, quanto delle idee finalizzate al loro controllo. In relazione alla musica infatti “qualsiasi tecnologia….è soprattutto sedimentazione e condensazione di un corpo di conoscenze, di idee, e di teorie…fare musica implica articolare e modellare la propria conoscenza.” (Di Scipio 2000) Nel caso della composizione musicale la tecnologia fa propria l’insieme delle sperimentazioni (intese come fare esperienza di…) di manufatti concreti (gli strumenti musicali29) e l’insieme delle strategie, locali e globali, finalizzate all’organizzazione della loro espressione in quel complesso processo che dalla composizione, passa per la performance e arriva all’ascolto. Un insieme complesso di esperienze in cui “ogni azione e ogni costrutto musicale costituiscono momenti di un‘esperienza estetica in quanto sono articolati da strutture e processi cognitivi, dall’acquisizione, dalla sedimentazione e dallo sviluppo di schemi cognitivi. Questi si stabilizzano o si trasformano al ripetersi di oggetti e azioni che diciamo musicali.” (ibidem) Questa interpretazione della tecnologia ci aiuta a evidenziare alcuni aspetti peculiari del concetto quando relazionato alla storia della composizione nella musica del Novecento. Così definisce questo rapporto il musicologo e compositore Agostino DiScipio: “Nel corso del Novecento la musica occidentale non solo ha sviluppato una crescente consapevolezza teorica delle proprie tecniche tradizionali, 29
Tradizionali, elettroacustici, elettronici, informatici.
ma si è spesso anche assunta la responsabilità delle proprie tecnologie…sembra indicare che uno degli aspetti essenziali dell’esperienza dell’arte, nel contesto storico generale, consiste nel definire le condizioni della propria esistenza in un contesto di sempre crescente razionalità tecnica….” (ibidem) Nel momento in cui la razionalità, nel vibrare tra intuito e ragione, rivendica delle priorità sull’artigianato compositivo (per mezzo della tecnica), emerge la tipica complessità formale della musica del Novecento. La razionalità, tuttavia, rimane un concetto di difficile intepretazione. Essa è interpretabile dinamicamente, cioè contestualizzabile a ciò che del razionale abbiamo conosciuto relativamente all’insieme delle conoscenze scientifiche di una data epoca. Nel XX°secolo l’evoluzione di tale concetto è profondamente legato all’evoluzione delle scienze dell’Intelligenza Artificiale e dell’Informatica. L’affascinanante percorso storico dell’Informatica ha inizialmente identificato la razionalità con il calcolo, l’algoritmico. I primi programmi di Intelligenza Artificiale, elaborando algoritmicamente strutture di simboli “simulano almeno i prodromi di una capacità ritenuta peculiare dell’intelligenza umana: quella di scegliere…”. (Cordeschi e Tamburrini, L’Intelligenza Artificiale: la storia e le idee30) La tecnologia della musica, come dimensione relativa alla comprensione della prassi compositiva tout-court fin qui descritta31, non può prescindere dal considerare l’evoluzione storica della razionalità tecnica. Una prima conseguenza riguarda quindi l’adozione di un preciso criterio analitico che consideri la tecnologia come parte integrante delle tecniche della composizione musicale. DiScipio, a proposito dell’analisi della musica elettroacustica-informatica, ribadisce come sia necessario porre la techné32 come dominio di analisi del repertorio: “…per giudicare i risultati percepiti occorre avere nozioni precisi su come tali risultati sono ottenuti…impossibile cogliere la portata estetica della produzione elettroacustica di 30
www.mosac.com/ia/index.php?name=introduzione.html
31
La tecnica cioè come dimensione strategica della composizione. Il concetto di techné è centrale in tutta l’esperienza, oltrechè analitica, anche poetica e poietica del compositore Agostino DiScipio. Un concetto, derivato da Heidegger, attraverso cui descrivere il ruolo della poiesi artistica in relazione all’egemonia tecnologica: “To transform musical concepts into audible constructs, musicians either apply inherited methods and techniques or they themselves invent new methods. What they do with those methods and techniques is to model experience – both perceprual and conceptual. In a composer’s work, this modeling is mainly an activity of design in which s/he follows particular strategies and technical procedures, no matter whether s/he proceeds from a moment of romantic inspiration or a more 32
structuralistic standpoint. This is to say that the possibility for a composer to speak any language comes with the making and using of specially designed strategies and techniques. The knowledge by which s/he can challenge language and, to use Heideggerian terms, make language tell, is condensed in her/his techné.” (Di Scipio 1998)
Xenakis senza analizzarne la specifica techné…o si puo parlare a lungo della centralità della percezione nella musica di Risset ma al momento dell’analisi non se ne puo cogliere come l’atto percettivo riesca a diventare progetto se non si analizzano i processi di sintesi e di elaborazione del suono” (DiScipio, 1995) In questo contesto, si ribadisce l’importanza e la necessità di un analisi approfondita dei paradigmi scientifici e dei costrutti tecnologici che di tali paradigmi sono la diretta conseguenza. Una conoscenza non fine a se stessa ma volta alla comprensione di una concezione della composizione che accoglie la dimensione della technè e và sempre sempre più configurando l’atto percettivo come progetto33. 1.3.1.1 L’informatica “L’informatica è la disciplina che si occupa della raccolta, memorizzazione, elaborazione e trasmissione automatica dei dati,34 inizialmente solo numerici, successivamente anche alfabetici, grafici, audio e video, purchè espressi in forma digitale. Tali operazioni richiedono la progettazione, la realizzazione e la manutenzione di diversi dispositivi fisici (hardware) governati da opportuni sistemi di istruzioni (software)” Angelo Galippi Dizionario di informatica e multimedialità tecniche nuove 2000. L’informatica, nella sua accezione più generale, può essere definita come l’insieme delle tecnologie fisiche hardware e delle istruzioni software necessarie al loro funzionamento. L’informatica nasce intorno agli anni 40, come disciplina con-fusa con lo studio e l’uso degli elaboratori elettronici in quanto macchine per manipolare numeri. A questa visione calcolatrice si è “progressivamente sostituita una visione più generale” (Natali 1999-2000) che ha indotto nuove definizioni come quella comunemente accettata che vede l’informatica come “scienza teorica e pratica della rappresentazione e dell’elaborazione automatizzata dell’informazione” (ibidem). Automatizzata significa che per le operazioni di elaborazione dell’informazione si incarica un automa, cioè un esecutore che possiede capacità specifiche come quella di confrontare valori o sapere 33
Con “atto percettivo come progetto” ci si riferisce genericamente al “cambiamento” di una sensibilità
estetica “post-seriale” che trasforma le strategie della tecnica e che arriva ad includere non solo il timbro come parametro portatore di forma (Barrière Bourgois 1991), prassi influenzata dagli studi di psico acustica, ma anche tutte quelle esperienze compositive che identificano nel timbro un parametro da strutturare indipendentemente da logiche cognitive come nelle musiche di Giacinto Scelsi, Helmuth Lachenmann, Salvatore Sciarrino (“Il compositore indaga la morfologia del proprio percepire” Sciarrino 2001 e Sciarrino 1998) o la matericità di certa improvvisazione sperimentale. 34
Il termine informatica è la contrazione di INFORMAzione autoMATICA.
contare e che “esegue in maniera precisa una sequenza di istruzioni che richiedono la prestazione delle sue abilità”. (Saccà35) La vera rivoluzione si ebbe in particolare a partire dagli anni 80, quando il mondo dell’informatica ha subito radicali trasformazioni sia nelle componenti dell’hardware che del software. La progressiva diffusione dei personal computer dalla metà degli anni 80, seguita negli anni 90 dalle tecnologie portatili e dalla diffusione della rete Internet, ha ridefinito il modo di interpretare l’informatica; da pura disciplina dell’elaborazione dell’informazione a disciplina che “inizia a studiare in modo sistematico l’interazione e la coordinazione creando un nuovo spazio di lavoro in cui l’elaborazione è solo una delle dimensioni” (Natali 1999-2000) E’esperienza comune, nell’utilizzo della rete Internet, di quanto non sia del tutto necessario una conoscenza strutturale dei protocolli di comunicazione per utilizzare la rete per le finalità come il reperimento e la condivisione di informazioni. Tutto ciò, quindi, a favore di un accrescimento della produttività individuale e di una radicale riorganizzazione dei metodi del lavoro e di comunicazione sociale. E’importante tuttavia sottolineare che, soprattutto nei settori della ricerca scientifica e artistica, “gli oggetti della tecnologia non hanno condotto a un semplice esonero di attività, ma hanno trasformato la loro competenza”. (Marchesini 2002) Uno dei contributi più importanti all’evoluzione della scienza informatica è la ridefinizione del concetto di algoritmo da semplice procedura statica per la trasformazione di valori input in valori output, ad un definizione di algoritmo dinamico e interattivo. Questo passaggio capitale, iniziato verso la fine degli anni 60, ha permesso, parallelamente all’evoluzione dell’hardware, lo sviluppo delle tecnologie informatiche così come oggi le conosciamo. La storia della composizione musicale al computer è parallela alla storia dell’evoluzione dell’informatica di cui reinterpreta o assimila i realtivi paradigmi. La seguente introduzione alla tecnologia informatica software esplicita alcuni concetti ritenuti fondamentali per una corretta comprensione del rapporto tra composizione musicale e tecnologia software così come descritta nei capitoli successivi. In questo contesto una particolare rilevanza assume l’evoluzione del concetto di algoritmo e di linguaggio di programmazione. L’algoritmo ci aiuta a definire le istanze paradigmatiche della tecnologia, quindi i suoi “limiti” in relazione all’uso dei linguaggi di programmazione per la composizione musicale. E’ solo dall’elaborazione di un algoritmo in un determinato linguaggio di programmazione che il compositore risce a definire le proprie tecniche e strategie compositive. E’ questo il livello di analisi della techné in cui si situa il cuore delle esperienze poietiche di tutte le prassi compositive mediante il computer qui considerate. 35
www.icar.cnr.it/fonda/upload/lezioni
“The gaining of some competence at programming can be rewarding to a composer as it is the key to a general understanding of computer systems. Although systems are composed of programs of great complexity and written using techniques not easily learned by nonspecialists, programming ability enables the composer to understand the overall workings of a system to the extent required for its effective use.” (Roads 1996) 1.3.1.1.1 Il paradigma algoritmico Programmare un computer vuol dire cercare una possibile soluzione ad un determinato problema. La programmazione è la continua ricontestualizzazione di un processo di problem-solving (Roads 1996). La struttura di un programma (come vedremo generalmente definito patch nel campo della composizione musicale al computer) fa riferimento ad un insieme di procedure, gli algoritmi, che concorrono con diverse finalità alla soluzione di un problema. Gli algoritmi, affinchè vengano eseguiti, devono essere sintatticamente e semanticamente definiti mediante un particolare linguaggio di programmazione. In fase di progettazione dell’algoritmo è possibile, indipendentemente dalla definizione in un particolare linguaggio, descrivere un programma (e gli algoritmi che lo compongono) per mezzo di una particolare sintassi (piu semplice di un linguaggio) definita da uno pseudocodice standard. Una delle più note rappresentazioni della struttura di un algoritmo è quella definita mediante diagrammi di flusso. Secondo lo storico della matematica Carl Boyer (Boyer 1980) il termine algoritmo deriva dal nome del matematico e astronomo Mohammed ibn-Musa al-Khuwarizmi vissuto nel IX°d.C. Con la diffusione della traduzione latina De numero indorum alla particolare descrizione del sistema di numerazione indiano fu attribuito il termine algorismo o algoritmo, cioè la latinizzazione di al-Khuwarizmi. Successivamente, a tale termine, venne attribuito il significato di “qualsiasi particolare regola di procedimento o di operazione, quale per esempio il metodo euclideo per trovare il massimo comune divisore”. (Boyer 1980) Nel passaggio capitale tra sistema di numerazione e regola di procedimento, si situa lo sviluppo del concetto di computo, (lo si intenda sempre come sinonimo di algoritmo e di calcolo) così come concretizzatosi nella tecnologia informatica. In questo complesso passaggio (cui accenneremo con argomenti ampiamente trattati dalla divulgazione scientifica, cfr.Cap.2 lambda calcolo) tra astrazioni logiche e matematiche e tecnologia si situa il cuore della procedura informatica.
In informatica l’algoritmo è la rappresentazione logica di un modello della conoscenza; dove per logica, formalmente interpretata, si intenda “con Church36 lo studio sistematico delle strutture enunciative e delle condizioni generali di validità delle inferenze, mediante un procedimento che astrae dal contenuto o dalla materia dei giudizi e tratta solo della forma logica; in termini corrispondenti, il Quine sostiene che l’inferenza logica porta da premesse (proposizioni che vengono ammesse o credute per qualsivoglia ragione) a conclusioni che sono dimostrabili come vere in base a considerazioni puramente logiche, se le premesse sono vere”. (Pasquinelli 1970) L’insieme delle conoscenze logiche e formali per la definizione teorica di algoritmo si è andata assestando nella prima metà del XX°secolo, ma fu solo con la diffusione dei calcolatori che le tecniche per progettare e implementare algoritmi si sono evolute. E’ possibile quindi sostenere che fu solo con il computer che la definizione di calcolo (cfr. Cap.2 § 2.1.2.1) trovò la sua applicazione pratica. Riassumendo: “Ovunque si impieghi un calcolatore elettronico occorrono algoritmi corretti ed efficienti che ne utilizzino al massimo le possibilità. Algoritmi sofisticati e veloci sono usati per controllare il volo di aerei, regolare reazioni nucleari, smistare comunicazioni telefoniche, giocare a scacchi…progettare nuovi calcolatori, riconoscere immagini, elaborare testi letterari, comporre musica. Gli algoritmi vengono comunemente descritti tramite programmi, che si avvalgono di istruzioni e costrutti dei linguaggi di programmazione e che devono essere eseguiti da calcolatori elettronici. Le proprietà degli algoritmi sono però talmente fondamentali, generali e robuste da essere virtualmente indipendenti dalle caratteristiche di specifici linguaggi di programmazione o di particolari calcolatori elettronici. La nozione di algoritmo è inscindibilmente legata a quella di dato. Infatti, per risolvere un problema computazionale, occorre organizzare ed elaborare dati. L’algoritmo può essere interpretato come un manipolatore di dati che, a fronte di dati in ingresso che descrivono il problema da risolvere, produce altri dati di uscita come risultato del problema.” (Cormen, Leiserson, Rivest 2005) In questa definizione si evidenziano differenti caratteristiche per la determinazione di un algoritmo: 1- Il ruolo determinante di chi lo formula, cioè del programmatore (per il quale è richiesto un certo grado di competenza37). 36 37
Alonzo Church (cfr.Cap. 2 § 2.1.2.1) Nella storia della composizione musicale la “mancanza di competenza” da parte del compositore nella
formulazione dell’algoritmo, ha prodotto una serie di strette collaborazione tra compositori e programmatori, riflesso di quella condizione, in altro contesto tecnologico, per esempio dello studio di fonologia della Rai di Milano dove il ruolo dell’ ”assistente” Marino Zuccheri diventa “musicista autentico-tecnico-teorico-praticodidatta-inteprete” nelle parole di Luigi Nono (Nono 1986). Diversa è la situazione per i compositori della
2- individuazione del dominio del problema (reazioni nucleari o composizione musicale?) 3- formulazione dell’algoritmo tramite un processo di astrazione (cioè analisi del problema relativo al dominio, e definizione, con un formalismo particolare, di un MODELLO) 4- implementazione dell’algoritmo mediante un linguaggio di programmazione 5- l’individuazione dell’utente che utilizzerà l’algoritmo o l’insieme degli algoritmi definiti in un programma (chi utilizzerà il mio programma? Come lo utilizzerà?) Si è visto che, in quanto procedura computazionale, la classica definizione di algoritmo descrive lo stesso come una sequenza finita di istruzioni elementari per la soluzione di un problema. La seguente è la definizione comunemente accettata di algoritmo: “Informalmente38, un algoritmo è una qualsiasi procedura computazionale ben definita che prende alcuni valori, o un insieme di valori, come input e produce alcuni valori, o un insieme di valori, come output. Un algoritmo può anche essere considerato come uno strumento per risolvere un ben definito problema computazionale; infatti la definizione del problema specifica, in termini generali, la relazione che deve valere tra input ed output e l’algoritmo descrive una procedura computazionale specifica per raggiungere tale relazione tra input ed output.” (ibidem) L’algoritmo, in prima istanza, esige da chi lo formula un processo di astrazione “il cui fine è quello di cogliere gli aspetti essenziali del problema lasciando sullo sfondo quello che la mente, in quel momento, considera. Un algoritmo o un sistema software rappresenta il punto terminale del processo di astrazione condotto sul dominio del problema e specifica come ottenere la soluzione desiderata utilizzando i meccanismi del linguaggio di implementazione, con riferimento al modello costruito” (Natali 1999-2000) A partire dal processo di astrazione è fondamentale una corretta enunciazione del problema da risolvere, l’analisi dello stesso e delle modalità di progettazione, in modo da ottimizzare la ricerca di possibili soluzioni per la formulazione del problema. In questo senso gli algoritmi dovrebbero essere strutturati in modo tale da essere facilmente comprensibili.
generazione nata dalla fine degli anni 50, 60 per i quali vi è una maggiore “confidenza” con lo strumento informatico e compositori dei loro algoritmi e programmi (compositori del gruppo PRISMA come Jacopo Baboni Schilingi, Michele Tadini, Paolo Aralla, Giacomo Platini, Hans Tutschku ecc.); per i quali gli strumenti informatici hardware e software diventano parte integrante di una nuova grammatica musicale. 38 Cioè prescindendo dalle conseguenze pratiche della definizione logica di algoritmo definita precedentemente con (Pasquinelli 2000). Le strutture di controllo definite di seguito forniranno una prima descrizione formale di algoritmo.
La programmazione cosiddetta strutturata è un metodo di enunciazione algoritmica indipendente dai linguaggi e finalizzato alla chiara definizione del processo di astrazione. Esso esige due regole principali:
La costruzione dell’algoritmo in modo top-down39 ossia per raffinamenti successivi. Tale metodologia di progettazione “parte da una descrizione di alto livello e procede riducendo il problema iniziale in un insieme di sotto-problemi più semplici40. Ciascun sotto problema viene poi decomposto…fino a giungere ad uno stadio facilmente risolubile con le operazioni e i meccanismi elementari disponibili” (ibidem)
La necessità di esplicitare delle strutture di controllo, cioè delle strutture che determinano la successione delle operazioni descritte in un diagramma di flusso.
Le strutture di controllo sono tre: la sequenza, la diramazione (semplice o multipla), l’iterazione (a condizione finale, a condizione iniziale, iterazione a contatore). (v.anche Roads 1996) La SEQUENZA presenta un unico blocco di istruzioni che possono essere eseguite in modo sequenziale.
La DIRAMAZIONE corrisponde al ciclo noto come if then else e si rappresenta con il seguente diagramma.
39
vs.bottom-up Tutti i linguaggi di programmazione rendono disponibile “espressioni primitive (entità semplici che il linguaggio consente di esprimere), meccanismi di combinazione (con cui si possono costruire entità composte a partire da entità semplici) e meccanismi di astrazione (mediante i quali oggetti linguistici composti possono essere dotati di nome e manipolati come entità atomiche)”. (Natali 1999-2000) 40
Diramazione semplice:
Diramazione multipla:
Diramazione multipla semplificata:
L’ITERAZIONE può essere suddivisa in varie categorie -
iterazione a condizione iniziale
-
iterazione a condizione finale
-
iterazione a contatore
Una volta implementati nei rispettivi linguaggi di programmazione, gli algoritmi possono essere analizzati in questi linguaggi. Viceversa è possibile anche l’analisi del progetto algoritmico a partire dalla sola strutturazione dei diagrammi di flusso o dalla deduzioni di questi dall’analisi di un programma. Generalmente l’analisi di un algoritmo richiede procedure complesse che non verranno qui considerate. E’necessario quindi sapere che l’analisi “può risultare complessa anche se l’algoritmo è semplice” (Cormen 2005) e che gli strumenti matematici che occorrono possono essere anche molto complessi. Per analisi di un algoritmo qui si intende l’interpretazione di un programma (chiamato Patch) in OpenMusic strutturato come nel Capitolo 3 mediante:
41
-
riconoscimento delle strutture di controllo appena definite.
-
l’interpretazione di un blocco di istruzione (sintassi del linguaggio).
-
la trascrizione dell’algoritmo mediante diagrammi di flusso o una sua descrizione mediante l’uso del linguaggio naturale e di una teoria musicale di riferimento41.
Dalla teoria della musica definita in Azzaroni (1997), o alla comparazione con i sistemi teorici dei compositori. Il modello teorico di riferimento del gruppo di Representation Musicale dell’IRCAM è un modello essenzialmente matematico, si veda recherche.ircam.fr/equipes/repmus/moreno . Si confronti inoltre con la teoria della musica ipersistemica di Jacopo Baboni Schilingi 2005.
1.3.1.1.2 I linguaggi di programmazione Esistono numerosi linguaggi di programmazione con cui poter sviluppare algoritmi, programmi e software, e ogni linguaggio è caratterizzato da particolari regole sintattiche e semantiche. La scelta del linguaggio da parte del programmatore tiene conto se esso “si può candidare come strumento di lavoro privilegiato rispetto ad un altro linguaggio, con riferimento alla soluzione di problemi generici, oppure con riferimento a uno specifico settore applicativo”. Lo schema che segue, rappresenta l’evoluzione dei più noti linguaggi di programmazione dal 1945 ad oggi. Lo schema oltre a rappresentare la cronologia e l’avvicendamento dei vari linguaggi, evidenzia la comparsa di nuove specie linguistiche, con alcune costanti come LISP, e il progressivo cambio paradigmatico che i linguaggi sono stati chiamati a compiere verso il mondo Internet e dell’interattività.
Da (Natali 1999-2000):
C++ ADA PROLOG VISICALC SMALLTALK FORTRAN77 LISP
JAVA
PASCAL SIMULA67 LISP APL ALGOL LISP
COBOL ALGOL LISP FORTRAN
C Linguaggi macchina PlanKalcul 1945
1950
1960
1970
1980
1990
2000
“Per assegnare ed eseguire un algoritmo è necessario rappresentare, o codificare, i dati con simboli sui quali si possano compiere le operazioni indicate dalle istruzioni, anch’esse codificate. La scelta della rappresentazione è essenziale, ed è alla base della costruzione dei linguaggi di programmazione, cioè di quelle strutture rappresentative, di tipo gerarchico, che costituiscono le interfacce operative tra il programmatore e la struttura fisica della macchina.” (Longo 1998) “Il linguaggio di programmazione nasce storicamente come lo strumento principale con cui indurre un elaboratore ad eseguire le funzioni desiderate. I linguaggi di programmazione comunemente intesi, come BASIC, Pascal, C, Fortran, COBOL, Ada, Lisp, Prolog, C++, Java etc. forniscono modi diversi per esprimere la soluzione di problemi ad un livello concettuale più elevato rispetto a quello permesso dall’hardware. Il loro obbiettivo comune è quello di consentire all’utente una corretta e chiara impostazione del problema da risolvere, demandando ad opportuni traduttori (compilatori o interpreti) il compito di colmare il divario rispetto alla macchina (hardware) sottostante”. (Natali 1999-2000) I linguaggi di programmazione oltre a distinguersi per differenze sintattiche e semantiche (struttura superficiale del linguaggio), possono essere classificati secondo famiglie,
accumunate da un medesimo modello computazionale a cui ci si riferisce con il nome di paradigma42 (struttura profonda). I paradigmi costituiscono l’insieme dei “principali formalismi definiti per catturare il concetto di computabilità” (ibidem) a cui abbiamo precedentemente fatto riferimento (cfr.§ 1.3.1.1.1). Rappresentano perciò la “struttura profonda dei linguaggi di quella famiglia e hanno profonde conseguenze sulle proprietà dei programmi, sulla metodologia di risoluzione dei problemi e su caratteristiche dei sistemi software…” (ibidem). Di seguito i principali paradigmi computazionali con i relativi linguaggi: Paradigma imperativo riunisce la famiglia dei linguaggi Fortran, Cobol, Algol, Pascal, Ada, C, rappresentano quelli di uso comune nel settore industriale. Paradigma funzionale (Lisp e suoi dialetti cfr. Cap.2§ 2.1.2) e linguaggi logici (Prolog e dialetti). Sono utilizzati per applicazioni di intelligenza artificiale. Paradigma orientato agli oggetti E’ il più recente tra i tutti i paradigmi. Include linguaggi come C++. Java. Il suo elevato livello di astrazione può includere la rappresentazione di altri livelli paradigmatici (funzionale e imperativo) dando vita a linguaggi “ibridi” come CommonLisp/CLOS (Common Lisp Object System) il linguaggio su cui è basata la progettazione dell’interfaccia visiva di OpenMusic. “I linguaggi ad oggetti costituiscono la cerniera di collegamento tra computazione e interazione…un lungo percorso di ricerca e sviluppo, non ancora concluso, ispirato al concetto di componente sofware”. (ibidem) 1.3.1.1.2.1 Componenti software e interazione “Nello sviluppo di un sistema software l’infrastruttura per l’interazione e i costrutti e i meccanismi di astrazione/specializzazione assumono un ruolo preponderante rispetto alla elaborazione. Le diverse componenti computazionali del sistema subiscono un forte processo di astrazione che pone sullo sfondo i dettagli della loro struttura interna e pone in primo piano gli elementi che permettono di comprenderne l’interazione con altri elementi del sistema.” (ibidem) “Quando un sottosistema è caratterizzato da un insieme omogeneo e ridotto di funzionalità e può essere utilizzato in contesti diversi, allora prende il nome di componente software. Gli elementi che permettono l’interazione cn un componente 42
Condivide, con il concetto di paradigma in Kuhn (cfr.nota 2) il medesimo significato relativamente alla tecnologia informatica.
sofware sono genericamente denotati con il termine interfaccia…dotata di una precisa unità concettuale e/o funzionale” (ibidem) Nel contesto di questa dissertazione si consideri OM come l’interfaccia visiva con cui il compositore interagisce per definire i suoi algoritmi sintatticamente e semanticamente definiti dal paradigma funzionale e orientato agli oggetti. “I concetti di componente software, di interfaccia e di interazione progressivamente occupando oggi parti sempre più ampie dell’information connesso ai moderni linguaggi di programmazione…e l’uso di linguaggio ad induce il programmatore a seguire, in modo più o meno consapevole, principi quali modularità, incapsulamento43…” (ibidem)
stanno space oggetti primari
Il paradigma ad oggetti sfrutta quindi la funzionalità di un’interfaccia44 in modo tale da determinare la struttura e comportamento di oggetti senza costringere l’utente alla conoscenza di dettagli come la struttura stessa di un particolare oggetto. (cfr.Cap.2 § 2.1.3) Al di la delle definizioni tecniche che caratterizzano il paradigma è importante sottolineare come il modello ad oggetti rappresenti un modello ispirato direttamente dal mondo reale. Un oggetto del mondo reale (un veicolo, un tavolo, un accordo, l’archetto di un violino…) trova nel paradigma ad oggetti un nuovo meccanismo di astrazione in cui “l’attenzione può essere focalizzata non tanto sulla struttura interna e sullo specifico funzionamento di un oggetto, quanto sulla sua caratterizzazione astratta costituita dall’interfaccia. Possedere l’interfaccia di un oggetto è condizione sufficiente per il progetto e lo sviluppo”. (Natali 1999-2000) E’ questo un punto di fondamentale importanza. Si pensi alla necessità di ogni possibile dominio di applicazione per cui è necessario specificare un insieme di oggetti finalizzato alla soluzione di problemi per quel dominio particolare. Di quali oggetti per esempio ha bisogno il compositore che vuole lavorare con la composizione? Se l’interfaccia di un oggetto è condizione sufficiente per il progetto e lo sviluppo, quale interfaccia di un oggetto è condizione sufficiente per il processo compositivo? Ci si accorge ben presto di quanto la domanda possa risultare di difficile interpretazione poiché implica diversi livelli di descrizione del fenomeno (cfr.§1.2.1). E’necessario capire a quale livello dell’oggetto e del processo di composizione il compositore vuole lavorare. Per esempio è necessario capire se il compositore desidera lavorare sul segnale audio, 43
“Proprietà di rendere inaccessibile la rappresentazione concreta dei dati e di permetterne la
manipolazione solo attraverso le operazioni di un insieme di operazioni di interfaccia.” 44
Per interfaccia non si intende ancora interfaccia grafica dove un oggetto è rappresentato da un’icona. Con una metafora un oggetto può essere paragonato ai vocaboli di un vocabolario il cui significato preciso può essere più o meno noto all’utente (il programmatore).
per cui sarebbero necessari oggetti che rappresentano il segnale audio. Di questo segnale quali elementi è possibile nascondere? Quali processi applica il compositore al segnale audio? E se il compositore desidera lavorare con il modello di rappresentazione musicale fornito dal sistema di notazione tradizionale, quali oggetti per rappresentare tale sistema? A tutte queste domande abbiamo detto che la storia dell’informatica musicale ha cercato di rispondere con l’evoluzione dei software per la composizione al computer e per la composizione assistita. Tuttavia è necessario innanzitutto comprendere a fondo il perché il compositore dovrebbe occuparsi di programmazione per fare computer music, che equivale a domandarsi dove si situi lo specifico informatico, e quale “valore aggiunto” questo rappresenti per la composizione musicale. 1.3.2 La composizione musicale e le tecniche dell’artificiale, manuale e automatizzato “Il numero guida le forme, si dispone, si ordina in proporzioni, in somme, in differenze…suggerisce inversioni, retrogradi, contrapposizioni, simmetrie…il numero è legato alla scrittura…in sé è percepibile come una associazione di atti pseudologici: pseudologici perché formali, legati al numero come quantità.” Franco Donatoni (da Il Sigaro di Armando, Spirali edizioni)
“Alla base dell’informatica…sta la procedura effettiva o algoritmo, cioè l’elencazione ordinata, precisa ed esauriente dei passi necessari per giungere a un certo risultato partendo da certi dati, cioè in senso più lato, per guidare verso un certo stato il sistema costituito da elaboratore-programma-dati. Sotto questo profilo fondamentale l’informatica non è legata a quello che è il suo strumento per eccellenza, il calcolatore elettronico (o computer), poiché può essere concepita e praticata anche a mano, come si è fatto per secoli.” (Longo 1998) Il compositore David Cope, noto per i suoi studi sulla simulazione di stili musicali al calcolatore, sostiene che il termine computer non definisce un particolare prerequisito per la definizione di musica algoritmica; cioè di una musica la cui struttura formale sia dedotta da particolari procedimenti logico-numerici. Il calcolo, il numero e la proporzione, sono stati elementi sempre più o meno importanti nella storia della composizione musicale. In alcuni periodi (in particolare dalla nascita della scrittura musicale fino al rinascimento e nel XX° secolo) sono diventati parte integrante di quel lavoro razionale a cui si è fatto riferimento agli inizi di questa dissertazione.
A partire dalle leggende legate alla figura del filosofo Pitagora, la musica, in occidente, si è sempre fornita di intepretazioni formali del materiale sonoro. (Gozza 1989) Il monocordo, “macchina calcolatrice” dei pitagorici, fu lo strumento prescientifico per la verifica sperimentale del rapporto tra sensazione uditiva e astrazione numerica. Esso ha rappresentato uno strumento fondamentale per la valutazione dei sistemi di riferimento sonoro sia del discorso, o della speculazione filosofica, intorno ad essi. Stabilite le relative proporzioni, divenne possibile la comparazione delle misure, per l’auscultazione e l’intonazione degli intervalli; cosa che attribuiva al semplice artefatto tecnologico un valore simbolico e metafisico, un valore che ri-conosce “nel suono, “a priori”, una sintesi fra oggetto e valore, materia e spirito, fuori e dentro, il mondo e l’io”. (Kaiser) Nel XIII° secolo Johannes De Garlandia, erede della tradizione pitagorica, definiva la musica come scienza del numero in relazione al suono, definizione che sanciva la relazione con il Quadrivium boeziano cioè con quell’ambito di studi sulle arti liberali che vedeva l’ars musica a fianco dell’aritmetica, della geometria e dell’astronomia. (Meyer 1992) La scienza del numero, quella definita da Boezio nel De Institutione Arithmetica, fu reinterpretata dai teorici della musica medioevali e coincise con la teoria delle proportiones. Una teoria che traeva origine dalla tradizione dei pitagorici, di Platone e di Aristotele per poi fissarsi “nel Canone di Policleto e nell’esposizione che ne aveva fatto successivamente Galeno…divenne gradatamente documento di estetica dogmatica. Da questi testi nacque dunque il gusto di una formula elementare e polivalente, di una definizione della bellezza che esprima numericamente la perfezione formale…” (Eco 1987). In che senso musica come scienza del numero? Nelle menti dei musici e musicisti medioevali la teoria delle proportiones governa il momento speculativo teorico quanto quello compositivo micro e macroformale. Si pensi alle proportiones come “sistema che regola la diminuzione o l’aumento dei valori di durata secondo determinati rapporti numerici” (Azzaroni 1997) oppure all’utilizzo del complesso sistema di proporzioni dei mottetti arsnovisti o nel celebre mottetto Nuper Rosarum Flores di Guillaume Dufay, la cui nascosta numerologia rimanderebbe al simbolismo ecclesiologico e alle proporzioni con cui era stato edificato il tempio di Salomone (Carozzo Cimagalli 2001). Nella storia della musica occidentale il numero assume cioè una vera e propria rilevanza strutturale, o meglio, una rilevanza finalizzata all’emergenza ed al controllo delle diverse fasi di strutturazione della forma musicale. In particolare ciò è avvenuto nel XX°secolo, a partire dalla nascita del metodo per la composizione dei dodici suoni fino alla pubblicazione delle “profetiche” teorie di
Schillinger nel 194645, dalle tecniche del serialismo integrale fino alle tecniche automatiche aleatorie di John Cage legate all’I-Ching. Infine, con l’informatica musicale e la composizione assistita non solo si chiama in causa il numero (come elemento astratto e ordinatore) ma anche l’automazione del processo di organizzazione numerica. Indipendentemente dall’evoluzione della tecnologia informatica si sono poi succedute diverse critiche alla rigida interpretazione dei sistemi generativi artificiali (come le matrici seriali, le permutazioni, calcoli probabilistici) per cui divenne necessario piegare il numero alla volontà estetica per inaugurare la rinascita, come sostiene Alessandro Solbiati, “delle possibilità espressive di un pensiero compositivo cosciente” (Solbiati 2000), dell’atto percettivo come progetto (“L’automatismo si è contaminato di invenzione” sostenne ancora Donatoni). Possibilità che non precludono affatto l’utilizzo del numerico o dell’algoritmico. A tale proposito (Solbiati 2005) e i saggi contenuti in (Solbiati 2000) rappresentano una preziosa testimonianza della poietica di un compositore che utilizza il numerico per guidare l’emergenza di materiale e di figure. Le osservazioni sono di particolare importanza perchè stabiliscono criteri generali e condivisi circa la relazione di un compositore con il materiale ottenuto attraverso processi automatici; nell’artigianato di Solbiati ottenuti in un ambito che non contempla l’utilizzo del computer. Una prima constatazione di Solbiati nasce dalla seguente osservazione: -
-
la casualità dell’esito dei processi generativi non dovrebbe costringere (come avveniva in alcune prassi seriali, aleatorie e probabilistiche)46 il compositore ad accettare qualsiasi tipo di risultato e di conseguenza ad utilizzarlo direttamente in partitura…”se il principale scetticismo rispetto le tecniche seriali da una parte e i comportamenti aleatori dall’altra si riferisce all’impossibilità di ascoltare un ordine compositivo, tale scetticismo permane anche per i materiali ottenuti da siffatti processi automatici.” “Ma poco dopo ci si accorge di una differenza fondamentale: dall’applicazione di una regola i materiali nascono necessariamente, e l’occhio del compositore è assolutamente libero di indagarli, cogliendo in essi relazioni ed associazioni vere, in quanto essi sono nati al di fuori della propria volontà locale. Egli recupera quel fondamentale ausilio al fare artistico che è
45
Vale in questo contesto la definizione di Schillinger (1895-1943) secondo cui ogni struttura matematica può definire una relativa articolazione di un materiale musicale. Le teorie di Schillinger sono esplicitamente criticate dai maggiori esponenti dell’attuale teoria matematica della musica. Si veda a questo proposito la recensione del libro di Luigi Verdi “L’organizzazione delle altezze nello spazio temperato” da parte di Moreno Andreatta (membro dell’equipe di representation musicales dell’ircam, sviluppatore della libreria OMZN per OpenMusic). 46 E’necessario ricordare come anche all’interno delle prassi seriali aleatorie e probabilistiche si sono sviluppate differenti interpretazioni del modello generativo con il quale tuttavia si instaurava diversi vincoli.
lo stupore: guardare un materiale nato in questo modo, coglierne alcuni nessi imprevisti, portarli a sé e trasformarli, è il primo passo per un recupero della fiducia in una necessità interna del portato inventivo e immaginativo dell’artista. Infatti, il materiale autogeneratosi agisce nei confronti del compositore come uno specchio in cui egli crede di vedere inevitabilmente alcune relazioni, senza neppure accorgersi che è il suo inconscio creativo a indirizzarlo verso alcune relazioni e non verso altre.” (Solbiati 2000) Ne deriva la seguente importante considerazione per tutta la dissertazione (quasi un principio “etico” che guida l’attitudine del compositore nei confronti della tecnologia informatica): I criteri di scelta del materiale, indifferentemente derivati da un modello generativo artificiale manuale o automatizzato informatico, “si possono usare o rifiutare in conformità a quel che si desidera ottenere, e all’utilità complessiva dei risultati che ne derivano” (Zellini 1997) L’invenzione, di conseguenza, può essere applicata tanto a monte del processo nella formulazione dell’algoritmo, quanto nel procedimento di osservazione del risultato. Per concludere: la tesi di questa dissertazione può dirsi completa solo nel momento in cui si rilevano nella composizione musicale al computer tout court i caratteri propri di una matura poetica del comporre. Cioè di una maturità (all’insegna dell’indipendenza) della conoscenza47 rispetto ai mezzi e ai metodi di produzione48. In-dipendentemente dalla tecnologia il compositore interpreta il mezzo per interrogare il proprio fine in quanto artista. Il fine (la composizione) non solo giustifica il mezzo (le tecnologie dell’artificiale manuale/automatizzato) ma rende quest’ultima come condizione necessaria affinchè quella determinata finalità possa manifestarsi e diventare così parte integrante del patrimonio delle possibilità da cui il compositore può attingere. Nel momento in cui tali possibilità si manifestano al compositore mediante uno strumento informatico, in particolare relativamente alla prassi della composizione musicale assistita dal computer, è possibile sostenere con il compositore argentino Horacio Vaggione, quanto sia “…abusivo mantenere ancora oggi un’unione tra ciò che si potrebbe chiamare composizione assistita da computer e il ricorso a combinazione meccaniciste che non realizzano una relazione sufficientemente forte con azioni e percezioni musicali…certamente un compositore può ben servirsi di meccanismi di tutti i tipi per 47 48
Si intende qui conoscenza come sinonimo di scienza nel senso più lato del termine. Agostino DiScipio, 2005 comunicazione personale.
generare del materiale…una critica della “composizione automatica” non implica in alcun caso un rifiuto di qualunque tipo di indeterminismo: vi sono innumerevoli imprevisti del caso in ogni recesso dello spazio-tempo…questi imprevisti dovrebbero essere i benvenuti, poiché sono potenzialmente “morfoforici” (portatori di forme). Per le stesse ragioni non si tratta nemmeno di rifiutare qualunque tipo di automatismo. Ciò di cui si tratta è piuttosto il tentativo di mettere in prospettiva questi modi ontologici, al fine di evitare qualunque tipo di reificazione del “meccanico” e qualunque vassallaggio della musica a quest’ultimo. Non si tratta di individuare il luogo dell’aleatorio o del formale nei processi di composizione, bensì sia gli approcci lineari nei quali il concetto d’interazione non ha alcun ruolo, che tutti i tentativi di reificazione del meccanico come modo ontologico fondatore dell’azione compositiva.”. (Vaggione 2002) Vaggione evidenzia il ruolo attivo (critico) del compositore, non solo in quanto “interprete” dei possibili risultati forniti dal sistemi artificiali, ma proprio in quanto elemento centrale (osservatore e ri-organizzatore) di una nuova rete di possibili configurazioni formali emergenti. Si delinea, innanzitutto, una concezione della composizione che rivendica a sé il dominio del libero arbitrio. “La problematica delle tecnologie musicali riguarda quindi la nozione più generale per cui l’esperienza dell’arte si dà come misura dell’invenzione: all’esigenza “espressiva” (cioè all’ambito delle istanze rappresentative, estetiche), essa affianca un elemento che implica sempre un superamento, uno sconfinamento delle tecniche costruttive date. É in tal senso che quello dell’arte in generale è un lavoro che riguarda la libertà – la libertà “di azione” come presupposto per quella “di espressione”, dunque come elemento decisivo e fondante.” (Di Scipio 2000) Sulle conseguenze di questo e relativamente alla composizione assistita ancora Vaggione: “Venendo al significato di una assistenza informatica nel campo della creazione musicale…occorre far piazza pulita, nella nostra prospettiva, di qualche equivoco possibile…non si tratta di concepire il computer come un sostituto del compositore, e questo a qualunque tipo di livello. La libertà di scelta del compositore deve esercitarsi ovunque e in qualunque momento…” (ibidem) Riassumendo: è stato evidenziato come la definizione di un artigianato compositivo numerico e algoritmico non sia esclusivo della composizione al computer. Dalla nascita della scrittura fino al rinascimento e poi nel XX° secolo esso ha accompagnato l’artigianato e il lavoro razionale di molte esperienze compositive. In particolare si è visto
come a partire dalle esperienze post-seriali49, si sia cominciato a guardare in modo differente al materiale generato, in modo critico e con un alto livello di interazione con esso. Con le necessarie distinzioni poetiche e strategie poietiche, tale è anche l’attuale atteggiamento dei compositori50 che si sono maggiormente interessati agli aspetti epistemologici della composizione al computer a partire da Horacio Vaggione, Otto Laske, Curtis Roads, Agostino DiScipio, e Jacopo Baboni Schilingi. Vi è infine una ulteriore considerazione che permette di riallacciarci alla citazione di inizio paragrafo di Longo: constatata la libertà e l’indipendenza del compositore dai modelli artificiali dove si situa lo specifico informatico se questa reifica cose che già possiamo fare con le mani? Si introduce alle modalità dell’assistenza e alle tecniche deterministiche.51 Il paragrafo successivo introduce ad alcuni aspetti peculiari della tecnologia informatica che si estendono alla prassi della composizione al computer. 1.3.2.1 Prospettive di una estetica computazionale per la composizione musicale Ci si chiede quindi in che modo il calcolatore ha contribuito allo sviluppo della concezione di nuove forme, all’elaborazione e alla trasformazione del materiale, cioè allo sviluppo di nuove tecniche e nuove idee. Vediamo come prosegue la precedente considerazione di Longo circa le proprietà, considerate d’ora in avanti come peculiari, dello strumento informatico: “…l’avvento del calcolatore ha impresso all’informatica una svolta pratica e concettuale enorme…la natura simbolica astratta dei segni su cui vengono eseguite le operazioni, segni che si possono interpretare in molti modi…una pluralità di interpretazioni possibili si riflette in una molteplicità di paradigmi in cui il calcolatore può rientrare: - è una macchina che esegue programmi (per esempio calcoli) - è una macchina il cui comportamento simula comportamenti intelligenti (è uno strumento dell’intelligenza artificiale)
49
Solbiati identifica in Maderna l’inizio di questo cambiamento. Significativa, a questo proposito, la presenza di un saggio di Mario Baroni dedicato analisi della composizione Duo pour Bruno di Franco Donatoni, nel volume Bruno Maderna Studi e testimonianze a cura di Rossana Dalmonte e Marco Russo. Significativa anche la presenza, nella biblioteca di Bruno Maderna, del volume di Italo Ghersi, Matematica dilettevole e curiosa, Milano Hoepli 1988 (cfr. nota 42 Veniero Rizzardi “La nuova scuola veneziana 1948-1951” in Le musiche degli anni Cinquanta, Archivio Luigi Nono Studi II 2003 Leo S.Olschki 2004) 50 Ci si è spesso riferiti a questo approccio come ad un approccio etico alla tecnologia. 51 Per la definizione di tecniche non-deterministiche è necessario introdurre concetti derivati dall’Intelligenza artificiale (cfr.§ 1.4.4)
- è una macchina la cui struttura si ispira a quella del cervello e si propone come suo modello …E’importante rilevare che l’uso dei calcolatori consente non solo di eseguire in modo più efficiente compiti già eseguiti a mano, ma consente di svolgerli in modi diversi e di eseguirne di nuovi inediti. Inoltre il calcolatore consente di (e obbliga a) scendere nei minuti particolari di un’operazione e di osservare in filigrana i meccanismi e le strutture soggiacenti altrimenti invisibili. L’esecuzione passo passo ci mette così di fronte ai problemi che costituiscono quel “mare” che sta in mezzo tra il “dire” e il “fare”. “l’algoritmo costituisce la differenza fondamentale tra l’impostazione informatica e quella tradizionale (filosofica e scientifica) della conoscenza. Più simile all’attività pratica, passo passo, degli artigiani che a quella teorica e speculativa dei pensatori, l’informatica consente di articolare con precisione potenzialmente arbitraria i passaggi che portano dal concetto primo o dall’intuizione al suo dispiegamento analitico e all’attuazione….più sorprendente è l’influenza che l’informatica esercita sui costrutti teorici…” (Longo 1998) Constatata l’indipendenza dell’invenzione del compositore, a che cosa serve il computer? In che modo assiste il compositore? In quale momento del processo creativo è necessario l’utilizzo del computer? Di seguito si farà cenno (cfr. Baboni Schilingi 2005 per l’approfondimento) ad alcuni concetti fondamentali per lo sviluppo di una teoria musicale che integri gli aspetti computazionali come momento fondamentale per la comprensione, l’analisi ma anche le possibilità poietiche delle prassi della composizione qui considerate. “La spettacolare evoluzione dell’informatica musicale a partire dalla metà degli anni Ottanta ha fornito ai compositori degli strumenti estremamente potenti che, fra l’altro, permettono loro di effettuare dei calcoli che si sarebbero rivelati proibitivi per la maggioranza di essi. Questa enorme capacità messa al servizio della composizione rende possibile la generazione di prcedimenti musicali di enorme complessità, così nel campo della sintesi sonora, come del calcolo combinatorio e delle probabilità, o delle leggi del caos. Tutto ciò che è possibile quantificare può essere manipolato in una direzione o in un’altra.” (Provost 2001)
Simulazione del modello e livelli di interazione Modello, simulazione e formalizzazione sono tre caratteristiche peculiari dello strumento informatico. Con la possibilità di implementazione degli algoritmi, la tecnologia informatica ha fornito all’uomo uno strumento potente per intepretare la realtà e gestire le conoscenze relative ad un dominio particolare. Essa permette la simulazione (Parisi 2001) di un modello virtuale della realtà attraverso un processo di formalizzazione. La composizione assistita è un nuovo sistema basato su modelli i quali sono dotati di un alto livello di interazione. MODELLI I modelli possono essere fisici, matematici, musicali, dedotti dagli studi sull’Intelligenza Artificiale, dalla teoria dell’Informazione o da modelli teorici della psicoacustica. Qualsiasi costrutto mentale, grazie al principio della simulazione, è passibile di essere trasformato al computer in un modello di se stesso. Secondo la definizione di Gérard Assayag un modello è “un dispositif formel qui, rendant compte, au moins partiellement, des caratéristiques d’un processus matériel, en autorise experimentalement la simulation aux fins de vérification, d’observation ou encore de production de processus similaires”. (Assayag 1993) L’utilizzo di un particolare modello implica differenti punti di vista che sembrano convergere poiché “l’informatica tende ad unificare sia le istanze esplicative che quelle generative del modello” (ibidem) avvicinando così prassi analitica e composizione musicale. Tuttavia, continua Assayag, la ricerca analitica elabora i propri strumenti mediante il continuo affinamento di un modello, mentre il compositore costruisce ed esplora creativamente i modelli. Avere a disposizione un modello vuol dire poter sottoporre questo a strumenti di elaborazione e trasformazione prima inimmaginabili. Un modello, per la composizione musicale, può essere qualsiasi procedimento descrivibile nei termini di una sua implementazione algoritmica: è possibile formalizzare una teoria delle proportiones, di procedimenti isoritmici, di costruzioni armoniche funzionali o contrappuntistico modali e far interagire questi modelli tra loro. Un modello può anche essere l’evoluzione di un profilo melodico, decritto secondo funzioni matematiche caotiche (cfr. librerie per OpenMusic di Mikhail Malt OMChaos e OMAlea). Un’analisi generale di questi modelli ha permesso una radicale riconsiderazione dei processi di generazione del materiale e di trasformazione degli stessi. In particolare con il processo di trasformazione; esso trova un’ adeguata contestualizzazione poietica nella teoria di Guerino Mazzola (Mazzola 2002), nella teoria della musica ipersistemica di Baboni Schilingi (Baboni Schilingi 2005) e nella prospettiva analitica delineata da Luigi Verdi (Verdi 1998).
INTERAZIONE Come si è precedentemente definito a proposito delle prassi compositive post-seriali, il compositore mantiene un alto livello di interazione con il materiale generato. Lo sviluppo del concetto di algoritmo nel passaggio da semplice procedura a componente software, fino a diventare oggi interfaccia ad oggetti, implica differenti possibilità di interazione dell’algoritmo. Attualmente, il concetto di oggetto, assicura all’utente la possibilità di gestire diversi livelli di interazione dell’algoritmo con se stesso (cfr.§ 1.3.1.1.1 e strutture di controllo per diramazione e iterazione), con altri algoritmi e di questi con l’utente finale. “…a palette of diverse compositional instances is needed, including strategies for controlling and qualifying results and choices, according to given musical project. These compositional instances, to reiterate, are not envisaged here in the frame of the traditional approach to algorithmic (automatic) composition: they are instead seen in the light of the ongoing paradigm shift from algorithmics to interaction, where the generalpurpose computer is regarded as one component of complex systems, anc where the composer, being another component of these complex systems, is imbedded in a network within which he or she can act, design, and experience concrete tools and (meaningful) musical situations”. (Vaggione 2001) Nella prospettiva delineata dal compositore argentino Horacio Vaggione, grazie a questa possibilità, la composizione assistita implica una “interazione forte” tra modello e scrittura tradizionale, computer e compositore; una possibilità che ha conseguenze concrete nello studio, l’analisi e lo sviluppo dei processi di generazione e trasformazione del materiale musicale. La composizione assistita si configurà così come una azione complessa che integra la scrittura diretta, che è frutto di un processo di creazione, di intuizione, con procedure algoritmiche di trasformazione le quali non fanno altro che “amplificare” il criterio di scelta proiettandole su diverse scale temporali. Ancora Vaggione sull’interazione: “…l’azione locale della scrittura ha la possibilità di integrarsi al processo algoritmico il quale può essere trasformato localmente per azione di scrittura diretta…è possibile quindi imbricare le possibili azioni senza che l’una debba soffrire dell’infeudazione dell’altra, provocando al contrario la mutua amplificazione delle loro implicazioni, tra scelta e vincolo, cambiamento ed ereditarietà, località e vettorizzazione. E’possibile così cominciare scrivendo in notazione musicale…oppure è possibile partire dalla generazione di materiale…insisto su un punto capitale…il rapporto tra scrittura diretta e trattamento algoritmico non è completo se si ignorano le possibilità di interazione e di recursione tra le due modalità”. (Vaggione 1996) Nella prospettiva teorica di Baboni Schilingi (Baboni Schilingi 2005) sono tre i livelli di interazione musicale possibili nel contesto della composizione assistita:
-
interazione tra compositore e modello musicale
Rappresenta un ulteriore punto di vista su quanto espresso precedentemente da Vaggione. Baboni Schilingi riconduce il rapporto interattivo tra compositore e modello al rapporto tra creazione e generazione (cfr.§ succ.).52 -
interazione tra modelli musicali diversi
Tecniche di “morfosi”, influenze, perturbazioni, contaminazioni, ibridazioni, ecc. -
interazione tra modelli musicali e sistemi extra musicali
Rappresenta il modello di interazione più studiato in letteratura53 in cui, per extramusicale, si intende qualsiasi sistema non appartenente alla musica, come immagini, statiche o in movimento, video, danza che, grazie ad un protocollo di scambio di dati, può influire direttamente sulla generazione o trasformazione di un modello del materiale musicale. Questo processo può avvenire in tempo reale o in tempo differito. Creazione e generazione, tra etica ed epistemologia L’atto intuitivo e l’invenzione, sono prerogativa di un comportamento umano. La teoria della musica ipersistemica (Baboni Schilingi 2005), oltre ad approfondire la conoscenza dei livelli di interazione, relaziona in modo particolare creazione e 52
E’questo un momento fondamentale di tutte le prassi artigianali e creative al computer, non solo quindi, musicali. Riguardo al rapporto tra compositore e modello, scrittura e processi generativi e di trasformazione si potrebbe fare riferimento all’artigianato dell’ architetto Frank O’Gehry. Genesi della forma nell’architettura di O’Gehry è il gesto, atto dell’intenzione cristallizzato sulla carta (si veda il testo di Rappolt-Violette Gehry Draws MIT press 2004 che raccoglie i disegni di Frank Gehry) alla maniera di Leonardo o di Dürer. Solo successivamente questo gesto viene tradotto in modello, in modo da permettere l’indagine micro e macroscopica dell’intenzione gestuale manifestata nel disegno. In questo processo è possibile stabilire i primi criteri per per l’emergenza formale quindi per la progettazione. Così, una piega o un movimento della mano possono essere proiettati su più dimensioni permettendo così i tipici sbalzi volumetrici delle architetture di O’Gehry. Per alcune di questi tipici modelli trasformazionali architettonici si veda il testo Architettura in NURBS, il disegno digitale della trasformazione di Massimiliano Ciammaichella edizioni testo&immagine 2002. In questo testo sono ripercorsi alcuni processi di generazione della forma sottoposta a operazioni di deformazione geometrica. Per analogia con questi processi si confronti con quanto descritto in Cap.5 § 5.3 in particolare il modulo della libreria Profile bpf-interpolx. 53
“The abstraction, Trasmission, and reconstruction of Presence: A proposed Model for Computer Based Interactive Art by Christopher Nathan Dodge Submitted to the program in Media Arts and Sciences School of Architecture and Planning in partial fulfillment of the requirements for the degree of Master of Sciences in Media Arts and Sciences at the MASSACHUSETTS INSTITUTE OF TECHNOLOGY, 1997.
generazione. Prerogativa dell’uomo, del compositore, è il processo di invenzione, di creazione. I processi di invenzione coincidono con il libero atto di scelta del creatore e sono funzionali ad una intenzione specifica. Al processo di generazione e di simulazione del modello, contribuisce invece l’artificiale, specchio dell’invenzione, che si manifesta nel computer con modalità che possono essere sia quelle tradizionali manuali, sia quelle dove le mani non possono arrivare; mani, i cui “limiti fisici ci negano l’esplorazione di ciò che non possiamo costruire” (Maeda 2000). Prerogativa dell’invenzione è il processo creativo umano. Il contributo del computer si situa principalmente nella generazione del materiale e in ciò che noi vogliamo riconoscere, nel computer (nei risultati dei nostri algoritmi), come prerogativa di una possibile espressione estetico-musicale. Complessità e strutture La composizione musicale assistita ha relazioni molto strette con la scienza dei sistemi complessi. In particolare per quello che riguarda le condizioni che rendono possibile la genesi (generazione) del materiale. Facciamo qui riferimento al concetto di automatismo derivato da quello di emergenza e di auto-organizzazione (Serra-Zanarini 1990). In considerazione della definizione di informatica data all’inizio di questo capitolo possiamo considerare l’automatismo come caratteristica peculiare del sistema informatico. 1.4 La composizione musicale assistita tra informatica musicale e musicologia computazionale Si è detto come le tecnologie dell’assistenza ricontestualizzino gli oggetti e i processi del proprio dominio di applicazione (la composizione musicale) parallelamente all’evoluzione della tecnologia. In questo contesto la composizione musicale assistita dal computer definisce un ampio e complesso processo di integrazione di conoscenze e tecnologie che ha avuto inizio con le prime esperienze di informatica musicale (cfr.§ successivo) verso la fine degli anni 50 e si è sviluppato a partire dagli anni 70 parallelamente alla diffusione della musicologia computazionale. Di seguito una breve introduzione ai due settori più importanti per lo studio, la ricerca e la produzione di musica mediante le tecnologie informatiche: la musicologia cognitiva e l’informatica musicale (o computer music).
1.4.1 La nascita dell’informatica musicale L’informatica musicale, o computer music, rappresenta quell’insieme eterogeneo di discipline scientifiche altamente specializzate54, che intrattengono con l’attività artistica e compositiva un rapporto del tutto privilegiato e particolare. La computer music nasce negli Stati Uniti nel 1957 anno a cui risalgono i primi pioneristici esperimenti di composizione al computer di partiture di Lejaren Hiller e di sintesi del suono di Max Mathews. Essa nasce parallelamente al dibattito delle avanguardie europee sul rapporto tra scienza, musica e tecnologia elettroacustica. Ma è già a partire dagli anni 60 che si sviluppa “anche per l’Europa una prima fase della stagione informatica, che nei successivi decenni rappresenterà un autentico punto di svolta nel rinnovamento della ricerca e della prassi musicale del nostro tempo. Una stagione determinata dall’apporto diretto di alcuni dei protagonisti dell’avanguardia musicale…quali Xenakis e Koenig, nella cui musica strumentale e tecnologica troviamo già in nuce le motivazioni più profonde che conducono a un’idea algoritmica della composizione…fortemente radicalizzato nel determinare una dimensione formalizzante del processo ideativo e realizzativo.” (Galante Sani 2000) Per comprendere meglio quali siano le svolte nel rinnovamento della ricerca che hanno influenzato lo sviluppo delle tecnologie a cui si fa riferimento, è necessario comprendere meglio la natura delle esperienze di Max Mathews e Lejaren Hiller. Esperienze che, si ricorda, differiscono sostanzialmente circa l’oggetto della composizione (Mathews la sintesi, Hiller la produzione di partiture) ma non del tutto nell’adozione di un criterio deterministico per la genesi formale. Con diverso accento, esplicito, ‘forte” in Hiller, (per i 54
Una tassonomia per la definizione degli ambiti disciplinari inerenti alla computer music (o informatica musicale) è stata proposta da Stephen Travis Pope nell’ambito di un’ampia ricerca documentaria, bibliografica e discografica. La proposta (disponibile a partire dalla homepage del Computer Music Journal mitpress2.mit.edu/e-journals/Computer-Music-Journal), che teneva conto di precedenti tentativi classificatori, individua sette macro aree a loro volta suddivise nei rispettivi settori di ricerca della computer music. Se la tassonomia rispecchia fedelmente gli ambiti della ricerca attuale in informatica musicale tuttavia sono state avanzate delle critiche relativamente al ruolo della composizione in tale sistema classificatorio. La classificazione tende ad evidenziare una forte componente tecnologica che ha subito profonde modificazioni nel corso degli anni. Parallelamente queste definizioni sottointendono complesse modalità di interpretazioni estetiche di tali tecnologie da parte dei compositori. In particolare Eric Lyon, pur riconoscendo come l’organizzazione gerarchica di questa tassonomia rappresenti un ottimo punto di partenza per l’identificazione di aree in cui è necessaria un maggiore impegno della ricerca, così commenta: “One area which I am not yet convinced is best served by this taxonomiy is the composition aspect of computer music. I have developed numerous taxonomies and systematic organizations of various aspects of the field, and have always been overwhelmed by the complexity of possible interrelationship, often quite idiosyncratic, such that I ultimately find myself mapping out my own intuitions – an act which is accomplished much more efficiently and gratifyingly through the compositional act itself; This is no more than my personal experience…”
software di Mathews sarà necessario aspettare le esperienze “deboli” di composizione di Tenney), entrambi non precludono la possibilità di un controllo deterministico della forma musicale. 1.4.1.1 Max Mathews e i programmi MusicN Ripercorrere le origini della sintesi sonora al computer significa innanzitutto confrontarsi con il lavoro e gli studi pioneristici di Max V.Mathews. Nato nel 1926, Max V.Mathews lavorò come ricercatore di acustica presso gli AT&T Bell Laboratories dal 1955 al 198755 dove si interessò alla ricerca di problematiche relative alla produzione digitale del suono nelle applicazioni telefoniche. L’avventura di Mathews ha inizio nel 1957 quando egli “…wrote a compiler which would translate simple instructions into code that would make a computer generate a sequence of binary numbers representing successive amplitudes of a musical sound wave.”56 Così John Pierce, fisico e ingegnere del suono, ricorda la tecnica con cui Mathews ideò il primo compilatore con cui poter sintetizzare suoni, Music 1. Un programma in cui è evidente un embrionale processo di composizione mediante sintesi, con la sola determinazione delle altezze e delle durate dei suoni e di un’unica forma d’onda (triangolare) mediante cui definire il timbro. Nel maggio dello stesso anno Max Mathews utilizzò una breve melodia ideata dal linguista e studioso di acustica Newmann Guttman, per essere sintetizzata da un computer. Nacque così il brevissimo studio monofonico The Silver Scale, considerato la prima composizione musicale i cui suoni sono interamente sintetizzati57 da un computer, un IBM70458 collocato presso i Bell Telephone Laboratories di Murray Hill nel New Jersey. La versione successiva del programma Music I, cioè Music II, fu completata da Max Mathews nel 1958. Il programma fu scritto per “girare” su un IBM 7094, un computer più 55 56
Per una biografia completa www.csounds.com/mathews R.Pierce, John “Recollections by John Pierce” in The historical cd of digital sound synthesis
“COMPUTER MUSIC CURRENTS 13” WERGO 1995 57 Si consideri la volontà esplicita da parte di Mathews di fare musica attraverso l’utilizzo del computer, non da confondersi con le ricerche già in atto presso i Bell Laboratories sul suono e sulla voce; in particolare ciò avveniva attraverso l’utilizzo di un IBM650 già predisposto all’utilizzo e alla sperimentazione di tecniche di speech processing. Oppure con le prime esperienze di hacking del suono di un computer testimoniate presso l’MIT durante gli stessi anni (cfr.nota 90). Quel che interessa è come il contesto tuttavia rese possibile l’incontro con la musica, in un ambito altamente sperimentale e di ricerca. E’importante evidenziare comunque che la ricerca sul suono sia in ambito ingegneristico pre-informatico che musicale precede di molti anni gli eventi di cui si parla. 58 Per una storia dei sistemi computazionali Paul E. Ceruzzi A history of modern computing MIT press 1998, 2003 o The first computers – History and architectures edited by Raul Rojas and Ulf Hashagen MIT press 2000.
potente dell’IBM704 quindi in grado di risolvere algoritmi di sintesi più complessi. Music II era in grado di gestire una polifonia di “quattro voci, con la possibilità di scelta tra sedici forme d’onda”.(Roads 1996) In queste prime versioni del software l’intervento del compositore è piuttosto limitato tanto da far sostenere allo stesso Mathews: “…using this program, the composer does not denote more than he does in conventional musical notation”.59 Nello stesso articolo emergono le prime indicazioni sulle prospettive future di un nuovo linguaggio per la sintesi del suono al computer, a favore di una maggiore libertà compositiva, quindi timbrica, con precise indicazioni circa la modifica di parametri del suono nel tempo, come l’alterazione dell’inviluppo d’attacco e di rilascio del suono. La versione più importante del compilatore di questa prima fase della storia dei software per la sintesi del suono fu MUSIC III programmato da Mathews e dal suo collega Joan Miller nel 1960 (Roads 1996). Il programma fa proprio il concetto di Unit Generators (UGs) tassello fondamentale dei linguaggi per la computer music al fine di generare o processare un segnale audio. 1.4.1.1.1 Il concetto di Unit Generators e il passaggio a MusicV Le unit generators o unità generatrici sono componenti software basate su algoritmi costruiti per uno specifico problema di DSP (digital signal processing), come la generazione di una forma d’onda o la rappresentazione di un modulo come un oscillatore, un filtro. Tutte queste unità possono essere connesse tra loro in modo da generare “a large variety of synthesis algorithms”. (Roads 1996) In questo senso le UGs venivano utilizzate come le unità più piccole di un algoritmo chiamato instruments (o patches) con il quale si definivano uno o più eventi sonori/musicali. Un compositore con l’aiuto delle UGs non aveva più bisogno di definire con numerose righe di codice per esempio un oscillatore, bensì poteva utilizzare direttamente l’oggetto OSCILLATORE in cui tale codice era già pre-definito. E’possibile considerare le UGs come l’equivalente software degli elementi base di unità hardware che, negli 60, erano disponibili ai compositori elettroacustici nei laboratori per la musica elettronica e ai compositori e gruppi pop e rock degli anni 6060. Con le UGs venivano gettate le basi per la versione definitiva del programma nella versione di MUSIC V nel 1968. Così il compositore Henry Pousseur a proposito del nuovo software di Mathews: “Si comprenderà facilmente che essa (MUSIC V nda) costituisce un progresso considerevole nel senso dell’astrazione, e dunque della universalità della massima 59
M.Mathews – N.Guttman “Generation of music by a digital computer” in The historical cd of digital sound synthesis “COMPUTER MUSIC CURRENTS 13” WERGO 1995, pag.30 60
Con i celebri sintetizzatori modulari.
flessibilità di applicazioni dei mezzi…Una buona parte dell’antica attrezzatura solida, di quella che si chiama di solito “hardware”…è qui rimpiazzata da “software”…Per esempio la parola “generatore” o “oscillatore”…non rappresenta più un apparecchio elettronico in “carne ed ossa”, ma un programma di elaborazione, un insieme di algoritmi, capace di stabilire tutti dati particolari di un processo ondulatorio…” (Pousseur 1976) Con la nascita dei componenti software delle UGs si stabilisce quindi un codice comune tra compositori elettroacustici e i programmatori informatici. Infatti, fino a quel momento, non poche furono le difficoltà dei compositori che si volevano avvicinare alla nascente informatica musicale. Music V fu senza dubbio la versione del software piu diffusa tra studiosi e compositori prima dello sviluppo di Csound; a contribuire alla diffusione del software fu anche il testo di Mathews, The Technology of Computer Music del 1969 pubblicato da MIT press, un vero e proprio manuale per l’utilizzo di MusicV. Un ulteriore documento importante per la diffusione di MusicV fu il testo “An Introductory Catalogue of Computer Synthesized Sounds” del compositore Jean Claude Risset; 25 esempi di suoni compilati con Music V per un’immediata valutazione da parte dell’utente del potenziale musicale. L’utente infatti poteva liberamente ascoltare i timbri generati per poi studiare direttamente il codice generativo del relativo suono e sperimentare su di esso.61 Viceversa dall’analisi del codice era possible (per algoritmi semplici) intuirne il possibile risultato sonoro.62 La diffusione del software si estese ben presto presso tutta la comunità dei compositori di musica interressati all’informatica; soprattutto presso tutti i compositori in cui era già ben delineata “una traiettoria che aveva posto al centro del problema musicale, come stavano facendo gran parte dei compositori che operavano in quegli anni negli studi di fonologia delle emittenti radiofoniche, il problema del suono. Dell’organizzazione del suono”. Per il compositore musicale informatico la struttura dei programmi di Max Mathews (riconducibile sempre al modello strumento/partitura) e di quelli da essi derivati rappresenteranno, per molti anni, l’interfaccia attraverso cui costruire il suono. “Il programma determina attraverso i suoi strumenti e nella medesima struttura sia l’ambiente compositivo, la partitura espressa come una lista di azioni nel dominio del tempo dei singoli eventi acustici che include i parametri fondamentali che definiscono l’evento sonoro sul piano qualitativo, sia la definizione dello ‘strumento’ di sintesi o di 61
Notevole fu la diffusione del catalogo di J.C.Risset; successivamente fu adattato anche per Csound. Questo avvenne a partire dal lavoro di Steven Held e Judy Klein dello studio di musica elettronica dell’università di New York. Fu poi grazie a John Philip Gather che il catalogo venne esteso e denominato come“Amsterdam Catalogue of Csound Computer Instrument”, (v. bibliografia ACCCI 2000) strumento didattico fondamentale per lo studio del software. 62 Non sarebbe inopportuno a questo proposito di parlare di vero e proprio solfeggio sonoro del codice nel senso schafferiano del termine.
elaborazione che viene sottoposto al controllo della partitura”. (Galante Sani 2000) Cioè oggetto e processo nel medesimo ambiente di programmazione. Di seguito si riporta la presentazione al pubblico italiano del software di Mathews pubblicata nel testo “La musica elettronica” di Henry Pousseur: “Con le unità generatrici, il compositore può costruire, con una procedura piuttosto semplice, il suo particolare programma di sintesi. In Music5 esso è chiamato “orchestra”, e contiene una grande quantità di sottoprogrammi chiamati “strumenti”. Le unità generatrici dispongono di funzioni che l’esperienza ha dimostrato essere le più utili. Per esempio vi sono oscillatori, sommatori, generatori di rumore e generatori di attacco. Molte delle unità generatrici hanno funzioni concettualmente simili a quelle delle apparecchiature elettroniche utilizzate per la sintesi sonora. All’interno di un dato strumento il compositore può collegare insieme quante unità generatrici desidera…L’ultimo principio mediante il quale vengono specificate le sequenze di suoni è il concetto di nota. Il suono esiste come funzione continua del tempo che parte all’inizio di un pezzo e prosegue fino alla fine. Abbiamo deciso, per motivi pratici, di spezzettare questo suono continuo in porzioni discrete, chiamate note, ognuna delle quali è caratterizzata da un tempo di partenza e da una durata. Questa divisione è senza dubbio una restrizione rispetto alla generalità del processo di sintesi sonora, ma non abbiamo avuto il coraggio di evitarla. E non c’è bisogno di aggiungere che in fondo le note hanno costituito un concetto chiave della musica per parecchio tempo. Il concetto di nota interagisce con lo strumento in modo particolarmente diretto. Gli strumenti sono stati costruiti per “suonare” delle note…le istruzioni da dare allo strumento in corrispondenza di ogni nota vengono scritte dal compositore su una partitura (o dal programma del compositore, se questi preferisce delegare alla macchina questo compito)…In generale strumenti più complessi richiedono un maggior numero di istruzioni, ma per contro sono in grado di suonare note più lunghe e più interessanti. All’interno delle limitazioni create da questi fattori opposti, il compositore può crearsi l’ambiente di lavoro più adatto ai suoi scopi.” (M.Mathews in Pousseur 1976) E proprio “il concetto di nota” fu oggetto di controversie (Laske 2005, Vaggione 1999, Di Scipio 1994). Questo era sentito come un limite all’esplorazione di quella nuova morfologia del suono resa possibile dalla conoscenza dei suoi aspetti microstrutturali e dalla proiezione/modellazione di questi fino a coinvolgere, come dice Vaggione, “un’articolazione dei livelli temporali più diversi.”
In questo senso anche Curtis Roads nota come “the idea of sound morphology63 remains central to the theory of electroacoustic music, in which the musical spotlight is often shone on the sound objet level. In traditional composition, transitions function on the mesostructural level through the interplay of notes. In electroacoustic music, the morphology of an individual sound may play a structural role, and transition can occur within an individual sound object. This ubiquity of mutation means that every sonic event is itself a potential trasformation” (Roads 2001) Ancora Vaggione sottolinea come “non potremmo limitare l’utilizzazione di “rappresentazioni “simboliche” unicamente al campo macroscopico delle note, poiché rappresentazioni pertinenti possono essere ormai definite a qalunque livello temporale: la sintesi e la trasformazione sonora fanno appello ugualmente a delle manipolazioni di simboli a delle ‘scritture’. La questione che si pone, in queste condizioni, è quella di trovare delle strategie per articolare questa diversità di rappresentazione”. Si ribadisce quindi la pertinenza dei processi di sintesi alla composizione assistita dal computer, la quale però pone problemi non indifferenti per articolare la rappresentazione dell’oggetto sonoro. Vaggione approccerà la questione con la definizione di “rete di oggetti numerici”. Più da vicino, il compositore Marco Stroppa, ha lavorato per molti anni al problema e il risultato del suo lavoro, oltre ad essere impresso nelle sue composizioni è implementato nella libreria oMChroma per OpenMusic. Le questioni relative alle definizioni di strategie per l’artcolazione di oggetti sonori nel dominio temporale microscopico non sono oggetto di analisi nella presente dissertazione. E’necessario tuttavia ribadire che queste pongono problemi non indifferenti per i sistemi di assistenza alla composizione; problemi diversi da quelli che sono considerati in questa dissertazione (cfr.Cap.3 5) i quali fanno esclusivamente riferimento al livello del sistema di notazione tradizionale. Storicamente, a partire dalle esperienze di Iannis Xenakis, Herbert Brün e poi con compositori come Agostino DiScipio si è sentita la necessità di progettare software ad hoc o ex novo, che rispondessero a particolari esigenze tecnologiche ed estetiche che non era possibile ritrovare nei programmi di aiuto per la composizione a disposizione. 1.4.1.1.2 Esempi di composizione di sintesi algoritmica in MusicN Già nelle primissime esperienze di composizione di sintesi del suono il problema di struttrazione di tali eventi nel tempo era risolto mediante semplici stratagemmi deterministici della composizione assistita: “the computer has been used to choose pitches randomly within specified ranges, or move gradually from one melodic pattern to 63
La nozione di morfologia del suono è derivata dal V°libro del Traité des objets musicaux di Pierre Schaffer del 1977 testo fondamentale per la definizione che egli diede di oggetto sonoro e di morfologia dell’oggetto sonoro.
another, or to combine a melodic pattern with a foreign rhythmic pattern. These represents computers aids in the composition of music.” (The historical CD of Digital Sound Synthesis, Wergo Computer music currents 13) Tra questi primi esempi sono da ricordare per esempio le esperienze di composizione di James Tenney dal 1961 al 1964 (Tenney 1976).
“The parameters of the individual notes of the composition are generated as a sequence of indipendent random numebers by a random number routine”.
1.4.2 Introduzione ad un linguaggio per la sintesi del suono: Csound Per orientare ai problemi di sintesi del suono, alle importanti questioni estetiche che esso pone, indispensabili ma complementari al soggetto della presente dissertazione, si introduce di seguito al linguaggio per la sintesi del suono Csound. Csound è un potente software per l’analisi, la sintesi e l’elaborazione del suono in tempo reale o differito attraverso cui è possibile implementare virtualmente ogni tecnica di sintesi del suono. Sviluppato da Barry Vercoe del MediaLabMIT, esso è direttamente derivato dalla famiglia dei software MusicN, in particolare dalle versione Music4B e Music4BF sviluppate a Princeton. Di seguito l’evoluzione dei programmi di sintesi MusicN tratto da (Zattra 2003):
Bell Laboratories (Max Mathews) MUSIC1 (1957) MUSIC2 (1958) MUSIC3 (1960) MUSIC4 (1962) Stanford
Princeton
MUSIC6 MUSIC10(1966, J.Chowning – J.Moorer)
MUSIC4B (1965) MUSIC4BF (1966/67, H.Howe)
MUSIC 5 (1966) Queens College
MUSIC360 MUSIC7 (1969) (1968, B.Vercoe)
MIT MUSIC11 (1973, B.Vercoe) Csound (1986, B.Vercoe)
Il programma si presenta come un “sound renderer” secondo la precisa definizione di Richard Boulanger (Boulanger 2000): “It works by first translating a set of text-based instruments, found in the orchestra file, into a computer data-structure that is machine resident. Than, it performs these user-defined instruments by interpreting a list of note events and parameter data that the program reads from: a text based score file, a sequencer-generated MIDI file, a real-time MIDI controller, real-time audio, or a non-MIDI device such as the ASCII keyboard and mouse.” (ibidem)
Csound svolge le funzioni di un compilatore, un compilatore dedicato alla programmazione audio-musicale64. Csound, per generare qualsiasi suono, richiede l’edizione di un file di testo65 chiamato orchestra (l’orchestra, nota come “nome_file.orc”) e di un file di partitura (la score, nota come “nome_file.sco”).66 Dall’algoritmo alla musica di sintesi - sintassi del linguaggio come estensione del concetto di partitura Consideriamo l’esempio di voler sintetizzare il suono più semplice producibile sinteticamente, una sinusoide su un canale mono, per valutare le caratteristiche sintattiche generali del linguaggio Csound. L’ORCHESTRA Il file dell’orchestra si compone sempre di due parti: l’intestazione, nota come header del file, in cui vengono definite: la frequenza di campionamento e di controllo con cui vengono renderizzati gli strumenti successivamente definiti, e il numero di canali necessari in uscita: mono, stereo o quadrifonico. L’header del file fornisce le “quattro informazioni di base che tutti gli strumenti dell’orchestra adotteranno” (Bianchini-Cipriani, 1998): Sr Kr Ksmps Nchnls
(sample rate) o frequenza di campionamento audio (controlo rate) o frequenza di controllo numero intero che rappresenta il rapporto tra sr e kr (number of channels) numero di canali di uscita
Il seguente è un esempio di un header in Csound Sr=44100 Kr=4410 ksmps=10 nchnls=1
64
Recenti sviluppi di Csound, come CsoundAV permetto l’elaborazione e la sintesi di progetti audio, grafica
e video. 65 Si intende un comune file di testo TXT. 66 In sintesi: il compositore, mediante una particolare sintassi, determina in un file chiamato orchestra quali strumenti, timbri, devono suonare la “partitura” definita nel file chiamato score.
Il passo successivo è la definizione degli strumenti (instruments)67. Questa la sintassi: instr 1 aorcs oscil 10000, 440,1 out aorcs endin Si definiscono le caratteristiche dello strumento denominato 1 all’interno di una variabile audio68 a denominata, a piacere, orcs. Nella variabile a vengono depositati tutti i risultati delle operazioni che seguiranno. Il codice operativo (opcode)69 oscil, definisce un oscillatore70, i cui argomenti sono l’ampiezza, 1000071, la frequenza 440 Hz, e la forma d’onda generata dalla funzione 1 definita successivamente nel file score. 67
Il termine instruments fa riferimento ad un algoritmo che costituisce un evento sonoro/musicale. Gli instruments sono costituiti da unità piu piccole chiamate unit generators o UGs. Le unit generators o unità generatrici sono basati su di algoritmi costruiti per uno specifico problema di DSP (digital signal processing), come generare una forma d’onda o smussare l’ampiezza di un suono. Le UGs costituiscono così il tassello fondamentale dei linguaggi per la computer music al fine di generare o processare un segnale. 68 Oltre a variabili audio a esistono anche altre variabili, come le variabili di controllo k calcolate alla frequenza definita in kr; e le variabili di inizializzazione i. 69 “Le unità elementari (opcode) disponibili in Csound possono essere classificate in base alle loro funzioni e precisamente: Unità generatrici (oscillatori, generatori di rumore, unità di ingresso da file audio, etc.) Unità modificatrici (inviluppi, filtri, etc.) Unità di controllo e misura (inseguitori di inviluppo, rilevatori di ampiezza, analizzatori di spettro etc.) Unità di ingresso e uscita” (Bianchini Cipriani 1998) E’ importante sottolineare che ogni opcode possiede la propria sintassi. 70
Possiamo pensare ad un oscillatore come ad “una tabella o vettore cioè un insieme ordinato di valori, accessibili con un indice.” (Cipriani Bianchini 1998) 71
Tabella di conversione da ampiezza assoluta a dB (Cipriani Bianchini 1998):
dB
valore
dB
valore
dB
valore
dB
valore
90
31622.78
60
1000.00
30
31.62
0
1.000
88
25118.86
58
794.33
28
25.12
86
19952.62
56
630.96
26
19.95
84
15848.93
54
501.19
24
15.85
82
12589.25
52
398.11
22
12.59
80
10000.00
50
316.23
20
10.00
78
7943.28
48
251.19
18
7.94
76
6309.57
46
199.53
16
6.31
74
5011.87
44
158.49
14
5.01
72
3981.07
42
125.89
15
3.98
70
3162.28
40
100.00
10
3.16
68
2511.89
38
79.43
8
2.51
66
1995.26
36
63.10
6
2.00
Avviata la compilazione (supponendo già definita anche la score) l’opcode out ha il compito di depositare il risultato nella variabile aorcs in modo da poterlo ascoltare. Riassumendo, questo è il modo in cui si presenta il nostro file di orchestra: sr =44100 kr=4410 ksmps=10 nchnls=1 instr 1 aorcs oscil 10000, 440,1 out aorcs endin LA PARTITURA La partitura, il file score, è costituita da due istruzioni: la prima, come richiesto dall’orchestra, necessita della definizione della funzione 1, la seconda della definizione delle note che suoneranno. Le note sono da intendersi come eventi sonori. Per quello che riguarda la sintassi, nella partitura il primo carattere di ogni riga definisce il relativo codice operativo: i piu importanti i (nota) e f (forma d’onda). Questa la sintassi per la nostra primitiva della partitura o score : f1 0 4096 10 1 dove - f1 definisce il numero della funzione - 0 indica a quale secondo viene creata la funzione (fosse stato 5 indichirebbe al 5°secondo) - 4096 numero di punti che definiscono la tabella dell’oscillatore digitale - 10 rappresenta il metodo di generazione della forma d’onda detto GEN. Ad ogni GEN viene attribuito un numero che definisce un particolare metodo di generazione della forma d’onda, in questo caso la GEN 10 crea una o piu sinusoidi esclusivamente in 64
1584.89
34
50.12
4
1.58
62
1258.93
32
39.81
2
1.26
rapporto armonico tra loro e di ampiezza variabile tra valori compresi tra 0, ampiezza nulla e 10, ampiezza massima. - 1 è argomento del metodo precedentemente definito: in questo caso, riferito alla GEN10, definisce una sola sinusoide72 Quale sarà la durata di questa sinusoide? Lo definiremo nelle note la cui sintassi è composta da campi detti p-fields : i1 0 7 che comunica al software di sintetizzare lo strumento 1 così come definito nello strumento dell’orchestra per una durata che va da 0 e che dura 7 secondi. Fosse stato: i1 9 7 avrebbe fatto cominciare la sintesi della sinusoide al nono secondo per poi durare altri 7”. Questo è utile nel caso volessimo sintetizzare piu sinusoidi che partano da differenti punti nel tempo. Prima di considerare l’utilizzo specifico per il musicista, riassumiamo l’algoritmo in Csound per sintetizzare una sinusoide: ;questa è la nostra orchestra, che, prima di essere compilata, va nominata a ;piacere ;con estensione del file .orc, per esempio sinus.orc sr =44100 kr=4410 ksmps=10 nchnls=1 instr 1 aorcs oscil 10000, 440,1 out aorcs endin
72
Gli argomenti della GEN10 definiscono sinusoidi in rapporto armonico. Se scrivessimo f1 0 4096 10 1 1 1 1 definiremmo quattro sinusoidi in rapporto armonico (prima seconda…quinta armonica) e con stessa ampiezza. Se scrivessimo f1 0 4096 10 10 8 5 3 definiremmo sempre quattro sinusoidi in rapporto armonico (prima seconda…quinta armonica) ma con ampiezza decrescente rispetto ad una fondamentale di ampiezza massima 10.
;questa la nostra partitura, che prima di essere compilata, va nominata a piacere ;con l’estensione del file .sco, per esempio sinus.sco f1 0 4096 10 1 i1 0 7 I file di testo ottenuti sono ora pronti per essere compilati da Csound il quale scriverà su disco, o genererà in tempo reale73, una sinusoide di 440 Hz in mono della durata di 7”. La dimensione temporale Come accennato, un passo avanti potrebbe essere sia quello di sfasare temporalmente la comparsa degli eventi sonori sia l’attribuzione, alla comparsa di ogni singolo evento, di un differente timbro. Utilizzando questo esempio di partitura tratto da Il suono virtuale di Bianchini e Cipriani, vedremo come sia possibile, utilizzando le caratteristiche timbriche della GEN10, lavorare sul timbro e sul tempo: f1 0 4096 10 10 9 8 7 6 5 4 3 ; ;(con questa configurazione otteniamo una fondamentale+armoniche fino alla ;ottava con ordine decrescente d’ampiezza) ; f1 3 4096 10 10 5 3.3 2.5 2 1.6 1.4 1.25 1.1 1 ; ; (con questa configurazione delle ampiezze delle componenti armoniche ;otteniamo un’onda a dente di sega approssimata) ; f1 6 4096 10 10 0 3.3 0 2 0 1.4 0 1.1 ; ; (con questa configurazione delle ampiezze delle componenti armoniche ;otteniamo un’onda quadra approssimata) ; f1 9 4096 10 1 ;(solo fondamentale, sinusoide) f1 12 4096 10 0 1 ;(solo II arm.) f1 15 4096 10 0 0 1 ;(soloIII arm.) f1 18 4096 10 0 0 0 1 ;(soloIV arm.) f1 21 4096 10 1 1 1 1 1 ;(fond.+II, III, IV armonica) 73
L’utente sceglie per la generazione in tempo reale o per la scrittura del file su disco.
f1 24 4096 10 f1 27 4096 10 i1 0 i1 3 i1 6 i1 9 i1 12 i1 15 i1 18 i1 21 i1 24 i1 27
10 0 2 2 2 2 2 2 2 2 2 2
0 0
0 0
0 0
0 0
0 0
1 ;(fond.+VII arm.) 1 ;(solo VII arm.)
Secondo l’esempio sopra riportato e supponendo sempre la relativa orchestra, il risultato sintetizzerà dieci timbri differenti ogni 2 secondi con frequenza fondamentale di 440Hz (così come specificata in .orc). Timbri e modulazione trasformazione.
dinamica
dei
parametri
sonori
–
genesi
della
La composizione musicale elettronica è da pensare come un artigianato legato alla natura dinamica fisico-acustica del suono, alla sua riproducibilità, con tutta le conseguenze estetiche, sintattiche e semantiche che questo significa. Quanto visto negli esempi precedenti ci permette di definire la prima tecnica di sintesi74, quindi di composizione, del suono: la sintesi additiva a spettro fisso. Commentando il codice dell’esempio precedente, la “scelta” creativa, artigianale, del compositore, è definita da quanto segue: 1) scegliere la tabella del nostro oscillatore digitale (OSCIL), 2) scegliere di occupare la tabella per mezzo della funzione GEN10 i cui argomenti definiscono le ampiezze variabili di una fondamentale con le relative armoniche. 3) scegliere le differenti ampiezze delle armoniche di uno stesso spettro al fine di genererare timbri differenti75. Dal punto di vista compositivo ne piu ne meno di quanto stabilito da Max Mathews con Music 1. Prima di considerare la variabilità parametrica consideriamo quindi, come uno degli strumenti piu potenti di Csound, le tabelle di funzione GEN76. In Csound esistono 74
Diverse sono le interpretazione per classificare le tecniche di sintesi. Si rimanda alla letteratura relativa. E’possibile parlare di famiglie spettrali quando queste mantegno caratteristiche psicoasutiche tali da risultare inalterate nel tempo. 75
numerose GEN routines le quali si incaricano di, sommare suoni sinusoidali, scrivere e leggere porzioni di suoni campionati, generare segmenti di retta o curve ecc. Ogni GEN possiede una propria sintassi definita da “f-statement”, il cui numero è variabile, e può indicare differenti parametri; l’esempio successivo riporta nella seconda riga una funzione precedentemente definita nell’esempio e nella prima riga gli “fstatement” ad indicare tutto ciò che viene dopo f : f
p1
p2
p3
p4
p5
p6
p7
p8
p9
f
1
21
4096
10
1
1
1
1
1
Fino a p5 tutte le GEN richiamano gli stessi parametri: p1 richiama il n°attraverso cui definire la funzione (1) dell’orchestra p2 richiama il momento in cui inizializzare la funzione (a 21”) p3 definisce la grandezza della tabella (4096 punti) p4 la GEN da richiamare (10) Tutti gli statements successivi a p4 sono argomenti relativi alla GEN richiamata.77 Il manuale di Csound definisce le relative sintassi. E’ opportuno che il compositore consideri ogni singola tecnica di elaborazione o di sintesi come una risorsa per la definizione di strategie dinamiche78 di composizione del suono. Con il seguente esempio analizziamo come si puo cambiare ampiezza e frequenza ad ogni nota: ;ORCHESTRA sr = 44100 kr = 4410 ksmps = 10 nchnls = 1
76
Le GEN rappresentano un modo efficiente per definire funzioni che possono, non appena richiamate, essere necessarie a qualche unit generators per creare o modificare un suono. 77
Si è precedentemente visto come la sintassi della GEN10 richiami per esempio la composizione di uno
spettro armonico nella definizione delle singole ampiezze. 78 Per dinamica si intende la possibilità di variare nel tempo alcuni dei parametri del suono. Il modo in cui varia è definito dal compositore secondo una strategia o tecnica di composizione.
instr 1 asuoni oscil p4,p5,1 out asuoni endin ;SCORE f1 0 4096 10 1 ;p1 i1
p2 0
p3 2
p4 p5 20000 110
i1
3
2
8000
110
i1
6
2
9000
440
i1
9
2
15000 440
;suona una nota a partire da 0 secondi, della durata di due ;secondi con ampiezza 20000 e freq. fondamentale 110 Hz ;suona una nota a 3 secondi dall'inizio, con durata 2 sec., ;ampiezza 8000 e freq. fondamentale 110 Hz
In questo esempio si nota: gli argomenti dell’opcode OSCIL non sono più definiti da valori fissi bensi da variabili (p) relative agli argomenti richiesti dalla sintassi di OSCIL. Per cui p4 diverrà la variabile relativa all’ampiezza, i cui valori sono definiti nel quarto pfield delle note specificate nella score. p5 diverrà la variabile relativa alla frequenza, i cui valori sono definiti nel quinto p-field della specifica delle note nella score. Così, nella score, si nota che ai primi parametri obbligatori p1 p2 p3 sono stati aggiunti i p-fields p4 p5 relativi agli argomenti ampiezza e frequenza dell’opcode OSCIL ma definiti parametricamente da valori d’ampiezza. In questo caso si è deciso di far variare l’ampiezza e la frequenza di un’unica forma d’onda, la sinusoide. In questo esempio si introdurrà un secondo strumento in modo da cominciare a differenziare le possibilità di generare timbri differenti. ;2strum.orc sr = 44100 kr = 4410 ksmps = 10 nchnls = 1 instr 1 aprimo oscil p4,p5,1
out
aprimo endin
instr 2 aquadra oscil p4,p5,2 out aquadra endin ;2strum.sco f1 0 4096 10 1 ; funzione 1 per sinusoide, strumento 1 f2 0 4096 10 1 0 .33 0 .2 0 .14 0 .11 0 .09 ; funzione 2 per onda quadra,strumento 2 i1 0 3 10000 222 i2 4 3 10000 222 i1 8 3 8000 800 i2 12 3 8000 800
; strumento 1 nota di 3 secondi frequenza 222 Hz ; strumento 2 nota di 3 secondi frequenza 222 Hz ; strumento 1 nota di 3 secondi frequenza 800 Hz ; strumento 2 nota di 3 secondi frequenza 800 Hz
Si noti nell’orchestra: la definizione dei due strumenti, instr 1 e instr 2 e le definizioni di due variabili aprimo e aquadra e l’attribuzione dei p-fields all’OSCIL. Si noti l’ultimo argomento dell’OSCIL relativo al richiamo della funzione 1 e 2. In partitura: la definizione delle due funzioni e l’utilizzo della GEN10 chiamata a sintetizzare in f1 una sinusoide, in f2 un’onda quadra. Si è gia detto come la musica al computer dia la possibilità al compositore di indagare morfologicamente l’intima struttura dei suoni a fini estetici. L’articolazione dinamica dei parametri ha avuto un ruolo fondamentale nella storia della musica elettronica a partire dalla possibilità di intervenire, prima in tempo differito, poi in tempo reale, sulla modulazione di una particolare tecnica di sintesi o di elaborazione sonora. Essa è fondamentale per l’articolazione e la genesi della forma di eventi sonori. La modulazione nel tempo di un parametro può essere facilmente rappresentata graficamente. La storia di molte notazioni musicali rappresenta la storia dell’evoluzione di parametri sonori nel tempo come dimostra il seguente esempio (per certi versi paradigmatico) di partitura dell’ Elektronische Studie II di Karlheinz Stockhausen79:
79
La partitura originale è pubblicata dalla Stockhausen-Verlag. La registrazione disponibile su CD N°3 della Stockhausen Complete Edition della stessa casa editrice. Si segnala una versione dello studio in tempo reale programmato nell’ambiente MAX/msp da Georg Hajdu. Il patch dello studio è disponibile all’interno dell’ambiente di programmazione MAX/msp.
Nel sistema superiore delle ordinate sono rappresentate sia le frequenze (da 100 a 17200 Hz) sia le ampiezze (da –40 a 0 dB). L’ ascissa rappresenta il tempo. Stockhausen rappresenta l’evoluzione di questi parametri con figure geometriche semplici le quali “occupano” verticalmente gli spazi relativi a frequenze e ampiezze e orizzontalmente gli spazi relativi al tempo. Quello che interessa notare è la figurazione dinamica delle ampiezze. Esse sono rappresentate mediante “inviluppi”, cioè, in questo caso, segmenti di retta80 la cui direzionalità nello spazio cartesiano implica una modulazione dell’ampiezza. Piu volte definiti nel corso della storia musicale informaticoelettronica81, gli inviluppi possono descrivere l’andamento nel tempo di qualsiasi parametro sonoro, di sintesi o di elaborazione. Torniamo a Csound e alla possibilità di definire inviluppi per la frequenza, dei glissandi, e inviluppi d’ampiezza. Per descrivere un inviluppo in Csound ci si avvale delle variabili di controllo. Ricordiamo come nell’header del file sono state definite le frequenze di campionamento audio sr (sample rate) e di controllo kr (control rate). La frequenza di campionamento per descrivere l’evoluzione di una retta, di segmenti di retta o spline, non ha bisogno della
80
L’inviluppo può non essere una linea di rette ma anche di curve. Anche come Tendency mask, maschere di tendenza con cui definire “percorsi” entro parametri particolari di una tecnica di sintesi o di elaborazione sonora; cfr.(Bianchini e Cipriani 1998) a proposito dell’uso di maschere tendenziali per il controllo dei processi di sintesi granulare del suono. 81
stessa frequenza di campionamento dell’audio, la quale per sua natura deve essere nettamente superiore. Le variabili di controllo sono definite nell’orchestra da una k e nome della variabile, per esempio kglis. Come per le variabili audio anche quelle di controllo possono disporre di codici operativi (opcode). Differenti opcode, quando riferiti a variabili di controllo, generano differenti traiettorie: per esempio l’opcode line genera un segmento di retta, l’opcode linseg genera più segmenti di retta, l’opcode expon genera segmenti di esponenziale. In questo esempio tratto da Bianchini Cipriani vediamo come è possibile creare dei glissandi e poi degli inviluppi d’ampiezza. ORCHESTRA ;gliss.orc sr = 44100 kr = 4410 ksmps = 10 nchnls = 1 instr
; (frequenza di campionamento) ; (frequenza di controllo) ; (rapporto sr/kr) ; (numero di canali 1)
1
; (strumento 1)
kglis line 220,p3,440
a1
oscil p4,kglis,1
out a1 endin
;codice operativo, line, segmento che va da 220 a 440 ;nel tempo p3 (durata della nota). I risultati affluiscono ;nella variabile di controllo kglis ; opcode oscil, ampiezza p4, frequenza espressa dai dati ; di kglis, funzione 1 (che troveremo nella score). I risultati ;affluiscono nella variabile audio a1 ; scrittura su disco dei dati contenuti in a1
SCORE ;gliss.sco f1 0 4096 10 1
; funzione 1, attiva dall'inizio del pezzo, numero di punti della ; tabella 4096, gen 10, una sola componente sinusoidale
i1 0 3 10000
; ampiezza 10000, la nota glissa da 220 a 440 Hz in 3 secondi
i1 4 10 12000
; amp. 12000, la nota glissa da 220 a 440 Hz in 10 secondi
Con il seguente strumento utilizzeremo un segmento di retta per variare l’ampiezza: ;Intsr1 kenv line
a2
0,p3,10000
oscil kenv,220,1
;segmento che va da 0 a 10000 nel tempo p3. ;I risultati affluiscono nella variabile di controllo ;kenv ;oscillatore con ampiezza kenv (da 0 a 10000 ;per ogni nota, freq. 220Hz e funzione 1. I risultati ;affluiscono nella variabile audio a2.
out a2 endin Con questi esempi del tutto introduttivi, si è voluto evidenziare come la particolarità della sintassi di un linguaggio di programmazione può essere reinterpretata nel dominio di un processo di composizione. La poietica, le strategie di produzione del materiale compositivo, sono tutte da ricercarsi nelle scelte che guidano il compositore nella “migliore” formulazione dell’algoritmo. Detto altrimenti, la competenza musicale del compositore, che si esprime tradizionalmente anche attraverso la padronanza di una grammatica della scrittura, nel contesto della composizione musicale informatica implica una ulteriore competenza che riguarda la conoscenza della sintassi dei linguaggi di programmazione. E’utile notare come, da un punto di vista storico, le nozioni di Csound fin qui fornite siano utili ai fini musicali solo per simulare al computer alcune delle composizioni musicali elettroniche degli anni ’50 come lo Studie II di Stockhausen o The Siliver Scale di Mathews. La genesi della forma qui coincide con con quello che fu recepito storicamente come il minimo gesto necessario alla produzione di opere musicali: la varietà nella dinamica dei timbri. 1.4.3 Lejaren Hiller Esperienza parallela a quella di Max Mathews fu quella del chimico e compositore Lejaren Hiller e di Leonard Isacson. Lejaren Hiller nasce a New York City nel 1924. Segue studi musicali e scientifici a Princeton dove, nel 1947, completa il suo Ph.D in chimica. Parallelamente studia
contrappunto e composizione con Milton Babbit e Roger Session tra il 1941 e 1942. Nel 1952 riceve importanti incarichi di ricerca nel campo della chimica da realizzarsi con l’utilizzo del calcolatore Illiac presso la University of Illinois. Durante questi studi applica, insieme a Leonard Isaacson, alcuni procedimenti algoritmici alla generazione di strutture musicali; queste si concretizzeranno nella realizzazione della composizione di una suite per un quartetto d’archi conosciuta come Illiac Suite. Nel 1958 Hiller abbandona gli studi sulla chimica e si trasferisce presso il Dipartimento di Musica della stessa università, all’Experimental Music Studio, il secondo centro di ricerca musicale operativo negli Stati Uniti dove insegna fino al 1968. Successivamente si trasferisce all’Università dei Buffalo dove insegna fino a1989. Muore nel 1994. Hiller, nonostante abbia composto numerose composizioni, rimane celebre per il suo contributo alla teoria dell’assitenza musicale al computer, con la composizione, nel 1957, dell’Illiac suite string quartet. Hiller e Isaacson “programmarono un calcolatore per studiare la possibilità di composizione automatica di forme di contrappunto a più parti…di quelle sperimentazioni si conosce bene un celebre risultato, la Illiac Suite (dal nome del calcolatore utilizzato Illiac I) del 1957…Costruita sull’idea di una musica per quartetto d’archi, la composizione era divisa in quattro parti, ciascuna delle quali doveva affrontare un diverso problema di scrittura musicale, utilizzando procedimenti di generazione automatica delle scelte dei materiali…Secondo questo tipo di procedura, il calcolatore è utilizzato non per la generazione del suono (come nel software di Mathews nda), ma esclusivamente come “compositore” di meta-partiture che verranno poi decodificate e ‘tradotte’ opportunamente mediante i simboli musicali per essere eseguite da un organico strumentale vero e proprio”. (Galante Sani 2000) Per Hiller è necessario quindi il controllo del processo di elaborazione, indipendentemente dall’oggetto, a proposito del quale, Hiller, si auspica la ‘reale’ esecuzione dal vivo con un quartetto d’archi. L’esecuzione avvenne il 9 di agosto del 1957. Il processo di elaborazione di Hiller è direttamente dedotto dalla sua sperimentazione nel campo della chimica, quindi dall’adozione di strumenti algoritmici del periodo cibernetico. Data la loro importanza storica si riportano integralmente i documenti che accompagnarono il programma di sala per l’esecuzione della prima dell’Illiac Suite (String Quartet N°4):
L’Illiac Suite è una composizione in quattro movimenti ciascuno corrispondente ad una diversa fase della sperimentazione: “The first one (“Monody, Two-Part, and Four Part Writing) programmed 16 different rules in three categories: what is allowable, what is forbidden, and what is required. These included the rules for simple polyphony. Within this rule-based structure, individual musical events were determined by chance procedurese. The results were simple cantus firmus melodies of varying lenghts. The second experiment (“Four-Part First Species Counterpoint”) extended the insight of the first to generate different musical styles. The third (“Experimental Music”) was programmed with serial structures and techniques. The method of the fourth experiment (“Markov Chain Music”) influenced later works that used computer-aided score synthesis. Hiller and Isaacson worked here not with rules of composition, but with sequences of dependent random parameters.” (Supper 2001) Alcune considerazioni su quella che è la prima esperienza di sintesi di una partitura mediante computer. Innanzitutto, da chiarire, la finalità del metodo compositivo: “…son objectif en composant de la musique à l’aide d’un ordinateur n’est pas de réaliser une unité esthétique, mais de fournir une évaluation des techniques qui permettraient une nouvelle prise en compte de cette esthétique…” (Richard Moore, in Fober Letz, Les logiciels d’aide à la composition musicale, documento GRAME – Laboratoire de recherche) L’esperienza di Hiller è innovativa poichè il materiale di base è generato dinamicamente con l’utilizzazione di un algoritmo, detto di MonteCarlo,82 il quale genera sequenze di numeri a cui vengono poi associati differenti parametri musicali come le altezze, le intensità, gruppi ritmici ecc. Questi parametri sono sottoposti ad un insieme di regole compositive dedotte dalle regole del contrappunto di prima specie di Fux. Una caratteristica introdotta nella suite
82
Questo era l’algoritmo con cui Hiller stava lavorando per le sue ricerche di chimica con il calcolatore ILLIAC: in particolare l’utilizzo dell’algoritmo riguardava il calcolo di “conformazioni di polimeri, la cui simulazione è di grande importanza per la predizione delle proprietà fisiche e per una più approfondita conoscenza delle relazioni di tali proprietà con la struttura molecolare dei polimeri”. (abstract dell’intervento di Carl Wamser presso l’Università di Portland Dipartimento di Chimica in occasione della celebrazione della figura di Hiller: “Lejaren A.Hiller, Jr.(1924-94): computers, chemistry, and music”).
Hilliac sono le regole83, che determinano la validità o meno nell’uso del materiale musicale. Le regole nella composizione di Hiller sono implementate con la tecnica probabilistica stocastica, detta delle catene di Markov, dal nome del matematico Andre Andreevich Markov (1856-1922). Con tale tecnica si indica la probabilità della comparsa di un particolare parametro musicale (un’altezza per esempio) determinata da quello immediatamente precedente ad esso. Si direbbe che l’intervento umano nell’esperienza di Hiller sia pressoché nullo. In questo consite anche la radicalità della sua esperienza estetica.84 L’esperienza di Hiller, al di là del suo aspetto qualitativo, rimane fondamentale in quanto segna l’inizio di un’assidua frequentazione del metodo scientifico-cibernetico da parte dei compositori di musica. 1.4.4 Barbaud, Iannis Xenakis e Gottfried Koenig Le prime esperienze di musiche al calcolatore in Europa si hanno in Francia. In particolare nel 1958 il compositore Pierre Barbaud (Barbaud 1968) insieme a Jeanine Charbonnier, Roger Blanchard e Roland Douat formano a Parigi un gruppo di ricerca sulla composizione musicale mediante il computer. Il dialogo con la scienza cibernetica è auspicato e ricercato, e il gruppo di Parigi si appresta a diventare un importante punto di riferimento per tutta la storia della composizione assistita in Francia. Nel 1960 Barbaud realizza la prima composizione mediante un calcolatore (Agon Assayag 2003)85 utilizzando gli stessi procedimenti casuali di Hiller ma con un controllo più rigoroso delle regole musicali. Una particolare attenzione è rivolta agli aspetti analitici del testo musicale per il quale si privilegia l’analisi insiemistica del linguaggio tonale. Insieme ad altri precursori dell’analisi musicale computazionale in Europa come Riotte (Mesnage-Riotte 1993), il lavoro di Barbaud esige una formalizzazione coerente della teoria musicale. Successivamente a queste esperienze pionieristiche si situano altre fondamentali esperienze nel campo della composizione assistita dal computer: in particolare quelle di Iannis Xenakis e G.Koenig le quali sono già portatrici di una complessità poetica tale da non poter essere complessivamente considerate in questa dissertazione. 83
Proprio il concetto di regola ad essere una delle caratterisitiche tipiche della modalità dell’assistenza. Essa infatti è direttamente connessa all’idea di sistema basato su regole (rule-based system) tipiche dell’Intelligenza Artificiale Simbolica. (cfr.§ 1.4.4) 84 Un’esperienza non estranea alla tradizione musicale: “Là ove il Suono si lanifesta senza i segni dell’uomo, il Segno non reca suoni umani” (Donatoni 1982). Nei vari modi in cui questo tipo di esperienza si può manifestare si ricorda che Hiller fu poi chiamato alla collaborazione, non a caso, da John Cage, cioè colui il quale aveva intriso di misticismo Zen la natura dei processi automatici. 85 “Barbaud opera presso la compagnia Bull General Electric a Parigi dove elabora la prima musica realizzata in Europa su un calcolatore, che porta il titolo 7!” (Galante Sani 2000).
Si accenna alla composizione del 1956 di Xenakis, Pithoprakta, per quarantasei strumenti ad arco e un trombone, in cui il comportamento di ciascuna nota è assimilato al movimento di una molecola di un gas sottoposta a una data temperatura e pressione: una sorta di sonificazione della teoria cinetica dei gas di Maxwell-Boltzmann. Nel 1962 Xenakis convince i dirigenti francesi di IBM all’utilizzo del calcolatore IBM 7090 con cui egli realizzerà le sue composizioni stocastiche della serie ST. In particolare si ricorda ST/10-1,080262 per 10 strumenti. “Grazie al computer, ovvero tramite i programmi per computer, la materia musicale rivela aspetti che sembravano impenetrabili, tanto nelle sue forme sonore quanto in quelle linguistiche; per tale ragione non deve stupire se oggi, proprio con l’aiuto del computer, un numero sempre maggiore di compositori decide di mettere alla prova i propri sistemi di disciplina, il potenziale di regole statistiche, l’analisi matematica della musica, in breve, il proprio spirito d’avventura”. Così Gottfried Michael Koenig si esprimeva in un saggio del 1967, “Sull’uso del computer in musica” (Koenig 1995). Nato nel 1926 Koenig ha lavorato a fianco dei protagonisti dell’avanguardia musicale che frequentarono lo studio della Westdeutscher Rundfunk (WDR) di Colonia, studio presso il quale egli lavorava. Koenig ha lavorato con Stockhausen, Evangelisti, Kagel e Pousseur; con questi ha condiviso utopie e speculazioni teoriche, ma ha anche contribuito alla realizzazione di importanti capolavori elettroacustici come Kontakte di Stockhausen. Koenig era mosso da una passione per la ricerca musicale che ben presto lo avvicinò alla nascente computer music. Egli realizzo importanti programmi come PROJECT1 e PROJECT2 con cui realizzò numerose composizioni strumentali. “Per composizione con il computer intendo la formulazione di insiemi di regole effettuate mediante il computer, definendo strutture musicali prive di un’esplicita forma di presentazione acustica”. (ibidem.) A Koenig interessa lavorare sul processo, cioè mediante la definizione di un metodo sperimentale “per mettere alla prova la strategia catturata dal programma”. E’possibile sostenere che, con le prime esperienze di Koenig e Xenakis, la composizione al computer si impone a livello teorico e pratico come essenziale momento di sintesi delle esperienze novecentesche sull’artificiale e di svelamento dei complessi modelli teorici soggiacenti alle nuove teorie della musica. 1.4.5 L’Italia musicale verso l’informatica: Pietro Grossi e la nascita del Centro di Sonologia Computazionale di Padova Nel panorama musicale italiano degli anni 60, caratterizzato dalle esperienze avanguardiste dello Studio di Fonologia della Rai di Milano, si fanno strada “tre cavalieri solitari della musica elettronica”86: Pietro Grossi87, Enore Zaffiri e Teresa Rampazzi. 86 87
Commento di Grossi riportato in www.luxflux.org/n3/partiture1.htm www.pietrogrossi.org
Grossi a Firenze con lo studio S 2F M, Zaffiri a Torino con lo SMET88, Rampazzi a Padova con il gruppo NPS, furono tutti promotori indipendenti di percorsi di ricerca musicale sperimentale “alternativi” a quelli operanti a Fonologia a Milano. In questa dissertazione, per il loro particolare contributo dato alla computer music in Italia, ci occuperemo solo di Pietro Grossi e dei “componenti” del gruppo di sperimentazione che operavano in origine con Teresa Rampazzi, cioè Giovanni De Poli e Alvise Vidolin, tra i fondatori del Centro di Sonologia Computazionale di Padova. Pietro Grossi Pietro Grossi nasce a Venezia nel 1917 e si diploma in violoncello e composizione al Conservatorio di Musica di Bologna. Primo violoncello nell’orchestra del Maggio Musicale Fiorentino, abbandona l’attività professionale di interprete, iniziando, negli anni 60, la sua personale ricerca nel campo della musica elettroacustica. Nel 1962 è a Milano, presso lo studio di Fonologia della Rai, dove trascorse un breve periodo di studio e lavoro. Successivamente, con una ridotta strumentazione analogica, decise di allestire un proprio studio nella sua abitazione. Nel 1963 fonda lo studio di Fonologia Musicale di Firenze (chiamato S 2F M) e nel 1965 ottiene l’istituzione della prima cattedra italiana di Musica elettronica presso il Conservatorio di Musica di Firenze, luogo dove trasferì il proprio studio. Ma è già a partire dal 1961 che, Pietro Grossi, utilizza il calcolatore per la programmazione di semplici algoritmi in modo da determinare parametri (altezze, durate e dinamiche) da adattare successivamente alla propria strumentazione analogica. Questo avviene nel 1961 all’interno del Dipartimento di Matematica dell’Università di Firenze per mezzo di un computer mainframe IBM 1620 e del linguaggio di programmazione FORTRAN IV (Giomi 1999). Il risultato di tali esperimenti è testimoniato dalla serie di composizioni nominate come, R B 1, G 11/7/5/3, P4 ecc. eseguite durante la serie di concerti nel Settembre del 1964 ‘Audizione di Musica Algoritmica’ organizzata da La Biennale di Venezia presso il teatro La Fenice (ibidem). Il 1962 è forse l’anno più importante per la vita musicale di Grossi: Nel 1962 “apprende da un giornale che i calcolatori possono suonare e subito incuriosito inizia a muoversi per saperne di più. Iniziano le lunghissime anticamere e le visite nei centri di calcolo delle banche. A Siena “ascolta” un Olivetti Elea 9300 che emette controlli fonici che, se pur destinati a compiti di servizio, potrebbero anche essere programmati all’emissione di specifiche sequenze di note”.89 Il computer lo allontana definitivamente dal violoncello. Solo nel 1967, grazie all’interesse mostrato dalla Olivetti, viene data la possibilità a 88
Sulla storia di questi due studi si veda il saggio “Scuole storiche italiane di musica elettronica” di
Francesco Giomi in Musica e tecnologia domani, Lim editrice 2002 89 fonti dal sito cfr. nota 96
Grossi di utilizzare “un programma per codificare all’interno della macchina testi di musica tradizionale; il computer è in grado poi di suonarle attraverso un generatore di onda quandra. Il primo brano trascritto è il quinto Capriccio per violino di Paganini, brano che viene inciso dalla Olivetti in un disco a 45 giri”. La semplicità con cui l’alterità tecnologica può provocare delle emozioni è comune nella cultura informatica; una cultura nella quale sono cresciuti i discepoli dell’ “hands-on imperative, l’imperativo di metterci le mani sopra”, nata all’incirca una decina di anni prima degli avvenimenti di cui stiamo parlando negli Stati Uniti, all’interno delle aule dell’MIT90. Pietro Grossi, probabilmente, è stato tra i primi in Italia a farsi interprete di questo “sentimento di meraviglia estetica” di fronte ad un computer. La seguente, è una sua dichiarazione in seguito alla prima di quelle esperienze: “Il secondo giorno più importante della mia vita è stato quando ho fatto la mia prima esperienza al computer. Lei pensi a cosa possa voler dire per un artigiano della musica come me. Un bel giorno, inserito questo pacco di schede nel computer, il computer ha suonato subito alla perfezione il testo che gli ho dato. Cioè, sulla base delle mie indicazioni, e non c’erano errori. Questo per me era un salto, un salto incredibile. E’ stata un’emozione straordinaria. E per me è stato uno choc; si aprivano nuovi orizzonti, potevamo fare quello che volevamo, naturalmente non era vero, nel senso che i limiti erano parecchi, era il suono più brutto del mondo, ma per me era il più bello del secolo”. In seguito le esperienze di Grossi al computer riguardano sempre più da vicino le possibilità esplorative, per tramite di algoritmi random, di strutture musicali predefinite e codificate dalla tradizione musicale occidentale o generate in automatico. Per effettuare i suoi esperimenti, Grossi trova ospitalità presso il centro di calcolo CNUCE del C.N.R. dell’Università di Pisa (dove fu istituita la Divisione Musicologica) solo a partire dal 1969, progettandovi alcuni dei primi sistemi interattivi per la computer music in Italia. Il primo di questi, il DCMP, basato su di un IBM 360/67, produce suono a partire “da il prelievo di un bit da un registro specifico della macchina, in modo da realizzare un’onda quadra monofonica senza controllo dinamico.91 Dal punto di vista algoritmico egli incluse nel software due programmi specifici chiamati Algor e Create, in 90
Le coincidenze tra quanto accadde all’MIT verso la fine degli anni 50 e le prime esperienze di Grossi di trascrizione musicale, paiono straordinarie. Non si trattava cioè di sintetizzare un suono (come nell’esperienza di Mathews per cui era necessario talvolta aspettare ore se non giorni prima di poter ascoltare un suono), ma sfruttare già un suono che la macchina “naturalmente” produceva per guidarlo verso la musica. Un’esperienza radicale e radicalmente differente dagli scopi puramente estetici delle avanguardie. Narra Steven Levy, nel suo testo “Hackers, gli eroi della rivoluzione informatica”, che tra un gruppo di studenti, allievi del professore John McCarthy (cfr.§ 2.1.2), l’attività di hackeraggio di un computer prevedeva anche farlo suonare secondo le stesse modalità impiegate da Grossi. Dapprima monofonico su di un computer Tx-0, successivamente, nel 1961, anche a tre voci su di un PDP-1. L’autore del programma si chiama Peter Samson, tra i protagonisti della “rivoluzione” narrata da Levy. 91 Come avveniva secondo quanto riportato in Levy (cfr.nota precedente)
modo da controllare il sistema DCMP; questi programmi, utilizzati secondo differenti modalità, permettevano la creazione in tempo reale di strutture musicali aleatorie la cui generazione era programmata dagli algoritmi stessi che provvedevano alla generazione pseudo random secondo il metodo di Lehmer. Questi erano accessibili da un’interfaccia con cui l’utente poteva controllare una serie di 23 parametri del suono come la durata globale, il range delle altezze, le percentuali di silenzio e così via…” (Giomi 1996) La generazione di musica automatica avveniva anche per traduzione sonora di particolari proporzioni numeriche o nozioni matematiche come la sonificazione diretta della curva matematica di Peano (ibidem). In questi esperimenti era evidente il carattere radicale dell’esperienza estetica di Pietro Grossi. Un’esperienza che non aveva interesse nella produzione di un timbro particolare, ma che si concentrava sull’aspetto procedurale, algoritmico e speculativo del metodo di produzione, per poi lasciarsi ogni volta stupire dal risultato acustico. In questo, la produzione musicale di Pietro Grossi è agli antipodi rispetto quanto avveniva per il programma di sintesi sonora di Mathews il quale faceva della composizione timbrica della nota, uno dei suoi aspetti più importanti. L’esperienza di Grossi appare simile alle coeve esperienze di Cage, di Iannis Xenakis e di Herbert Brün. Con Cage, Grossi condivide la meraviglia del possibile, il gioco e il senso ironico, libero dai vincoli di un artigianato e guidato da un attitudine che porterà lo stesso Grossi a diventare un pioniere anche in altri campi della produzione musica in Italia: la libera condivisione degli strumenti di produzione, sia strumentale elettronico (l’accesso dei corsi in conservatorio era aperto a tutti coloro che erano interessati), sia del materiale prodotto e composto (libera condivisione delle composizioni spesso anonime e non firmate pronte per essere riutilizzate in ogni occasione); tra l’altro Grossi fu tra i primi a ideare quelle che oggi sono chiamate installazioni sonore.92 Con Xenakis e Brün, Grossi condivide qualcosa di più di una semplice esperienza estetica; ne condivide anche uno degli aspetti più controversi, forse “politico” come sostengono Brün e Mayr, che contrapponevano allora in Italia, almeno fino alla metà degli anni 60, la musica elettroacustica di Fonologia di Milano alla radicalità delle proposte estetiche di queste esperienze93. “It is one thing to aim for a particular timbre of sound and then to search for the means of making such sound and timbre audible. It is another thing to provide for a series of events to happen and then to discover the timbre or the sounds so generated. In the first case one prefers those events to happen that one wishes to hear; in the second case one prefers to hear those events one wishes would happen. These are not only two
92 93
Per la mostra di architettura “La casa abitata” a Palazzo Strozzi nel 1965.
Significativa l’assenza di tutte le esperienze qui considerate dal già citato testo sulla musica elettronica di Pousseur-Berio.
different approaches to the composition of music but also two different political attitudes”. (Brün 1969) Un’esperienza di composizione assistita al Centro di Sonologia Computazionale di Padova Tra i primi appuntamenti italiani con la ricerca internazionale sull’informatica musicale, vi furono i corsi estivi presso la Villa Cordellina di Vicenza diretti dal compositore Wolfango Dalla Vecchia, dal 1971 al 1976. Tra i numerosi eventi che caratterizzarono questi corsi (Vidolin 1999) si ricorda in particolare quello dell’estate del 1975, anno in cui il compositore Dalla Vecchia “propose di creare un gruppo di lavoro interdisciplinare per lo studio di un sistema computerizzato di ausilio alla composizione musicale. Il gruppo che si formò fu composto da alcuni allievi del suo corso di composizione (Corrado Pasquotti e Franco Facchin), da Giovanni De Poli e Alvise Vidolin della Facoltà di Ingegneria”. (ibidem). I primi risultati del lavoro del gruppo furono presentati l’anno successivo con il programma CELLE, programma finalizzato all’ elaborazione di strutture ritmiche. In seguito, conclusi i corsi estivi a Villa Cordellina nel 1976, “il gruppo di lavoro…continuò la ricerca anche negli anni successivi presso il nascente Centro di Sonologia Computazionale dell’Università di Padova94, grazie ad una convenzione che legava il Conservatorio “C.Pollini” di Padova con il Centro di Calcolo di Ateneo95. I principali risultati ottenuti furono il programma di elaborazione di strutture musicali EMUS e la composizione di Wolfango Dalla Vecchia Atrocissime Tange (1981) per mimo, percussioni e nastro magnetico sintetizzato all’elaboratore…Il gruppo decise di operare nell’ambito dei programmi di aiuto alla composizione e in particolare si pose come obbiettivo l’integrazione della teoria compositiva con le emergenti tecniche di sintesi (quelle di Max Mathews nda)”. (ibidem) 1.4.6 La musicologia cognitiva La musicologia cognitiva (Laske 1988) si sviluppa nel corso degli anni 70 come ambito interdisciplinare96 finalizzato allo studio della musical knowledge. D’impulso alla nascita della musicologia cognitiva furono i metodi di ricerca scientifici sviluppati nell’ambito dell’Intelligenza Artificiale (IA) (Roads 1980) La definizione della disciplina fornita da Laske (tra i primi e più importanti teorici dell’informatica musicale) distingue una musicologia teoretica da una applicata. La prima 94 95
Sulla storia del CSC di Padova si veda (Zattra 2000).
Il testo della convenzione è riportato alla nota 145 della dissertazione di laurea di (Zattra 2000). Antropologia, intelligenza artificiale, psicologia cognitiva, linguistica, musicologia, neuroscienze, psicoacustica e semiotica. 96
consiste nella formulazioni di ipotesi che riguardano alcune delle nozioni cardine della musicologia cognitiva cioè “task environment (knowledge about one’s tools and materials) competence (declarative knowledge about the domain) and performace (procedural knowledge regarding the use of knowledge under factual constraints)”. (Laske 1988). La finalità della musicologia cognitiva applicata è la verifica e la formulazione di nuove ipotesi teoriche mediante l’utilizzo del computer. “…is driven by attempts to build computer system serving as intelligent assistants to musicians of all kinds, and directly or indirectly disproving hypothesis formulated in theoretical musicology. Moreover, applied musicology gives rise to hypothesis never before envisioned”. (ibidem) Cioè i programmi per computer in siffatta musicologia hanno due funzioni ben definite “they serve to substantiate hypotheses regarding musical knowledge, and second, they are the medium for designing structured task environments” (ibidem) In questo ambito si sono sviluppati numerosi rami della ricerca tra cui quelle di David Cope sulla generazione automatica di stili musicali o quella sulle ‘grammatiche musicali, (Baroni Callegari 1984, e Baroni Jacoboni Dalmonte 1999) di stampo anche psicologicocognitivista (Lerdahl Jackendoff 1983). Influenzato dalle teorie computazionali anche Allen Forte con la sua set-theory (Allen Forte 1973). Molte di queste teorie nascono con finalità esclusivamente musicologiche e analitiche ma è possibile riscontrare un fecondo e reciproco interesse da parte della musicologia alla composizione e viceversa. (cfr.§ 1.3.2.1 sul concetto di modello) In particolare è proprio l’approccio di Otto Laske tra i primi a definire sistematicamente la nozione di una teoria della composizione (Composition Theory) come disciplina della musicologia cognitiva/computazionale97. Per Laske una teoria della composizione, intesa come un’attività che riguarda la creazione musicale, deve essere riconosciuta innanzitutto come metodo per la conoscenza del modo in cui noi percepiamo (cfr§ 1.3.1.1 nota 33). Questo implica per Laske: (1) creating music is a method of understanding (2) it is a method of understanding ourselves as perceivers. One might add that creating music is (3) a method of codifying that understanding, in two ways, in terms (a) of the process the composer uses to understand what he perceives, and (b) of the results of his/her understanding. Le finalità di un siffatto metodo, interdisciplinare e di ampia prospettiva epistemologica, cognitiva ed antropologica, implica per Laske lo studio dei criteri di progettazione (design) e di percezione, inclusi i metodi necessari per la sua comprensione. In questo 97
cfr. Interface-Journal of New Music Research tutto il volume 20 n°3-4 1991 è dedicato alla Composition Theory.
senso la Composition Theory di Laske si inserisce a pieno titolo come settore privilegiato dei rapporti tra l’IA e la musica “because the attempt is made to take composers seriously scientifically, as experts of their task domain, which is design”. La Composition Theory rappresenta uno dei primi passi verso la definizione di una teoria della composizione che assimili le caratteristiche proprie della tecnologia informatica e dell’IA. Essa rappresenta un modello teorico importante perché indaga la composizione dal punto di vista prima di tutto del compositore, non dello scienziato di IA: “From a point of view of AI, the question to be addressed, according to Smoliar, is the following: ”How can one build an artificial agent that reasons about the task of composition”. I submit that this question is different from my leading question which asks ‘How can one build an artificial agent to compose music’…more appropriate…’How can we fashion an alloreferential (explanatory) replica of the process of self-activation provoked by ideas (within the context of a certain culture)”. Per comprendere meglio le istanze della Composition Theory e di tutti i modelli teorici che desiderino studiare la composizione (composizione assistita compresa) come parte integrante della musicologia computazionale è necessario introdurre gli aspetti paradigmatici di quest’ultima. Così come le scienze naturali contribuirono allo sviluppo della prima Musikwissenschaft (Serravezza 1996) all’origine della musicologia computazionale (o cognitiva) vi è la storia dell’Intelligenza Artificiale (IA). 1.4.6.1 Breve introduzione all’Intelligenza Artificiale L’IA è conosciuta per essere lo studio scientifico del comportamento intelligente e della sua simulazione per mezzo di macchine. Il termine Intelligenza Artificiale fu coniato da John McCarthy e Marvin Minsky nel 1956. A partire dalla sua nascita la disciplina ha subito identificato le macchine con i calcolatori digitali. L’IA è nata all’insegna di un duplice profilo: da un lato quello di disciplina ingegneristica “il cui obbiettivo è di costruire macchine in grado di assistere l’uomo…in compiti soprattutto intellettuali”, dall’altro quello di “disciplina psicologica il cui obbiettivo è di costruire macchine le quali, riproducendo da vicino le caratteristiche essenziali dell’attività cognitiva umana, gettino una nuova luce su alcuni tradizionali enigmi della mente”. (CordeschiTamburrinicfr. w3.uniroma1.it/cordeschi/PDF/IA%20Cap1%20Carocci.pdf) All’epoca in cui nacque l’IA, i calcolatori si erano da poco affermati come macchine ideali per l’elaborazione numerica, il calcolo. Gli stessi calcolatori digitali furono ideati a partire da modelli logico-matematici della teoria della calcolabilità, “le cui basi vennero gettate nell’arco del quinquennio che va dal 1931 al 1936, cioè ben prima che i moderni calcolatori digitali venissero effettivamente costruiti.” (cfr.Cap.2 § 2.1.2.1) Sulla base di
questi modelli, quindi degli artefatti meccanici che di questi modelli sono l’implementazione, si cominciò ad avanzare ipotesi riguardo l’emergenza di alcuni “comportamenti” delle macchine attribuendo a questi proprietà che vennero ritenute intelligenti. Innanzitutto fu necessario fornirsi di interpreti in grado di “comunicare” con questi modelli matematici astratti e poter fornire all’utente/programmatore la possibilità di rappresentare una possibile forma del pensiero. Furono ben presto progettati due linguaggi artificiali grazie a cui fu possibile descrivere non solo operazioni numeriche, ma anche la possibilità di applicare queste ultime ai simboli98. A partire dalla fine degli anni 50 nacquero LISP e PROLOG i linguaggi attraverso cui divenne possibile la rappresentazione simbolica. Con i primi programmi di IA si cercò di simulare alcuni dei comportamenti umani intelligenti come quello, celebre, di determinare una strategia ottimale in una partita a scacchi. Tra questi primi esperimenti si ricorda “quello di scegliere, davanti a un problema che dà luogo all’esplosione combinatorie di mosse lecite, solo alcune sequenze di mosse che potrebbero portare alla soluzione.” Si arrivò ad identificare l’intelligenza con la capacità tipicamente umana di poter scegliere. In questa veste l’IA riguardava anche la psicologia cognitiva la quale era interessata “alla simulazione di processi cognitivi in modo psicologicamente realistico.” Ispirati dal comportamento cognitivo umano, tra i ricercatori della disciplina “si alimentò la convinzione che compito principale dell’IA fosse lo studio delle strategie di soluzione di problemi efficacemente selettive, o ‘euristiche’.” Tornando alla relazione dell’IA con la musicologia computazionale, gli algoritmi euristici fornirono presto un modello considerato come ideale per la progettazione di sistemi basati sulla rappresentazione e elaborazione della conoscenza (Knowledge Representation99) a cui ci si riferisce, generalmente, come “IA simbolica”. “Symbolic AI is based on the principle of using a computational model which explicitly represents aspects of the problem being solved. In other words, the program has a given vocabulary of symbols, which are used to represent objects and/or concepts; it may have a model of the world in which it operates…In this context, the programmer knows what her chosen symbols mean in relation to the world in which the program is supposed to operate. So she can take her vocabulary of symbols, and say, in its term, how the program achives results.” (Wiggins Smaill “Musical Knowledge: what can Artificial Intelligence bring to the musician?” documento del Dipartimento di Intelligenza Artificiale dell’Università di Edinburgo)
98
In sostanza ciò permette di distinguere un computer da una calcolatrice. Si ricorda a questo punto che l’equipe di ricerca dell’IRCAM che ha sviluppato OpenMusic prende il nome di Representation Musicales. 99
In antitesi alla IA simbolica sono stati sviluppati altri modelli per la simulazione di capacità cognitive tra cui ricordiamo quelli riconducibili all’altro grande settore dell’IA, conosciuto come IA subsimbolica. Di questo settore fanno parte i modelli connessionisti come le reti neuronali. Contrariamente al metodo definito precedentemente i modelli connessionisti sono basati su una rete costituita “da centinaia (o anche migliaia) di elementi indipendenti (detti ’neuroni’). Ognuno di questi ‘neuroni’ riceve dagli altri un certo numero di segnali in ingresso (il numero e l’intensità di tali segnali dipendono dalle interconnessioni effettivamente presenti), ne fa la somma algebrica e, a seconda del risultato, può entrare in uno stato eccitato, inviando a sua volta impulsi verso elementi a cui è connesso.” (Zanarini 1995) Solitamente questi sistemi sono programmati “per il riconoscimento di forme, di immagini, di messaggi parlati”. (ibidem) In conclusione: la composizione assistita può essere definita come trait d’union di settori fortemente interdisciplinari (composizione musicale, informatica musicale e musicologia computazionale), in cui la simulazione e la formulazione di procedimenti, strategie, regole per l’analisi e la composizione musicale, trovano un adeguato supporto formale e computazionale. A questo proposito si è notato come l’ambiente per la composizione assistita OpenMusic possa comunicare con software per la sintesi del suono come Csound. Inoltre può “comunicare” con altri sofware IRCAM come Diphone, Modalys e Audiosculpt per l’elaborazione sonora. Attuale tendenza della ricerca nello sviluppo di software per la composizione assistita come PWGL è la integrazione in un unico ambiente di ciò che era oggetto di produzione di diversi programmi100. Per limitare la complessità degli argomenti, con l’analisi dell’ambiente di programmazione OpenMusic (d’ora in avanti OM), in questa dissertazione verranno analizzati solo algoritmi per la generazione e l’elaborazione di partiture visualizzabili mediante il sistema di notazione musicale tradizionale. Verranno cioè analizzate le modalità dell’assistenza e la loro applicazione al livello di rappresentazione del sistema di notazione musicale. In questa senso ha origine la genesi di un nuovo artigianato compositivo che è il risultato dell’incontro tra l’insieme delle conoscenze e delle strategie della composizione musicale con i paradigmi tecno-scientifici dell’informatica. Oggi la composizione musicale assistita rappresenta l’ambito disciplinare più attento alle esigenze del compositore, e si concretizza nella possibilità di uno studio comparato tra metodo della scienza normale e necessità umanistiche.
100
Verso gli Ambienti Esecutivi secondo la definizione di Alvise Vidolin o Sistemi Assistiti secondo la
definizione di (Baboni Schilingi 2005).
CAPITOLO 2 I FONDAMENTI DI OPEN MUSIC 2.1 Introduzione alla tecnologia di Open Music (OM) Open Music è un ambiente di programmazione dedicato alla composizione musicale. Un’interfaccia grafica interattiva permette al compositore la gestione di strumenti per la generazione e la manipolazione di dati per fini analitici e compositivi. In questo ambiente il compositore svolge il duplice ruolo di programmatore e utente delle proprie intuizioni. In quanto programmatore egli deve formalizzare il proprio pensiero con strutture rappresentate nell’ambiente grafico da icone opportunamente connesse tra loro (algoritmi). In quanto utente, il compositore valuta l’efficacia “estetica” delle proprie intuizioni così come definite dalle soluzioni proposte dal sistema informatico che lui stesso ha costruito, progettato, composto. Le soluzioni possono essere rappresentate in molti modi compreso il sistema di notazione musicale tradizionale.1 Tra l’utente-programmatore e il sistema informatico si instaura un rapporto di interazione continua. L’interazione distingue la CMAC dalla composizione algoritmica. E’ possibile cominciare a pensare all’utente come ad un compositore tout court anche di algoritmi e all’algoritmo stesso come momento particolare del concetto di partitura.2 2.1.1 Paradigmi di Open Music: Lisp e object oriented programming (OOP) Nel panorama dei software per la composizione musicale assistita OM ha un rilievo del tutto particolare. Oltre ad essere il frutto di una esperienza ormai decennale di lavoro ingegneristico3 OM è anche il risultato di un non trascurabile lavoro condotto a fianco dei compositori che hanno lavorato all’IRCAM. Il complesso problema rappresentato dall’insieme delle attività che si possono ricondurre alla composizione musicale è risolto4 dal progettista facendo ricorso all’integrazione di diversi modelli di programmazione: visivo, funzionale, programmazione per oggetti e programmazione per vincoli.5 (Agon, 1998) 1
La notazione musicale in OM è basata su Common Music Notation, software di pubblico dominio sviluppato al CCRMA di Stanford. 2 Considerazioni estetiche sul concetto di interazione, algoritmo come partitura e composizione tout court verranno proposte nel capitolo 4. 3 cfr.capitolo 1 § 1.1.1 4
Come dice lo stesso progettista (Agon 1998) il problema è “risolto” nel senso che sono proposte idee per una soluzione modulare, aperta. Ciò non impedisce che la composizione musicale in quanto fenomeno complesso resti un “problema complesso” . 5 Della programmazione per vincoli si farà solo un breve cenno nel Capitolo 5 § 5.5
Il presente capitolo descrive brevemente la tecnologia di OM così come definita dai relativi paradigmi di programmazione utilizzati. Di questi paradigmi saranno evidenziati le caratteristiche di base e quelle che hanno direttamente (e reciprocamente) influenzato lo sviluppo di alcuni modelli teorici. Per comprendere quali siano i criteri generali che hanno guidato la progettazione6 di OM, è necessaria una definizione più precisa del software che espliciti i paradigmi di programmazione utilizzati. A tale scopo si analizza la seguente definizione di OM: “Open Music est un langage visuel basé sur le paradigmes fonctionnel et object, disposant d’un protocole de métaprogrammation…” (Truchet 2004) In quanto linguaggio visivo OM dà la possibilità al compositore di organizzare graficamente ed intuitivamente strutture di dati7. La prima preoccupazione per il progettista del software è infatti quella di fornire al compositore un ambiente grafico in cui riconoscersi e riconoscere, formalizzate, le proprie idee. A livello progettuale del sistema e’ necessario ridurre il divario fra una possibile bassa competenza informatica ed un alto livello di conoscenza specifica, quella musicale, sfruttando la possibilità di “vedere” rappresentati formalismi tipici dell’artigianato compositivo del ‘900. “…un programme visuel implémentant un proccessus compositionel donne une représentation des idée du compositeur dans la mesure où ses composants logiques sont visualisés” (Agon-Assayag 2002) Per il progettista l’importanza dell’interfaccia è tale da diventare essa stessa il problema fondamentale per un software come OM. A partire da essa il progettista deve agevolare il compositore nella definizione del “nuovo” artigianato e, nello 6
E’necessario ribadire la distinzione tra l’utente programmatore/compositore e il progettista del sistema, il solo responsabile dell’architettura del software. 7 “Dal punto di vista teorico, un elaboratore di informazione è un manipolatore di segni…L’architettura fisica di ogni elaboratore moderno è intrinsicamente capace di trattare vari domini di dati, detti tipi primitivi. Tra questi vi sono sempre i valori logici, i caratteri e i numeri interi e reali e molti altri…E’necessario organizzare i dati in strutture articolate e complesse, che possano costituire un appropriato modello del mondo reale e colmare la distanza (gap semantico) tra le categorie di informazione di uno specifico dominio applicativo e le categorie di dati che l’elaboratore è in grado di comprendere direttamente.” Antonio Natali (a.a. 1999-2000) Linguaggi e traduttori, dispense a cura del docente www-natali.deis.unibo.it
stesso tempo, non deve sottovalutare le possibili limitazioni all’espressione creativa del compositore. In questo senso, OM si distingue dai programmi di composizione algoritmica in quanto la sua progettazione non tende alla proposizione a priori di modelli generativi o di elaborazione delle strutture musicali. In OM le possibilità offerte dalla musica algoritmica sono formalizzabili così come ogni altra regola compositiva. Perciò le potenzialità espressive della musica algoritmica non definiscono per sé la natura del software OM il quale è invece strutturato “comme un langage de programmation permettant au compositeur de constituer son univers personnel”. (Agon Assayag 2002) Il linguaggio visivo di OM deve essere quindi strutturato in modo da fornire al compositore un ambiente grafico interattivo dotato di interfacce intuitive (come la possibilità di scrivere la musica secondo il sistema di notazione tradizionale) e che sia in grado di supportare quelle astrazioni logico-formali tipiche dei linguaggi di programmazione di alto livello. Per il progettista il compositore deve essere nelle condizioni di lavorare già dopo un breve periodo di apprendimento di base. Questo può avvenire dopo un breve periodo di studio della documentazione fornita8 e dei tutorial del software, della libera esplorazione di algoritmi già definiti o dopo la frequentazione di un corso. Il compositore che vorrà approfondire sintassi e semantica dei linguaggi di OM sarà libero di farlo grazie all’architettura aperta del software. Questa permette di passare liberamente dalla ricomposizione di algoritmi altrui, alla composizione visiva di propri algoritmi, fino alla definizione di singoli elementi degli algoritmi mediante l’utilizzo di linguaggi avanzati con cui configurare liberamente il sistema. Si fornisce di seguito una descrizione non esaustiva ma indicativa della struttura generale del software OM. Gli strumenti con cui il progettista ha sviluppato OM appartengono a due modelli di programmazione i cui “concetti”9 sono sintatticamente e semanticamente definiti dai seguenti paradigmi:
8
Disponibile anche ONLINE sul sito http://recherche.ircam.fr/equipes/repmus/OpenMusic/ Concetti vanno qui intesi nel senso di ontologie (Sergei Nirenburg e Viktor Raskin, Ontological Semantics draft copy). Il termine ontologia è derivato dal pensiero metafisico ma definisce, in (Nirenburg Raskin), il limite computazionale a cui tende una descrizione logico-formale. “…in its most 9
prevalent use in AI (artificial intelligence), an ontology refers to an engineering artifact, constituted by a specific vocabulary used to describe a certain reality, plus a set of explicit assumptions. It has usually the form of a first-order logical theory, where vocabulary words appear as unary or binary predicate names, respectively called concepts and relations…” Il limite ontologico dei linguaggi di
1- funzionale, le cui fondamenta sono definite dal linguaggio Lisp 2- orientato agli oggetti (abbreviato: OOP object oriented programming) E’ fondamentale, ai fini di un’intuitiva e aperta gestione del sistema da parte del compositore, l’integrazione dei due modelli paradigmatici. L’integrazione dei modelli dà la possibilità al progettista di interpretatare ed integrare facilmente sia concetti astratti (di alto livello logico formale) sia quelli già noti al compositore (come il concetto di nota o accordo). Come vedremo nel § 2.1.3 grazie alla flessibilità del concetto di oggetto così come definito dal paradigma OOP è stato possibile una completa descrizione orientata agli oggetti di tutte le istruzioni del paradigma funzionale. Un protocollo di metaprogrammazione10 ha permesso una ulteriore estensione del sistema integrato sopra descritto da parte del progettista e la possibilità di implementare su di esso OM. Il linguaggio di programmazione scelto dal progettista e che riassume le caretteristiche fin qui definite è Common Lisp Object System (CLOS). “…on peut considérer Open Music comme un enrichissement de la syntaxe et de la sémantique de CLOS par métaprogrammation, plus certaines entités visuel…” (Agon 1998) Si può dire che CLOS, facendo proprio il paradigma orientato agli oggetti, rende possibile una descrizione completa del paradigma funzionale. Il paradigma funzionale diventa cioè un sottoinisieme di ciò che possibile descrivere attraverso il paradigma OOP. Il paragrafo 2.1.3.2 su CLOS illustra brevemente come OM sia stato implementato utilizzando il protocollo di metaprogrammazione.
programmazione utilizzati per progettare OM definisce il limite stesso del sistema OM come “interprete” formale del pensiero compositivo. 10 Un metaprogramma è un programma che opera su altri programmi. Attraverso la metaprogrammazione è possibile definire, nel linguaggio stesso, strumenti di supporto allo sviluppo ed estensioni del linguaggio (come OM).
2.1.2 Lisp11 “L’informatica è nata dalla logica, come Minerva dalla testa di Giove.” Giuseppe Longo in (AspertiCiabattoni 1997)
OM, in quanto interfaccia visiva, è stato progettato ed implementato sui linguaggi di programmazione CLOS e Macintosh CommonLisp. Entrambi i linguaggi fanno riferimento a Common Lisp, recente standardizzazione del linguaggio Lisp. Lisp (contrazione di LISt Processor) fu sviluppato in origine da John McCarthy a partire dal 1956 durante un soggiorno estivo di ricerca sull’intelligenza artificiale presso il Darthmouth College.12 Considerata un pò la lingua franca nella comunità dell’intelligenza artificiale in epoca cibernetica (Pratt 1990), il Lisp ebbe presso la comunità degli scienziati una grande diffusione. L’espansione del linguaggio provocò a partire dal 1965 la creazione di numerosi dialetti13 presto diventati incompatibili fra loro (per esempio Lisp Machine Lisp, Mac Lisp, NIL, S-1 Lisp, Spice Lisp, Scheme). Per sfruttare pienamente le potenzialità del linguaggio Lisp e porre quindi fine alla babele linguistica che si stava diffondendo, nel 1986 fu formato il gruppo di studio X3J13 per produrre una bozza ANSI14 e definire uno standard comune del linguaggio. Nel 1992 venne pubblicato l’ANSI Common Lisp. Una specifica del documento descrive il Common Lisp Object System (CLOS) il quale integra in Common Lisp le caratteristiche dei linguaggi object oriented. Macintosh Common Lisp è la variante di Common Lisp/CLOS specifico per l’ambiente Macintosh. Esso integra in Common Lisp/CLOS tutte le istruzioni necessarie per accedere al sistema operativo Macintosh OS. Nato all’interno della comunità cibernetica nella metà degli anni 50, Lisp è cresciuto e ha alimentato la propria semantica avvalendosi dei contributi teorici provenienti da un più ampio dibattito scientifico sui fondamenti di una possibile forma di intelligenza artificiale. E’importante sottolineare quanto la natura interdisciplinare della cibernetica (Heims 1994) abbia contribuito in maniera sostanziale all’identificazione e alla soluzione di problemi logico formali i quali, in questo contesto, interessano direttamente alcune modalità di rappresentazione simbolica del pensiero musicale. 11
Il presente paragrafo ha solo funzione introduttiva, per la descrizione completa del Lisp si rimanda alle indicazioni bibliografiche. 12 Il lavoro originale di John McCarthy (biografie e documenti online www-formal.stanford.edu/jmc) sul Lisp è disponibile online alla pagina www-formal.stanford.edu/jmc/recursive.html. 13 Per dialetti di un linguaggio di programmazione si intendono modifiche generalemente non sostanziali del linguaggio ma necessarie per particolari implementazioni e/o tecnologie hardware. 14 ANSI è l’acronimo di American national standard institute.
Lisp in origine fu la risposta computazionale alla soluzione di problemi logico matematici come la dimostrazione di teoremi: “Un’applicazione di questa potenzialità è presente nella dimostrazione di teoremi, perché essa comporta la possibilità di considerare manipolabile la forma logica. Turing dimostrò che la classe delle funzioni calcolabili ha la stessa estensione della classe di funzioni che possono essere calcolate includendo nel repertorio le tecniche ricorsive. La possibilità di programmare in modo ricorsivo fa dunque ricadere tutte le funzioni calcolabili nel campo di azione del calcolatore” (Pratt 1990) Ciò che più interessa di questa constatazione è la possibilità di manipolare la forma logica in modo tale da poter descrivere un vasto campo di azioni, dalla più semplice a quella più complessa ottenuta per concatenamento (ricorsione) delle operazioni più semplici. Tutte le operazioni, semplici o complesse, sono calcolabili mediante una precisa definizione del linguaggio di cui si dà un breve descrizione. 2.1.2.1 Introduzione al paradigma computazionale Lisp E’ stato evidenziato come uno dei paradigmi di programmazione su cui è stato progettato OM sia il paradigma funzionale. Lisp è il progenitore dei linguaggi di programmazione funzionale. Prima di definire le caratteristiche del linguaggio di programmazione (v.§ succ.) è necessario esplicitare il concetto di funzione. L’aggettivo funzionale, oltre a distinguere il linguaggio Lisp dai linguaggi imperativi15 come C, Fortran o Java, fa riferimento a due concetti fondamentali, correlati tra loro e generalizzabili a tutti i linguaggi di programmazione funzionali, quello di lambda calcolo (-calcolo) e quello di funzione. Le definizioni precedono, in questo caso, qualsiasi costruzione tecnologica poiché si cominciò a teorizzare intorno a questi concetti già a partire dagli anni 30, quando, dell’informatica, vennero gettate le fondamenta teoriche.
15
Nei linguaggi imperativi il meccanismo di calcolo è basato essenzialmente sulla modifica dello stato
del sistema, rappresentato da una memoria. Il programmatore per mezzo del calcolo modifica continuamente i contenuti della memoria attraverso una delle operazioni fondamentali dei linguaggi imperativi, cioè l’assegnazione. In questo caso si passa da una configurazione all’altra fino a quando il calcolo non giunge a conclusione. In un linguaggio funzionale l’utente non ha il compito di gestire il contenuto della memoria il quale è gestito autonomamente dall’interprete.” (Ausiello 2002)
Concetti che rappresentano la genesi stessa della definizione di algoritmo computazionale di cui rimaranno il modello paradigmatico fino alla svolta della programmazione orientata agli oggetti verso la fine degli anni 50. E’necessario sottolineare come i modelli teorici che hanno permesso la costruzione di tutto il modello computazionale funzionale (la ricorsione e il -calcolo) non definiscano tanto il modo attraverso cui rappresentare (simulare) un qualsiasi concetto (matematico, logico, simbolico) ma la possibilità stessa che questo possa avvenire. Questo fa del -calcolo un paradigma e del Lisp il suo linguaggio. “Se lo sviluppo tecnologico dell’informatica talvolta precede la teoria, onde questa è chiamata a interpetare e organizzare a posteriori le nuove acquisizioni, è pure storicamente vero il contrario, vale a dire che la teoria abbia preceduto l’applicazione tecnologica, ovvero abbia fornito un quadro di principio, un paradigma, ispiratore di un gran numero di applicazioni sia direttamente che dal punto di vista metodologico e tecnico. (quad le scienze 38) Lambda calcolo…possiamo pensare come un linguaggio di programmazione astratto…suscettibile di essere usato come paradigma di riferimento per tutti i linguaggi di programmazione sequenziali…è un esempio di come la teoria possa precedere l’applicazione tecnologica; infatti è nato ben prima dei linguaggi di programmazione, e ben prima del computer.” (Ronchi della Rocca, de’Liguoro 2001) Ricorsione e -calcolo Si è accennato al fatto che un linguaggio di programmazione funzionale (cfr.§ cap.1 sul lambda calcolo) “tende a catturare l’idea di ‘calcolo’ partendo da un ente matematico ben noto (le funzioni) e dall’idea di ottenere la descrizione di tutte le possibili operazioni calcolabili fornendo alcune operazioni primitive e pochi meccanismi per la loro combinazione” (Natali 1999-2000) A partire dal XIX° secolo il concetto matematico con cui si tentò di definire le funzioni per composizione di funzioni più semplici era noto come funzione ricorsiva. L’idea di calcolo è un concetto più difficile da esprimere. Dagli anni 30 del Novecento furono numerosi i tentativi per definire il concetto di calcolo, altrimenti
detto procedemento meccanico o algoritmico. In una straordinaria coincidenza di soluzioni equivalenti, tra il 1935 e il 1936 il logico Alonzo Church e il matematico inglese Alan Turing sancirono i cosiddetti formalismi massimi cioè le definizioni del ”meglio che si può avere da un calcolo meccanico”. (Plebe 2004) L’identificazione del concetto di calcolo con quello di funzione ricorsiva necessita però di un passo indietro nella storia. La copiosa produzione di divulgazione scientifica relativa all’argomento data l’inizio dell’avventura informatica nell’agosto del 1900. In questo mese estivo il matematico tedesco David Hilbert pronunciò, presso il Congresso Internazionale dei Matematici a Parigi, una serie di ventitré problemi insoluti subito accolti dalla comunità scientifica mondiale come una sfida per avanzare ipotesi sul futuro della matematica. Quello che qui interessa è il decimo problema noto come l’Entscheidungsproblem, il problema della decisione, riproposto anche in altra sede dallo stesso Hilbert16; Il problema recita testualmente: “l’Entscheidungsproblem è risolto quando si conosca un procedimento, in grado di decidere, con un numero finito di operazioni, la validità o meno di una espressione logica data…. l’Entscheidungsproblem deve essere segnalato come il problema principale dell’intera logica matematica” (Hilbert cit.in Plebe 2004) In altri termini Hilbert si chiese: “esiste un qualche procedimento meccanico generale in grado, in linea di principio, di risolvere uno dopo l’altro tutti i problemi della matematica (appartenenti a una qualche classe opportunamente definita)?” Una prima soluzione alla questione fu avanzata dal logico Alonzo Church il quale fece ricorso ad un particolare formalismo per definire precisamente il concetto di operazione effettiva, sinonimo oggi per la definizione di algoritmo. Church stabilì (1935) un’equivalenza tra la nozione di funzione calcolabile e quella di funzione ricorsiva. In particolare egli dimostrò che per una generica classe di problemi risolubili in maniera elementare (chiamate funzioni calcolabili) vale l’equivalenza secondo cui la stessa classe di problemi è risolubile mediante l’utilizzo di funzioni matematiche ricorsive. Parallelamente alla tesi di Church il matematico inglese Alan Turing (1936) dimostrò che è possibile identificare le funzioni calcolabili con funzioni che possono essere implementate su di una macchina particolare, da lui stesso teorizzata, nota come macchina di Turing. Modello per la costruzione di una tale macchina astratta era il cervello umano nel momento in cui questo svolge una qualsiasi attività matematica.
16
Secondo Roger Penrose, “in modo più completo al Congresso Internazionale di Bologna nel 1928”
(Penrose 1997)
Se è possibile teorizzare la costruzione di una siffatta macchina è possibile descriverne i relativi procedimenti meccanici, il calcolo, l’algoritmo.17 Data l’equivalenza matematica delle due tesi ci si riferisice a queste come ad un’unica tesi, nota in letteratura come Tesi di Church-Turing.18 Il modello che più interessa è quello formulato da Alonzo Church poiché fu questo formalismo ad ispirare direttamente la progettazione di Lisp da parte di John McCarthy. Per dimostrare l’efficacia dell’equivalenza tra funzione calcolabile e funzione ricorsiva, Alonzo Church fece ricorso ad un espediente logico astratto, di tipo notazionale e direttamente riconducibile al -calcolo. L’astrazione permette di interpretare le funzioni come fossero delle regole definibili mediante un tipo particolare di notazione chiamato -notazione. Come ha evidenziato Roger Penrose, il concetto ha “a prima vista, ben poco a che fare con le macchine”, ma rimane uno dei momenti teorici più importanti nella storia dell’informatica. La -notazione infatti permette la trasformazione di qualsiasi funzione in una forma canonica. Si riporta integralmente una, tra le non molte, descrizioni divulgative del concetto di -notazione disponibile in letteratura (Plebe 2004): “Per esempio la notazione delle seguenti funzioni:
17
Qui viene descritto esclusivamente che cosa Turing intenda per procedimento meccanico. Alla questione hilbertiana se tale procedimento sia in grado di risolvere tutti i problemi matematici, la macchina di Turing fornisce una risposta negativa. Una risposta interpretata dal fisico Roger Penrose come una delle possibili dimostrazioni (insieme al celebre teorema dell’incompletezza di Gödel) della natura non algoritmica del pensiero umano. La natura non algoritmica del pensiero non solo caratterizzerebbe aspetti peculiari dell’intuizione matematica (quagli aspetti della matematica non dimostrabili algoritmicamente) ma anche i processi creativi. Un’ardita ipotesi sulla natura di ciò che chiamiamo indimostrabile, ineffabile, viene data dallo stesso Penrose il quale sostiene come “la mente umana trarrebbe vantaggio da effetti quantistici che si verificano nei microtuboli cerebrali, strutture di dimensioni microscopiche costitutive delle sinapsi neuronali. E’un ipotesi che, qualora confermata neuroscientificamente, farebbe veramente la differenza, è noto infatti come una macchina quantistica sia un modello formale superiore rispetto ad una macchina di Turing convenzionale” (Penrose in Plebe 2004) 18 Oggi, questa tesi è uno dei costrutti teorico-matematici più noti nell’ambito della divulgazione scientifica. Nell’ambito di questa dissertazione la conoscenza di questa tesi è importante sia per una corretta interpretazione di quanto sostenuto riguardo la conoscenza dei paradigmi della tecnologia informatica, sia per analizzare lo sviluppo storico successivo delle discipline legate all’intelligenza artificiale, alla psicologia cognitiva, alla scienza informatica. Diverse interpretazioni, forti e deboli di questa tesi hanno diversamente influenzato gli scienziati che da li a poco avrebbero contribuito alla nascita della tecnologia informatica, quindi dei primi linguaggi di programmazione quindi Lisp.
f x = x2 + 1 f x = 5 f 3 = 10 contiene di per sé una certa ambiguita tale per cui “la prima sarebbe una definizione, la seconda un’equazione, e la terza l’applicazione della stessa funzione f. Con l’astrazione la stessa funzione verrebbe definita mediante
(x ( x 2 + 1)) da cui
2
x ( x + 1)) (3) è il numero 10.
Entrando nel merito, in Lisp la programmazione avviene essenzialmente dichiarando mediante il linguaggio le proprietà degli oggetti del discorso, con la procedura fondamentale define. Per esempio dopo aver scritto (cfr. Cap.2. §2.1.2.3 definizione delle funzioni) ( define a 3) Nel contesto del programma esiste (si dichiara l’esistenza di…nda) un oggetto a che è (a cui corrisponde…nda) il numero 3, mentre con: ( define 1 ( list 5 ‘bye ) ) si introduce l’oggetto 1, (formato da…nda) una lista con primo elemento il numero 5 e secondo elemento la stringa bye. I pregi della non ambiguita si pagano con la pedanteria: la notazione è rigorosamente prefissa…Naturalmente l’oggetto definito può essere una funzione, come quella dell’esempio precedente, basta usare l’operatore chiamato proprio lambda. ( define f ( lambda (x) ( + (* x x) 1 ) ) ) per cui scrivendo
( f 3 ) si otterrebbe 10. La ricorsione è chiaramente di casa, ecco come si scrive la definizione di fattoriale: ( define fattoriale ( lambda (n) ( if (= n 0) 1 (* n ( fattoriale (- n 1) ) ) ) ) ) Le forme canoniche non solo possono essere confrontate tra loro, ma stabiliscono una relazione fondamentale, tra modello simbolico-matematico e rappresentatività; ma anche un modello particolare per la progettazione di un linguaggio di programmazione simbolico. In sintesi: grazie all’astrazione è stato possibile trattare i simboli mediante un linguaggio artificiale. Tutto questo potrebbe sembrare lontano dall’ambito della nostra dissertazione. Credo sia necessario considerare, in un tentativo di esplicitazione paradigmatica della composizione musicale al computer, le possibilità stesse dell’esistenza della musica come sistema di rappresentazione simbolico all’interno di una macchina. Queste possibilità (per la musica quanto per altri domini di applicazione) fino all’arrivo del paradigma ad oggetti, sono dedotte dall’astrazione e mediate dal suo linguaggio19 per eccellenza, il Lisp. Ci si è chiesto quindi in che modo il calcolatore ha contribuito allo sviluppo della concezione di nuove forme. 19
Esula dalla presente dissertazione una descrizione tecnica delle conseguenze di tale considerazione. Si consideri tuttavia che le problematiche relative allo sviluppo di un linguaggio non si risolvono solamente con l’interpretazione sintattica ma necessitano anche di una definizione semantica dello stesso. Fu sempre McCarthy a sviluppare il formalismo necessario per le corretta interpretazione del ‘significato’ delle forme canoniche. Questo formalismo prende il nome di S-espressioni (espressioni simboliche) detto anche semantica denotazionale. Ecco che l’operazione di denotazione di tali espressioni è strettamente connessa a quella matematica delle funzioni ricorsive cui si è fatto cenno. La ricorsione rimane uno dei costrutti teorici più importanti sia per la fondazione del concetto di computabilità, quindi per la pratica della programmazione, sia per l’influenza più o meno esplicita che tale concetto ha avuto e continua ad avere sulla prassi della composizione tout-court mediante computer. Si consideri una certa fortuna letteraria del concetto, nella pubblicazione nel 1979 del lavoro di Douglas Hofstadter Gödel, Escher, Bach: un’Eterna Ghirlanda Brillante. Una interpretazione filosofica della storia del numero e del calcolo e sul fondamento delle funzioni ricorsive come “strumento primario per l’ideazione di nuovi oggetti” si trova in Giovanni Piana, Numero e figura idee per una epistemologia della ripetizione, CUEM 1999.
Per chiarire meglio la potenzialità di tale costrutto in relazione alla dominio musicale si riportano di seguito alcune considerazioni circa le conseguenze delle applicazioni del -calcolo nei linguaggi di programmazione. Tre condizioni che, grazie al calcola lambda, rendono possibile, attraverso l’uso di un computer (cfr.Cap.1 §1.3.2.1): 1 rappresentare l’insieme dei concetti attraverso cui descrivere fenomeni musicali (contestuali all’uso e al loro utilizzatore, sia esso compositore, performer o musicologo cfr. Dannenberg, Desain, Honing 1997) 2 la definizione delle variabili relative al fenomeno descritto 3 la possibilità di incrociare, mappare, e rendere possibili operazioni come la moltiplicazione o l’interpolazione di accordi o l’applicazione di qualsiasi funzione matematica, come quelle relative ai fenomeni deterministici e non deterministici (cfr.le modalità dell’assistenza) e ai criteri di auto-organizzazione, per qualsiasi parametro. “ 1- lambda calcolo come metalinguaggio per lo studio della della semantica dei linguaggi artificiali. Dominio dello spazio delle denotazioni.
Come per le lingue naturali, anche per i linguaggi di programmazione possiamo definire una sintassi e una semantica. La sintassi determina le regole per costruire frasi o espressioni ben formate, mentre la semantica ne definisce il significato. Ma mentre le espressioni delle lingue naturali hanno una semantica spesso ambigua e dipendente da informazioni legate al contesto del discorso, ogni frase dei linguaggi di programmazione deve avere un significato univoco che dipenda solo dalla sua forma…la macchina non ha certo la capacità di discernere, in caso di ambiguità, il significato che meglio si adatta al contesto…per definire la semantica di un linguaggio di programmazione, una strada consiste nel costruire un modello, cioè una struttura matematica i cui oggetti sono le denotazioni di dati e programmi, onde due programmi sono equivalenti se denotano lo stesso oggetto. La semantica denotazionale, come viene chiamata in questo approccio, nasce dal progetto di Christopher Strachey e dalle idee di Diana Scott, il quale appunto costruì il primo modello del lambda calcolo introducendo il concetto di dominio come spazio delle denotazioni.
2- Uso delle variabili nella tecnica del passaggio dei parametri.
Gli algortimi “ nel senso dei moderni linguaggi sono espressioni, più o meno complesse, contenenti variabili, dette parametri formali, da cui sono intese dipendere funzionalmente. Quando poi vengono utilizzate in un programma, a esse vengono passati in ingresso dei valori egualmente rappresentanti con espressioni, dette parametri attuali; se dunque si vuol esprimere assiomaticamente quale sia l’effetto della chiamata di una procedura o funzione con determinati argomenti lo si può fare … sostituendo nella definizione della procedura ogni parametro formale con l’espressione che rappresenta il parametro attuale corrispondente…”
3- Teoria dei tipi. Si consideri il paradosso di moltiplicare un numero per una stringa alfanumerica, nonsense dal momento in cui dominio della moltiplicazione è una coppia di numeri. Si consideri che il concetto di dominio è noto a chi programma ma non alla macchina la quale “in ultima analisi manipola successioni di bit”. Come nel paradosso allora può accadere “che a una procedura o funzione venga passato un argomento non appropriato, sicché la comutazione potrebbe bloccarsi, ma anche proseguire fornendo esiti casuali. Quello di classificare secondo tipi i dati…è contemporaneamente un metodo per organizzare l’informazione e per prevenire comportamenti indesiderati. (Ronchi della Rocca, de’Liguoro 2001)” L’intuizione fu allora straordinaria se si pensa che non esisteva, negli anni 30, la necessità empirica di stabilire tali relazioni con alcun linguaggio di programmazione. Il concetto di -calcolo, fondamentale per la definizione di una teoria della calcolabilità, costituisce quindi un modello formale che ha un ruolo importante nello studio dei fondamenti della programmazione. Ciò era ben noto a McCarthy il quale a partire proprio a partire dal concetto di -notazione ha sviluppato un metodo formale (detto formalismo McCarthy) per la definizione e l’estensione del concetto di funzione a “modello computazionale delle funzioni ricorsive generali…(attraverso cui introdurre nda) come meccanismi-base di combinazione di espressioni, la composizione di funzioni, le espressioni condizionali e la ricorsione” (Natali 19992000)
Per -calcolo, nell’intepretazione che ne diede John McCarthy, si intende quindi la possibilità di gestione di tale formalismo e di una conseguente notazione con cui è possibile l’estensione del concetto di funzione matematica all’elaborazione simbolica. Il Lisp perciò, in quanto linguaggio, “potrebbe essere spiegato anche come una interpretazione del formalismo di McCarthy che invece di essere esclusivamente orientato al calcolo numerico, di funzioni sui naturali, è orientato alla manipolazione di liste e alla elaborazione simbolica” (Ausiello 2002) Nel formalismo di McCarthy le funzioni sono perciò definite mediante composizione, espressioni condizionali e ricorsioni, metodi base per la simulazione della forma logica. La natura astratta degli argomenti di questo paragrafo evidenziano da un lato il nucleo concettuale del modello paradigmatico considerato, dall’altro la relazione di tale modello con “l’effettiva costruibilità dei modelli esplicativi previsionali…che ha nell’uso del computer il suo carattere distintivo”. (Zanarini 1995) Il -calcolo, strumento teorico che ha permesso lo sviluppo del linguaggio artificiale Lisp si pone quindi come referente per la rappresentazione simbolica e ontologia del sistema stesso in quanto “interprete” formale del pensiero compositivo20. La nascita del paradigma orientato agli oggetti ha poi ricontestualizzato il ruolo del paradigma funzionale e permesso lo sviluppo di OM. In questo senso un ambiente di programmazione per la composizione musicale assistita dal computer rappresenterebbe sia un modello esplicativo (la formalizzazione delle strutture musicali) che previsionale (l’evoluzione dei modelli formalizzati) della musical knowledge.
Dal modello computazionale al linguaggio di programmazione Vediamo come il linguaggio di programmazione Lisp esplicita tali concetti. 20
Riguardo ciò non sfugge l’osservazione di Marvin Minsky il quale, a proposito della domanda su come si dovrebbe formalizzare la musical knowledge in modo da generare un qualche tipo di azione musicale, risponde: “is formalizing the right idea?…In some domains of computer development that was a good thing. But in other areas, particularly in the semantics of programming, it seems to me that the currently popular formalism are premature and unnecessarily limited in conception…mathematical logic plays a dominant role in contemporary formalizations, and yet is quite inept at expressing the kind of heuristic knowledge we need for developing Artificial Intelligence”. (Forward: A conversation with Marvin Minsky di Otto Laske) Successivamente a questa dichiarazione avrebbe sostenuto che “la programmazione orientata agli oggetti come un modo di realizzare la sua idea di società della mente”, suo modello teorico per la comprensione del comportamento intelligente (da un’intervista a Peter Wegner teorico del paradigma OOP).
La funzione in Lisp è ciò che permette l’elaborazione di strutture simboliche adatte alla simulazione della forma logica. Di seguito la definizione di funzione così come utilizzata nel linguaggio Lisp: funzioni: sono operazioni su dati21 che si applicano a determinati argomenti al fine di produrre un valore. - Le funzioni che sono già fornite dal linguaggio Lisp vengono chiamate primitive. - Le funzioni che vengono definite dall’utente sono dichiarate dall’utente. L’utente, mediante l’utilizzo e la definizione di funzioni, richiede un calcolo. La richiesta di calcolo è nota con il nome di valutazione. Della valutazione si occupa l’inteprete Lisp il quale esegue il calcolo dopo aver accettato quanto richiesto dall’utente. E’possibile sintetizzare questa operazione di valutazione come ciclo di immissione dati, elaborazione e output (denominato readeval-print) di cui si occupa l’interprete Lisp. In OM è possibile interagire direttamente con Lisp attraverso la finestra di Listener (v.fig. 1). Come si vede dalla figura 2 l’interprete Lisp si presenta all’utente con il simbolo “?” o con “>”, detto prompt. L’interprete dopo questi simboli è pronto a ricevere in ingresso i dati e programmi dell’utente per mezzo di un’adeguata sintassi. In Lisp il concetto di funzione beneficia dell’astrazione teorica della lambda notazione, rendendo possibile la definizione di operazioni sia su numeri che sui simboli. Simboli e numeri, in Lisp; sono organizzate sotto forma di espressioni. Per denotare dati e programmi in Lisp si utilizzano i concetti di espressioni elementari (atomiche) e espressioni composte. “Le espressioni composte sono formate a partire dalle espressioni atomiche mediante opportuni meccanismi di combinazione. In particolare un’espressione atomica può denotare un valore o un simbolo. Nel primo caso la valutazione dell’espressione produce il valore che esso denota…nel secondo caso il valore dell’espressione è il valore associato al simbolo…un’epressione composta può essere formata solo da altre espressioni. Il valore 21
I dati sono numeri simboli e liste.
denotato dall’espressione composta deve dipendere solo dal valore delle sue espressioni componenti” (Natali 1999-2000) Di seguito si riporta la valutazione di alcune semplici espressioni atomiche in Lisp: ? 1 1 ? pi 3.141592653589793
;espressione atomica che denota un valore ;espressione atomica che denota un simbolo
Inoltre “Per gestire in modo appropriato collezioni di ampiezza impredicibile di simboli (fu introdotto) un insieme di meccanismi e tecniche complessivamente denominato list processing” (Natali 1999-2000) La rappresentazione esterna di un’espressione è nota come notazione a lista. “…cioè una sequenza di enti racchiusa tra parentesi tonde che ha l’espressione che denota l’operazione sempre al primo posto” (Natali 1999-2000) La lista semplice si nota con una parentesi tonda aperta seguita da nessun elemento, zero o qualche elemento e una parentesi tonda chiusa. ? (+ 2 4) 6 ? (* 5 5 6.3) 157.5 ?
;espressioni composte da simbolo e valori
Nell’esempio successivo viene definita una lista in cui la funzione note è espressione dell’operazione “fa suonare una nota”. Es 1: “…the following list could be used as a representation for a note that has a duration of 2 time-units, a pitch of C (MIDI key number 60) and a maximum loudness: (note 2 60 1) “ (Desain Honing 1997) Tuttavia non basta scrivere l’epressione precedente per ottenere un risultato. E’necessario sapere se la funzione note è già fornita in Lisp (se è quindi una
primitiva) o se è necessario dichiararla. In questo caso la funzione note è da dichiarare, poiché nel Lisp originale non esiste e la valutazione dell’espressione riportata nell’esempio precedente riporterebbe il seguente errore: ? > > > >
(note 2 60 1) Error: Undefined function NOTE called with arguments (2 60 1) . While executing: "Unknown" Type Command-/ to continue, Command-. to abort. If continued: Retry applying NOTE to (2 60 1).
Nel paragrafo 2.1.2.3 viene mostrato come dichiarare una funzione. La notazione lambda è la rappresentazione formale della possibilità di dichiarare un’espressione altrimenti inesistente. Come è stato detto in OM è possibile interagire direttamente con il linguaggio Lisp attraverso la finestra Listener: Tutte le espressioni Lisp possono essere compilate e valutate all’interno di questa finestra. L’utente-compositore, oltre a avere la necessità di scrivere del codice in questa finestra, la utilizza sempre per verificare la corretta valutazione del proprio lavoro nell’ambiente di programmazione. Tutti gli esempi che seguono sono dunque verificabili direttamente nella finestra Listener di OM. Fig. 1 Finestra del Listener in OM
2.1.2.2 Dati, S-espressioni e tipi numerici “Lisp è un linguaggio funzionale per l’elaborazione di strutture simboliche…Una struttura simbolica è una struttura adatta a rappresentare espressioni formali, come ad esempio le formule della matematica e della logica simbolica. In generale una struttura
simbolica è definita in modo ricorsivo22…le strutture simboliche su cui operano i programmi Lisp sono liste incassate”” (Colombetti 2003) LISP è nato come linguaggio per il trattamento di liste, forma privilegiata per l’espressione delle funzioni. Si vede ora in dettaglio come sia possibile, con le liste, rappresentare sia le istruzioni (chiamate S-espressioni) sia le sequenze di espressioni. In Lisp la totalità delle espressioni simboliche equivalgono a tipi di dati fondamentali conosciuti con il nome di atomo, liste e valori booleani: 1- ATOMI – sono simboli e numeri Simboli possono essere Numeri
a 75
aBc -2
R32v ciao +23.6 -0.002
2- Valori booleani Valore falso (per cui qualsiasi altra espressione se non specificata è vera) nil Vero (solo nel caso sia necessario specificarlo)
t
3- LISTE Sono sequenze di elementi costituite da atomi o liste (liste di liste) messe tra parentesi a) Liste semplici sono liste i cui elementi sono costituiti da soli atomi: (aBc -2 75 a) (+23.6) () lista vuota equivale a nil b) Liste multiple23 il cui livello di nidificazione (descritto dal numero delle parentesi) è arbitrario
22
“In Lisp la ricorsione svolge un ruolo molto importante, a causa della natura ricorsiva della struttura
dati fondamentale del linguaggio, la lista.” (Colombetti 2003) 23
Vedremo (Cap.3 §3.2) come complesse modalità di notazione ritmica sono possibili mediante quelli che vengono definiti in OM “alberi” ritmici, descrivibili con liste multiple. Per esempio la seguente sequenza ritmica di quattro semicrome in una battuta di un quarto:
(? ( ((4 8) ((4 ( 1 -2 1)))) ((3 4) ((3 (1.0 2)))) ) )
S-espressioni Atomi e liste sono dette S-espressioni. Queste rappresentano sia i dati, sia le definizioni delle funzioni; per esempio l’applicazione della funzione di moltiplicazione agli operandi (o argomenti) 4 e 2 si esprime come (* 4 2)
Per descrivere opportunamente la S-espressione precedente diremo che (* 4 2) è un’espressione definita da una lista semplice in cui una funzione primitiva moltiplica gli argomenti 4 e 2: se valutata fornisce il valore 8. Tipi numerici In Lisp è possibile definire tre tipi numerici di dato: float, integer e ratio. Si consideri la seguente divisione tra numeri interi (integer) e la relativa valutazione: (/ 6 3) 2
può essere descritta in OM nel seguente modo (((1 4) ((1 (1 1 1 1)))) )) dove, la prima lista semplice di due numeri (((1 4) rappresenta il metro, ((1 rappresenta il numero delle pulsazioni suddivise in (1 1 1 1)))) )) cioè quattro semicrome. Basta cambiare il numero di suddivisioni di una pulsazione per ottenere una quintina di semicrome. (((1 4) ((1 (1 1 1 1 1)))) ))
L’interprete Lisp esegue l’operazione richiesta in quanto il risultato è un numero intero. Nel caso in cui il risultato non può essere un numero intero l’interprete Lisp ne evidenzierà il rapporto (ratio): (/ 5 2) 5/2
Per forzare l’inteprete alla definizione del valore reale si utilizza l’istruzione (float): (float (/ 5 2)) 2.5
La seguente tabella riassume i tipi di dato disponibile in Lisp:
S-espressioni
Liste
Sequenza di S-espressioni
Atomi
Lista vuota (NIL)
Simboli
Numeri
Integer
Floating
2.1.2.3 Primitive Lisp e operazioni sui dati Vengono ora descritte alcune operazioni di base sui dati, cioè sui simboli, numeri e liste per mezzo delle funzioni primitive Lisp. Operazioni sui simboli Nel Lisp alle operazioni sui simboli sono associati i due valori booleani vero, rappresentato da T, o falso, rappresentato da NIL. Tutte le funzioni che restituiscono valori T o NIL sono dette predicati. ATOM verfica che il suo argomento sia un atomo: (atom '(a b c))
NIL (atom 'a) T
LISTP verifica se il suo argomento è una lista: (listp '(a b c)) T (listp 'a) NIL
MEMBER verifica se, tra gli argomenti di una lista di n elementi, sia contenuto l’elemento definito in ingresso. Se contenuto lo restituisce. (member 'do '(mi sol si do)) (DO) (member 'do '(mi sol si re)) NIL
EQUAL verifica che i suoi argomenti siano uguali: (equal 'do 'do) T (equal 'do 're) NIL
Si introduce ora l’istruzione SETQ la quale accetta due argomenti in ingresso assegnando al primo il valore del secondo. Nell’esempio seguente a pigreco viene associato il valore 3.14, poi ad a viene associato il valore di pigreco. Ne consegue che la valutazione sia di pigreco che di a restituirà il valore di 3.14. (setq pigreco 3.14) 3.14 (setq a pigreco) 3.14 pigreco 3.14 a 3.14
Ora si evidenzia l’utilizzo dell’istruzione setq in relazione alle operazioni sui simboli. Si associa al valore a quello di ‘b e verifico l’uguaglianza tra a a, a ‘b:
(setq a 'b) B (equal a a) T (equal a 'b) T
Symbolp restituisce T se il dato fornito alla funzione è un simbolo. ? (symbolp nil) T ? (symbolp 3) NIL
Numberp restituisce T se il dato fornito alla funzione è un numero ? (numberp nil) NIL ? (numberp 3) T
Operazioni sui numeri: Le quattro operazioni aritmetiche +, -, *, / e gli operatori relazionali <, >, <=, >=, /= esempi: (+ 2 2) 4 (+ 2 2 154.87) 158.87 (+ 2 2 (* 4)) 8 (* 2 2) 4 (* 2 (/ 25 5)) 10
Altre funzioni numeriche: (max 5 8 9)
; restituisce il valore Massimo
9 (min 5 8 9) 5
; valore Minimo
(abs 7) 7
; valore assoluto
(expt 3 3) 27
; elevamento a potenza
(sqrt 25) 5
; radice quadrata
(round 1.25) 1 0.25
; arrotondamento e differenza
(round 1.75) 2 -0.25
; arrotondamento e differenza
(truncate 14 4) 3 2
; divisione tra interi e resto
Gli operatori relazionali <, >, <=, >=, /= (diverso da) mettono in relazione due o più numeri restituendone il risultato T o NIL ? (< 67 66) NIL ? (< 67 68) T ? (= 50 50 49 50) NIL ? (= 50 50 50 50) T ? (/= 50 40) T ? (/= 50 50) NIL
Il numero di argomenti delle funzioni varia da funzione a funzione: n argomenti possibili per le funzioni aritmetiche e per MAX, MIN; due argomenti per TRUNCATE, REM, EXPT; un argomento per ABS, SQRT. Di seguito altre funzioni numeriche verificano la natura vera/falsa dell’uguaglianza tra numeri e con lo 0.
(zerop 0) T
; verifica che l’argomento=0
(zerop 5) NIL (eql -6 -6) T
; verifica gli argomenti siano uguali
(eql -6 6) NIL
La sintassi della notazione prevede di solito che il primo elemento di una lista sia una funzione mentre gli altri elementi gli argomenti (o operandi). E’possibile però che sia necessario distinguere (+ 3 4) intesa come somma, dalla lista costituita dai simboli “+”, “3” e “4”. Per risolvere questo problema si usa l’operatore quote ‘ (l’apice). Esso impedisce la valutazione degli argomenti una espressione. Definizioni di funzioni numeriche La dichiarazione di una funzione è uno degli strumenti più importanti del linguaggio Lisp (cfr.§ 2.1.2.1) poiché permette di arrichire la libreria di funzioni già definite dall’interprete. Per dichiarare una funzione si usa il comando DEFUN che possiede la seguente sintassi: (DEFUN
() () esempio: voglio creare una funzione SOMMASQRT che automaticamente calcola la radice quadrata della somma di due valori. (defun sommasqrt (x y) (sqrt (+ (* x) (* y)))) SOMMASQRT
; definisco la funzione
(sommasqrt 17 8) 5
; valuto la mia funzione
Operazioni sulle liste
L’operatore CAR restituisce il primo elemento di una lista. Esso è sintatticamente equivalente a FIRST. SECOND restituisce il secondo. CDR restituisce una lista senza il primo elemento. CDR equivale a REST. (car '(a b c)) A (first '(a b c)) A (second '(a b c)) B
Nell’esempio seguente il valore è restituito a partire dalla valutazione di una lista di liste : (first '((a b) (c d))) (A B) (cdr '(a b c)) (B C) (rest '(a b c)) (B C) (cdr '((a b) (c d))) ((C D))
CAR e CDR possono essere combinati tra di loro in ogni combinazione. Per esempio nella funzione CADR: (cadr '(1 2 3 4)) 2
da intepretarsi come (car (cdr ‘(1 2 3 4))) cioè 1- il cdr della lista la cui valutazione fornisce 2 3 4 2- il car di 2 3 4 la cui valutazione è 2 NULL verifica se l’argomento è una lista vuota: (null '()) T (null '(fa do mi)) NIL
CONS, LIST e APPEND sono tre funzioni primitive che permettono la costruzione di liste. CONS è una funzione a due argomenti che restituisce una lista il cui FIRST è il primo argomento e il cui REST è il secondo argomento: (cons 're '(fa la)) (RE FA LA)
APPEND prende n liste e le riunisce in un’unica lista: (append '(sol si) '(re fa)) (SOL SI RE FA)
LIST restituisce tutti gli elementi di una lista: (list 're 'fa 'la 'do) (RE FA LA DO)
REVERSE restituisce l’inverso degli argomenti di livello più elevato di una lista: (reverse '(1 2 3 4 5)) (5 4 3 2 1) (reverse '(1 2 (3 4 5))) ((3 4 5) 2 1)
LENGHT conta il numero di livelli più elevato di una lista: (length '(do fa si mi la re sol do fa)) 9 (length '(do fa si mi la (re sol do fa))) 6
LENGHT e REVERSE hanno caratteristiche particolari: - agiscono sul livello più elevato di una lista dove per livello elevato si intende il livello di incassamento. - Considerano atomi e liste allo stesso modo per cui nel secondo esempio LENGHT conta il numero di elementi del livello piu elevato cioè do fa si mi la e considera re sol do fa come un’unica lista. LAST restituisce una lista che contiene l’ultimo elemento: (last '(re sol mi)) (MI)
I seguenti esempi sulle primitive BUTLAST e RANDOM sono tratti da (Simoni 2003). La primitiva BUTLAST restituisce gli ultimi N elementi di una lista. Il primo argomento BUTLAST è la lista mentre il secondo argomento, opzionale, è il numero degli elementi che deve essere omesso. Se non è fornito nessun secondo argomento, BUTLAST omette un solo elemento. ? (butlast '(c e g b-flat)3) (C) ? (butlast '(c e g b-flat)) (C E G) ? (butlast '(c-major (c e g) d-major (d f-sharp a))) (C-MAJOR (C E G) D-MAJOR)
La primitiva RANDOM restituisce un numero casuale. RANDOM accetta in ingresso un valore e restituisce un numero compreso tra 0 è il valore in ingresso. ? 4 ? 0 ? 3 ? 5 ? 4 ? 0 ? 4
(random 6) (random 6) (random 6) (random 6) (random 6) (random 6) (random 6)
2 > (random 6.0) 3.958769388420078 2 > (random 6.0) 5.403842589638834 2 > (random 6.0) 4.884284017392032 2 > (random 6.0) 0.9467089305570515 2 > (random 6.0) 4.67365146181295 2 > (random 6.0) 3.2665139274047945 2 > (random 6.0) 2.562129807774219 2 > (random 6.0) 3.6900570163318083
Definizione di una funzione di liste Il procedimento per dichiarare una funzione di liste prevede la stessa sintassi utilizzata per la dichiarazione di funzioni numeriche.
(DEFUN () () Esempio: creare la funzione triade minore di la (la-min-chord) (defun la-min-chord () (list ‘la ‘do ‘mi) la-min-chord
; definisco la funzione
(la-min-chord) (LA DO MI)
; valuto la mia funzione
; valutazione
Espressioni logiche e condizionali In quanto linguaggio funzionale, Lisp permette la costruzione e la valutazione di espressioni logiche complesse. IF è una funzione a cui segue un test clausola che valuta T o NIL. Se la valutazione del test risulta T allora viene valutata la T-conseguenza. Se la valutazione del test risulta NIL allora viene valutata la NIL-conseguenza che è di natura opzionale. Di seguito l’esempio riportato in (Simoni 2003) Data la forma della funzione IF (IF ) nell’esempio ? (setf *midi-note* 60) 60 ? (if (< *midi-note* 60) (setf *velocity* .9) (setf *velocity* .5)) 0.5
si usa SETF per assegnare alla variabile *midi-note* il valore 60. Ora vogliamo assegnare alla variabile *velocity* il valore .9 se *midi-note* è minore di 60. Altrimenti si assegna alla *velocity* il valore .5. Il test (< *midi-note* 60) utilizza l’operatore relazionale < per analizzare se il valore di *midi-note* è minore di 60. Dal momento in cui a *midi-note* è stato assegnato il valore di 60 il test valuta NIL e il suo conseguente cioè il valore 0.5. (Simoni 2003) NOT è negazione logica, fornisce il valore T se l’argomento è NIL. NOT equivale alla funzione NULL. ? (not (= 7 8))
T ? (not 3) NIL ? (not nil) T ? (null (= 7 8)) T ? (null 3) NIL ? (null nil) T
AND e OR sono operatori logici rispettivamente di congiunzione e disgiunzione e accettano un numero n di elementi. Il risultato della valutazione dipende dalle seguenti tavole di verità da (Simoni 2003): AND Forma 1
Forma 2
Valutazione
T
T
T
T
F
F
F
T
F
F
F
F
Forma 1
Forma 2
Valutazione
T
T
T
T
F
T
F
T
T
F
F
F
OR
? (and (numberp 'c-major) (symbolp 'd-major)) NIL ? (or (numberp 'c-major) (symbolp 'd-major)) T ?
COND è usato per valutare una serie di condizioni. Si presenta con la seguente forma generica: (COND ( ) ( ) .
. . ( ) COND è seguito da un insieme di coppie ognuna delle quali è l’insieme di una espressione che può assumere un valore vero/falso e di un azione che viene calcolata se la prima espressione assume il valore vero. Una tipica valutazione della forma generica sopra definita è: se l’espressione1 è falsa si vada all’espressione2 e così via fino a trovare l’espressione con valore vero e a cui seguirà l’azione corrispondente. Si consideri l’esempio seguente (Simoni 2003): si dichiara la funzione test-rangewith-cond che utilizza cond per determinare se il valore di una nota midi in ingresso alla funzione è compreso entro il range delle specifiche MIDI (0-127) ? (defun test-range-with-cond (midi-note) (cond ((< midi-note 0) 'too-low) ((> midi-note 127) 'too-high) (T 'in-range))) TEST-RANGE-WITH-COND ? (test-range-with-cond -6) TOO-LOW ? (test-range-with-cond 56) IN-RANGE ? (test-range-with-cond 129) TOO-HIGH
CASE è simile a COND ma COND valuta una key form che influisce direttamente sulla scelta del conseguente. La seguente è la sua forma generica: (CASE ( …) ( …) . . . ( …)) Nell’esempio seguente si dichiara la funzione midi-range-with-case che assegna 1 se il valore di una nota midi è inferiore al range MIDI (da 0 a 127), 2 se il numero della nota MIDI è più alto e 3 se il numero è tra 0 – 127.
? (defun midi-range-with-case (midi-note) (let ((result (if (< midi-note 0)1 (if (> midi-note 127)2 3)))) (case result (1 'too-low) (2 'too-high) (3 'in-range)))) MIDI-RANGE-WITH-CASE ? (midi-range-with-case -7) TOO-LOW ? (midi-range-with-case 60) IN-RANGE ? (midi-range-with-case 128) TOO-HIGH
In questo caso midi-range-with-test informa LET. Il valore degli if nidificati è assegnato alla variabile RESULT. Se l’input è maggiore di zero alla variabile RESULT è assegnato il valore di 1. Se l’input è maggiore di 127, alla variabile RESULT è assegnato il valore 2. Se il condizionale valuta NIL, a RESULT è assegnato il valore di 3. In questo caso la variabile RESULT è utilizzata come key-form per la condizione CASE. Programmazione applicativa La programmazione applicativa permette l’applicazione di una funzione ad ogni elemento di una lista. A questo fine la primitiva MAPCAR permette l’applicazione di una funzione, primitiva o a sua volta definita dall’utente, ad ogni elemento di una lista. ? (mapcar #'sqrt'(25 36 81)) (5 6 9)
Ricorsioni e iteratori Una funzione ricorsiva è una funzione che può richiamare se stessa. Esempi di ricorsione possono essere: - il fattoriale di un numero n, n! (detto n fattoriale) dato dal prodotto N*(n-1)*(n-2)….*1 “5! È il prodotto dei primi cinque numeri naturali ed è uguale a 120
- la serie di Fibonacci, definita dalla progressione 0, 1, 1, 2, 3, 5, 8, 13… in cui ogni numero della serie è la somma dei due numeri precedenti. Il rapporto dei numeri di fibonacci successivi che converge verso il valore 1,618 (cioè (1 + sqrt ( 5 ) ) /2 ) è chiamato numero aureo o rapporto aureo. Nell’ambiente di programmazione OM le funzioni ricorsive e iterative sono molto utilizzate. Si pensi per esempio ad una scala musicale (cfr.Cap.3 § 3.1.3). Essa può essere dedotta a partire da un’unica altezza. Questa viene reiterata n volte (cioè per il numero di note che desideriamo contenuto nella scala) con valori sempre differenti (corrispondenti all’ampiezza intervallare desiderata). Si rmanda per il presente paragrafo direttamente alle implementazioni degli iteratori e collettori nell’ambiente di programmazione OM al Cap.4. Per quello che riguarda la differenza tra ricorsione e iterazione si pensi che “uno stesso problema può essere risolto in modo ricorsivo o iterativo….entrambe si basano su una struttura di controllo: l’iterazione utilizza una struttura iterativa, la ricorsione una di selezione. Anche la ripetizione è alla base di entrambe, nell’iterazione addirittura in modo esplicito. Entrambe hanno poi bisogno di una condizione che le faccia terminare: l’iterazione termina quando la condizione del ciclo non è più soddisfatta, mentre la ricorsione termina quando si raggiunge il caso base. In caso contrario l’iterazione e la ricorsione possono essere infinite. Per l’iterazione ciò si verifica quando la condizione non diventa mai falsa, mentre per la ricorsione quando non c’è modo di convergere verso il caso base. La ricorsione ha molti lati negativi: il numero di chiamate alla funzione è generalmente alto e ciò rappresenta un costo in termini di tempo di elaborazione e di memoria utilizzata. Ciascuna chiamata ricorsiva, infatti, causa la creazione di un’altra copia della funzione e ciò può comportare il consumo di parecchia memoria. L’iterazione invece è limitata in una funzione, per cui non si ha né un eccessivo tempo di elaborazione né un consumo eccessivo di memoria…qualsiasi problema che abbia una soluzione ricorsiva, ne ha anche una iterativa. Normalmente si preferisce utilizzare quella ricorsiva quando la ricorsione rispecchia in modo più naturale il modo in cui risolvere il problema, per cui il codice risultante è più semplice da scrivere e da verificare” (Deitel&Deitel 2001). Si conclude la panoramica su alcune delle principali funzioni del linguaggio Lisp. Si è visto come il paradigma funzionale sia intepretabile come valutatore di funzioni. Il paragrafo successivo introduce alla programmazione orientata agli oggetti, attuale paradigma di riferimento per lo sviluppo della tecnologia software.
“Il paradigma orientato agli oggetti vede l’elaboratore come un simulatore, in cui gli “oggetti” rappresentano le entità di un mondo virtuale, ciascuna con specifiche conoscenze e capacità, che si scambiano informazioni e richieste: un paradigma che tende chiaramente a riprodurre una situazione di lavoro cooperativo. Questo paradigma è intrinsecamente concorrente e come tale non completamente modellabile con il lambda calcolo, che è invece essenzialmente sequenziale. Ciò nondimeno uno dei temi più attuali della ricerca nel campo della teoria della programmazione è la definizione di un linguaggio astratto su cui studiare la programmazione a oggetti, e le proposte che sono state fatte si basano principalmente sul lambda calcolo, per descrivere il frammento sequenziale di questi linguaggi, arrichito con costrutti specifici per modellare la concorrenza” (Ronchi della Rocca de’Liguoro 2001) Con l’introduzione del paradigma ad oggetti e’possibile quindi descrivere le funzioni fin qui definite come oggetti particolari dotati di caratteristiche tipicamente sequenziali e funzionali. 2.1.3 OOP A partire dagli anni 80 i concetti derivati dal paradigma della programmazione object-oriented (OOP) vennero integrati nel linguaggio Common Lisp dando vita al Common Lisp Object System (CLOS). I fondamenti della programmazione orientata agli oggetti furoni introdotti verso la fine degli anni 60 all’interno della comunità dei programmatori del linguaggio SIMULA. Grazie alla formulazione di alcuni concetti chiave, si può ancora oggi ritenere questo paradigma come dominante per la definizione di linguaggi di programmazione di alto livello (per esempio Java e C++). L’approccio orientato agli oggetti “…chiede al progettista…di ragionare sulle relazioni che esistono tra gli elementi di cui è composta la situazione-problema su cui egli deve lavorare. Questo fatto non solo costringe il progettista a potenziare la dimensione di “analisi” del suo lavoro rispetto alla tradizionale preminenza della parte di “progettazione”, ma anche lo mette in una situazione che non è più così lontana come in
precedenza da quella in cui si trova l’utilizzatore del sistema” (Mantovani 1995) Caratteristica del paradigma orientato agli oggetti è la definizione del costrutto classe, il quale specifica struttura e comportamento di entità computazionali chiamati oggetti. Gli oggetti permettono l’astrazione di comportamenti e strutture sia di dati che di variabili. L’oggetto, di per sé, non è la rappresentazione grafica di un concetto (benchè possa diventarlo come nelle interfacce di noti sistemi operativi) bensì ne costituisce il modello astratto. Il livello di astrazione è elevato fino al momento in cui si riconosce che le caratteristiche di più oggetti possono essere direttamente derivate da un unico costrutto definito da una classe.24 “Un modello è l’astrazione di qualcosa con lo scopo di comprenderla meglio prima di costruirla…un modello omette dettagli non essenziali, è piu facile da manipolare dell’entità originale. L’astrazione è una capacità umana fondamentale che consente di gestire la complessità…è l’esame selettivo di certi aspetti di un problema…deve essere sempre riferita a un qualche obiettivo…tutte le astrazioni sono incomplete e imprecise…nei modelli dunque non si deve ricercare la verità assoluta ma l’adeguatezza rispetto al problema che si stà trattando” (Rumbaugh Blama 1995) Di seguito una breve introduzione ai linguaggi OOP con la definizione delle sue proprietà fondamentali: oggetto, classe, metodo, polimorfismo e ereditarietà. 2.1.3.1 Breve introduzione ai linguaggi orientati agli oggetti Un oggetto può essere qualsiasi cosa a meno di non essere definito. Per definire un oggetto, cioè far si che possieda una propria identità che lo differenzi da altri oggetti, è necessario specificarne degli attributi. A questo fine gli oggetti si compongono di una struttura di dati che ha la funzione di specificare gli attributi e le operazioni eseguibili su di essi. Oggetti di questo tipo vengono definiti in classi.
24
In alcuni linguaggi come CLOS la classe è essa stessa un oggetto descrivibile per mezzo di una metaclasse.
Esempio: Classe: Attributi:
Persone Nome Cognome Codice fisc
Oggetto 1 della classe Persone Nome: Marco Cognome: Troni Codice fisc: mrctr009234234p Oggetto 2 della classe Persone Nome: Cognome: Codice fisc:
Classe: Attributi:
Giulia Barolo Gubr23984092384o
Rettangolo Lunghezza
Oggetto 1 della classe Rettangolo Lunghezza: 8
Larghezza Colore area
Larghezza: Colore area:
4 giallo
La classe può quindi essere utilizzata per la creazione di molti oggetti. Nell’esempio precedente sono state specificate le classi Persone e Rettangolo mediante una struttura di dati definita da tre attributi. Ciò che ancora non è stato definito è la possibilità di eseguire delle operazioni sugli attributi della classe. Così come considerata fin’ora la classe è solo un modello. In quanto modello la classe è l’astrazione di un concetto, ma non permette alcuna operazione su di essa così come la definizione degli attributi della classe garantisce solo l’accesso al dato “nome”, “cognome” e “codice fiscale”. Per modificare i campi degli attributi è necessario allocare un blocco di memoria alla classe. Questa operazione prende il nome di istanziazione della classe. In quanto definiti da attributi specifici (“Marco”, “Giulia”, “8”) tutti gli oggetti possono essere considerati come istanze della relativa classe. La possibilità di eseguire una o più operazioni sulla classe mediante un tipo di comportamento prende il nome di metodo.
Esempio: Classe: Attributi:
Persone Nome Cognome Codice fisc
Metodi:
modifica
Oggetto 1 della classe Persone Nome: Marco Cognome: Troni Codice fisc: mrctr009234234p Oggetto 2 della classe Persone Nome: Giulia Cognome: Barolo Codice fisc: Gubr23984092384o
cancella Classe: Attributi:
Rettangolo Lunghezza Larghezza Colore area
Metodi:
modifica ruota cancella sposta
Oggetto 1 della classe Rettangolo Lunghezza: 8 Larghezza: 4 Colore area: giallo
Si nota dall’esempio che differenti classi possono condividere medesimi metodi; in questo caso le classi persona e rettangolo condividono i metodi modifica e cancella. Nonostante l’applicazione dei metodi possa apparire uguale (comunque si cancella o si modifica un attributo) in realtà medesimi metodi applicati a classi differenti si comportano in maniera differente (si conviene che cancellare un rettangolo potrebbe non avere per l’utente lo stesso significato che cancellare il nome di una persona). Come vedremo in dettaglio nel §. 2.1.5.2.1 può essere necessario per esempio che l’oggetto “+” (somma) possa servire sia per sommare due numeri (2+2) sia per sommare due accordi (do mi sol + si re fa). In questo caso è necessario specificare differenti metodi per caratterizzare in modo differente il possibile comportamento di una classe. Questa importante caratteristica del comportamento dei metodi prende il nome di polimorfismo. La possibilità di trasferire attributi e metodi da una classe ad una sottoclasse è nota invece con il nome di ereditarietà. Con l’ereditarietà il programmatore specifica attributi e metodi comuni alle classi una sola volta con la conseguente possibilità di riutilizzare le specifiche della classe.
2.1.3.2 CLOS CLOS è l’acronimo di Common Lisp Object System, e definisce il sistema orientato agli oggetti dell’ANSI Common Lisp. “ CLOS makes a good example of an embedded language…It is very well-itegrated with Lisp, and it makes good use of the abstractions that Lisp has already…we can often see Lisp through CLOS…CLOS is essentially a program which takes programs built out of object oriented abstractions, and translates them into programs built out of Lisp abstractions…the abstractions of OOP map so neatly onto those of LISP that one could almost call the former a special case of the latter. The OOP can easily be implemented as Lisp object, and their methods as lexical closures.” (Touretzy 1983) I concetti base del CLOS fanno riferimento alle definizioni del paradigma OOP con alcune precisazioni terminologiche. Di seguito diamo le definizioni di classe, oggetto, ereditarietà, metodi e polimorfismo, ricordando che è su questo linguaggio di programmazione che è stato implementato OM: “Il concetto di oggetto è l’insieme delle nozioni di classe e metodo. Una classe è la descrizione astratta di una famiglia di elementi che possiedono caratteristiche simili. Queste caratteristiche appaiono sotto forma di campi della classe. Un oggetto è una struttura sotto forma di istanza della classe, questo significa che è possibile specificare concretamente i differenti valori per i campi della classe. Per esempio, è possibile immaginare la classe NOTA munita di due campi, altezza (in valori midi) e intensità (esprimibile in valori midi da 0 a 127). Così un do in fff sarà un’istanza della classe NOTA per il cui campo altezza assumerà il valore 60 e per il campo intensità il valore 110. Ereditarietà: definito un collegamento di ereditarietà tra due classi A e B (con B che erdita da A per esempio) è necessario specificare che B è una sottoclasse di A. Per riprendere lo stesso esempio è possibile dire che la classe NOTA eredita dalla classe OGGETTI MUSICALI SEMPLICI il campo DURATA in millisecondi. I collegamenti ereditari definiscono un ordine gerarchico di classi. (cfr. § 2.1.5.4) Metodi: tutti i metodi di una classe sono accessibili ai metodi delle sottoclassi. Così il metodo ‘étirement-temporel’ definito per la classe oggetti musicali semplici è possibile applicarlo sia a note che silenzi.
Polimorfismo: è un concetto molto sfruttato in OM: più metodi in CLOS possono pur supportando il medesimo nome appartenere a classi differenti. Lo stesso metodo avrà così comportamenti differenti a secondo dell’oggetto cui verrà applicato. Per esempio il metodo TRASPOSIZIONE può essere definito sia per le note che per i silenzi di una sequenza in maniera da essere applicato integralmente all’oggetto. Per una NOTA il metodo TRASPOSIZIONE avrà come effetto l’aggiunta di un certo valore all’altezza di quella nota, per il silenzio sarà invece invocata una funzione di identità tale per cui da mantenere inalterata la funzione dell’oggetto”. (cfr. 2.1.5.2.1) CLASSI, SUPERCLASSI e CAMPI Le classi in CLOS sono organizzate gerarchicamente in modo tale da ereditare la struttura da altre classi. Queste ultime vengono definite superclassi. In cima alla classe gerarchica vi sono due classi, la classe definita T (la quale non ha superclassi ed è la superclasse di ogni classe eccetto se stessa) e la classe chiamata standard-object che è la superclasse di tutte le classi create dal programmatore. Ad ogni classe viene associata una serie di campi utilizzati per conservare informazioni associate alla classe e alle sue istanze. ISTANZE In CLOS classi e istanze sono distinte. Un’istanza è un oggetto Common Lisp che può possedere un suo stato di default derivato dalla definizione della classe o può avere il suo stato particolare (cfr.§ 2.1.5.4 p.es. la classe note). Un’istanza può utilizzare un metodo definito dalla sua classe o quello definito dalla superclasse della classe, oppure avere un suo proprio metodo. Ogni oggetto Common Lisp incluse le classi sono istanze di qualche classe. Metaprogrammazione in CLOS: l’implementazione di OM E’stato detto che CLOS supporta un protocollo di metaprogrammazione su cui è stato implementato OM. Di seguito l’illustrazione tratta da (Agon 1998) evidenzia una parte della gerarchia di classe dei metaoggetti in CLOS (definita parte statica) necessaria all’implementazione di OM.
Di seguito, l’albero gerarchico evidenzia le classi CLOS in grassetto e l’associazione per metaprogrammazione di tutte le classi fondamentali di OM.
“Cette hiérarchie de classes rend compte de tous les objets manipulables dans l’environment visuel et dans le langage de programmation visuel d’Open Music. Les classes fondamentales du système objet visuel d’Open Music, OMClass, OMMethod, OMSlot et OMGenFun, héritent d’une part de la classe OMObject et d’autre part d’une class fondamentale CLOS homologue.” (Truchet 2004)
2.1.4 OM come linguaggio visivo All’avvio del software OM si presenta all’utente con un’interfaccia grafica così come rappresentata in figura 2. L’aspetto visivo di un linguaggio orientato agli oggetti, estende il concetto di interfaccia all’utilizzo di schermate, menu, finestre e icone che permettono l’incapsulamento dell’informazione. 2.1.4.1 Sintassi e semantica Prima di essere eseguito (valutato) un programma è sottoposto ad un processo di compilazione o intepretazione (v.Listener). Lo scopo di questo processo è quello di tradurre il programma originale (codice sorgente) in uno semanticamente equivalente, ma eseguibile su una certa macchina. Per analogia con i linguaggi naturali anche i linguaggi artificiali possiedono una sintassi ed una semantica. La sintassi definisce un insieme di regole formali che definiscono le sequenze di simboli (altrimenti dette stringhe) proprie del linguaggio. Un analizzatore sintattico verifica se le definizione delle frasi del linguaggio sono coerenti con le specifche grammaticali dello stesso. La semantica, in quanto studio del significato, fornisce una specifica non ambigua del linguaggio stesso. Un analizzatore semantico verifica se un linguaggio è logicamente coerente. Nel linguaggio visivo di OM sintassi e semantica dei linguaggi sono definite per mezzo di rappresentazioni iconiche. Ogni rappresentazione iconica è costituita da una o piu primitive lessicali. 2.1.4.2 Primitive lessicali Il termine primitive lessicali definisce l’insieme combinato di elementi grafici di base: icone, rettangoli, box (scatole), linee e testi rappresentano gli oggetti base del linguaggio (classe, istanze, metodi…). Un testo puo rappresentare un commento generico all’algoritmo, oppure una lista Lisp. 2.1.4.3 Specifiche sintattiche L’insieme delle primitive lessicali (icone e testi) rappresentano visivamente i concetti astratti così come definiti dai linguaggi paradigmatici di OM. Classi e istanze possono essere richiamate e visualizzate intuitivamente sullo schermo. Per definire un algoritmo queste possono essere connesse tra loro per mezzo di ingressi e
uscite e relazioni ereditarie. L’insieme delle caratteristiche proprie dei singoli oggetti definisce uno specifico comportamento sintattico. Di seguito alcune “constructions syntaxiques intermédiaires” (Agon 1998) Inlet Rappresenta uno o più ingressi ---
inlets
Outlet Rappresenta una o piu uscite
outlets
Connessioni Una connessione “est définie par une ligne simple dont une extrémité est en contact avec un paramètre de sortie (source) et dont l’autre est en contact avec un paramètre d’entrée (cible)” (Agon 1998)
outlet
connessione inlet
2.1.4.4 Semantica funzionale Per il compositore il significato di quanto composto nell’algoritmo definisce la semantica dello stesso. Esso rappresenta la formalizzazione di una qualche regola, idea o intuizione. In OM la semantica di un algoritmo è definita dalla nozione di Patch. Un Patch è il corpo di un programma. In quanto struttura determinata dalla connessione di oggetti sintatticamente definiti, un Patch rappresenta “…un graphe d’invocation fonctionnelles. On peut demander l’évaluation en n’import quel point de ce graphe…une chaîne d’evaluations correspond à l’exécution du programme” (Agon 1998). La semantica in OM quindi definisce le regole affinchè le invocazioni funzionali Lisp e quelle orientate agli oggetti, vengano correttamente eseguite dai relativi “rappresentanti” grafici definiti sintatticamente. 2.1.5 L’ambiente di programmazione Open Music Il percorso tracciato fin’ora è servito ad evidenziare le diverse fasi che hanno caratterizzato la progettazione di OM. L‘ambiente di programmazione riguarda direttamente l’utente-programmatore ed è con esso che il compositore ha “praticamente” a che fare per interagire con i suoi algoritmi. In questo ambiente il compositore lavora e valuta l’efficacia estetica delle proprie idee. Gli strumenti (tools) a disposizione del compositore per formalizzare i propri algoritmi all’interno dell’ambiente di programmazione sono classi e funzioni opportunamente connesse tra loro. L’algoritmo viene definito all’interno di un apposito spazio chiamato patch. Più patch possono essere organizzate nel tempo per mezzo di uno strumento chiamato maquette. La finestra di Listener Lisp è sempre attiva durante tutta la sessione di lavoro. La figura seguente rappresenta l’interfaccia di OM così come si presenta all’avvio del programma in ambiente Macintosh.
Fig. 2 2.1.5.1 WORKSPACE Con il termine Workspace si definisce l’interfaccia principale di OM. Ogni utente può configurare il proprio Workspace ordinando le proprie icone, patch e/o progetti in apposite cartelle. Il Workspace è quindi un contenitore in cui l’utente può organizzare il proprio lavoro per mezzo della ben nota metafora desktop a finestre di Macintosh. Nel workspace è predefinta la presenza delle cartelle packages e globals. Il Workspace è un ambiente di lavoro persistente.25 2.1.5.2 PACKAGES Packages è una cartella che contiene tutte le classi e le funzioni del programma26. La figura seguente mostra la cartella packages con alcuni sottopackages. Il criterio di organizzazione per sottopackages è funzionale alla finalità del sottopackage stesso. Per cui esiste un package che contiene le istruzioni LISP, un package che contiene istruzioni aritmetiche, combinatorie, musicali e così via..
25 26
Non è necessario salvare dal momento in cui un oggetto è creato nel workspace. Una lista delle funzioni e classi disponibili in OM è disponibile anche dal menu global.
Fig.2 Packages: si nota il package kernel con i relativi sottopackages e il package music con il relativo sottopackage score aperto che permette la visione delle relative classi. 2.1.5.2.1 CLASSI e FUNZIONI Il packages contiene classi e funzioni. Come è stato detto il concetto di classe è fondamentale nella programmazione CLOS. Con esso si possono definire un gruppo di oggetti che descrivono un tipo particolare di comportamento. Per esempio la classe chord in OM definisce la
possibilità di definire delle verticalità, degli accordi; chord-seq permette la definizione di sequenze di note/accordi, cioè distribuite nel tempo. Il concetto di classe in OM assume però delle caratteristiche del tutto particolari che lo distinguono in parte dal concetto di classe così come definito dal paradigma OOP e già sottolineate per il linguaggio CLOS: “Dans Open Music, toute instance appartient à une classe. La principale différence avec les languages par objets traditionnels, où les classe sont définies par leurs champs et leurs méthodes, réside dans le fait que dans Open Music les méthodes appartiennent à une fonction générique…la définition d’une classe consiste, d’abord, en la définition des champs déterminant la structure de la classe. La définition des méthodes, elle, est séparée de la définition de la classe et se fera lors de la définition d’une fonction générique. L’utilisateur peut, à l’aide du mécanisme de glisser-déposer définir une classe en ajoutant des vues de champs dans un container de classe.” (Agon 1998) La figura mostra chiaramente questo tipo di struttura. La seguente figura illustra il contenuto della classe chord con i relativi campi. Fig. classe chord
Nella figura sono evidenziati i cinque i campi che definiscono la classe chord. L’icona sotto slots rappresenta liste Lisp definite in questo caso da valori di default
(Default value) espressi in dati MIDI. Tutti i campi sono istanze della classe per cui è possibile editare il contenuto della lista; così come tutti i campi possono essere “mostrati” (Show) all’utente per essere opportunamente editati. Questo è possibile immetendo la classe chord all’interno di un patch poiché è in esso che il compositore definisce gli algoritmi. Una volta trascinato27 in un patch la classe chord genera delle istanze (il patch prende a questo punto il nome di factory) i cui i campi pubblici sono disponibili per ricevere dati in ingresso e per essere valutati in uscita. La figura seguente mostra le diverse modalità di rappresentazione della classe chord all’interno di un patch.
27
Drag and drop
La finestra centrale rappresenta il patch dove risiede la factory della classe chord. Due sono le modalità di rappresentazione della factory: Mediante il simbolo della propria classe (icona a sinistra) o per mezzo della notazione musicale tradizionale. Ogni modalità di rappresentazione condivide i medesimi ingressi (inlets) e uscite (outlets) così come definiti nei campi della classe. In particolare si nota la modalità di notazione dei valori parametrici dell’accordo così come definiti nei campi degli inlets: da sinistra verso destra sono rappresentate espressioni in midicents per definere le altezze, la velocity per l’ampiezza, offset, durata e numero del canale
MIDI. La finestra superiore al patch mostra invece l’editor con cui è stato scritto l’accordo. Come valuta il Listener Lisp questa singola factory? Essendo i campi della classe chord definiti come liste si può notare come la valutazione di ogni singolo outlet restituisca espressioni di liste. In particolare la valutazione del secondo outlet restituisce nella finestra del Listener l’espressione (6000 6500 6900 7400) che è la corretta notazione in midicents dell’accordo do fa la re. FUNZIONI All’interno del Packages è possibile visualizzare oltre alle classi dei sottopackages anche l’insieme delle funzioni generiche associate al sottopackage selezionato. Nel paragrafo precedente è stata evidenziata la differenza sostanziale tra classi e metodi tale per cui ad ogni metodo in OM è associata non una classe ma una funzione generica. Quindi nel Packages per ogni funzione generica è possibile evidenziare la relativa collezione dei metodi:
A partire da sinistra della schermata si evidenzia il sottopackages score aperto con le relative classi. Al centro l’insieme delle funzioni generiche associate al sottopackage score. A destra la collezione di metodi relativi alla funzione concat. Una funzione, quando definita da una collezione di metodi, caratterizza un possibile comportamento di una classe. Questa caratteristica delle funzioni, che è propria dei linguaggi OOP, assume il nome di polimorfismo. Il polimorfismo di una funzione permette a differenti oggetti di rispondere in modo differente allo stesso messaggio.
Il manuale di OpenMusic riporta un esempio che chiarisce bene le possibilità di comportamenti differenti: “…you could decide that the ‘+’ method, if called with two numbers computes their sum, and if called with 2 musical structures will concatenate them.” Cos’è quindi che determina il comportamento di una funzione polimorfica? L’utente è libero di specificare per quali funzioni è possibile definire i diversi comportamenti. Per fare questo è necessario definire un metodo. Nell’esempio precedente la somma numerica è definita dal metodo ADDnumbers(a1, a2) In cui ADD definisce la funzione e ADDnumbers(a1, a2) il metodo necessario alla funzione stessa quando ad essa sono associati due numeri. Nel caso dei due accordi, la loro concatenazione è definita dal metodo ADDchords(a1, a2) In cui ADD è funzione e ADDchords(a1, a2) è il metodo necessario alla funzione stessa quando ad essa sono associati degli accordi. Il compositore è libero di definire le proprie funzioni e relativi metodi. 2.1.5.3 LE CLASSI MUSICALI: IL PACKAGE MUSIC-SCORE La seguente figura mostra la struttura gerarchica dell’insieme delle classi musicali disponibili in OM. Esse rappresentano gli elementi base attraverso cui rappresentare gli eventi musicali e fondamentali nella strutturazione degli algoritmi definiti nelle patches.
Segue la descrizione dei campi di ciascuna classe. Delle classi NOTE, MIDIFILE, SOUND, CHORD, VOICE, CHORD-SEQ viene visualizzata la relativa factory metodo utilizzato in OM per rendere attive le istanze della classe. NOTE
-
midic *100). vel dur chan
esprime l’unità di misura delle altezze in OM cioè midicents (MIDI valore della velocity tra 0 e 127. valore della durata in millisecondi numero del canale midi (0-16)
Di seguito le tre modalità con cui può essere rappresentata una sola nota in OM all’interno di un patch. A mostra l’icona della classe note appena viene definita all’interno di un patch. Si notano i quattro ingressi superiori relativi ai campi definiti in
precedenza e le quattro uscite inferiori relativi ai medesimi in uscita. B mostra la classe note con le istanze evidenziate (si noti la corrispondenza dei valori di default con quelli definiti nei campi della figura precedente). Qui l’utente, a proprio piacere, definisce i parametri relativi ad un evento. C evidenzia l’editor della classe note, cioè quella parte in cui è possibile editare direttamente in notazione musicale i parametri della nota.
A
B
REST
- dur
durata del silenzio in millisecondi
C
MIDIFILE
- filename
indirizzo del file nel computer
Di seguito la figura mostra le due modalità di rappresentazione di un midifile all’interno di un patch. Un midifile, proveniente da qualsiasi fonte, può essere facilmente trascinato all’interno di un patch in cui verrà rappresentato mediante la prima icona della figura seguente. La rappresentazione interna del midifile è quella disponibile anche nei programmi sequencer audio-midi e denominata piano-roll. In questo tipo di rappresentazione lo spazio delle altezze-durate è definita in un piano cartesiano dove l’asse della y rappresenta le altezze e la x il tempo in millisecondi. Gli eventi del midifile sono così rappresentati mediante segmenti la cui lunghezza definisce la durata e la relativa posizione verticale, l’altezza (tipicamente in corrispondenza di una tastiera di pianoforte).
SOUND
- filename
indirizzo della posizione del file nel computer
I file audio possono essere ascoltati e visualizzati all’interno di una patch. Di essi viene rappresentata la waveform, la forma d’onda, modalità di rappresentazione della variazione dinamica di un suono nel tempo.
CHORD
- lmidic - lvel - loffset - ldur - lchan
valori midicents valori velocity una lista di durate una lista di canali midi
La classe chord può rappresentare un solo accordo. Le altezze relative all’accordo possono essere definite con una lista di valori midicents ( lista definita nel secondo input della figura A) o notate direttamente sul pentagramma (B). L’accordo può essere visualizzato in più modi (si veda il menu aperto con le relative opzioni di scelta chord, arpUp, arpDown, order e offset); arpUp visualizza l’accordo disponendo le altezze relative come in un arpeggio ascendente, arpDown discendente e order visualizzando le note nell’ordine in cui sono state immesse.
A
B
Riassumendo: per ogni accordo può essere specificato -
una lista di altezze in midicents, per esempio (6000 6400 6700) tutte le note dell’accordo possono avere la stessa durata (in tal caso vale il valore di default di 1000 millisecondi) altrimenti è possibile specificare una lista di valori di durata, per esempio (1000 1000 10). Ad ogni altezza della lista di altezze verrà attribuita la relativa durata.
GROUP
- tree lista multipla: rappresenta una particolare modalità di scrittura ritmica MEASURE
- tree lista multipla: rappresenta una particolare modalità di scrittura ritmica VOICE
- tree - chords
lista multipla: rappresenta una particolare modalità di scrittura ritmica lista di accordi
- tempo
tempo metronomico
- legato
valore tra 0 e 100. 0 significa che la durata degli accordi corrisponde alla lista di durate definite in chords. 100 significa che le durate sono condizionate dall’onset dell’accordo che segue.
La classe voice è particolarmente importante per la definizione delle strutture ritmiche mediante quella particolare sintassi già parzialmente definita (cfr.nota 23 Cap.2). Le strutture ritmiche sono immesse nel secondo input della classe Di default la classe rappresenta i valori temporali, metrici e ritmici rappresentati in figura:
POLY
- voices
lista di voice
POLY è utilizzato per l’elaborazione e la generazione di strutture polifoniche.
CHORD-SEQ
- lmidic - lOnset - lDur - lVel - lOffset - lChan - ilegato
lista di valori midicents lista con tempi di attacco di ciascun evento in millisecondi lista di durate lista delle velocity (0-127) lista di canali MIDI v.precedenti
Con chord-seq è possibile definire complesse sequenze temporali di eventi monofonici o polifonici. Come in tutti gli altri oggetti è possibile definire queste strutture diastematiche e temporali per mezzo di liste oppure è possibile notare direttamente sul pentagramma il profilo desiderato. Evidenziando un elemento della sequenza è possibile conoscerne l’esatta collocazione temporale, evidenziata in alto a sinistra nella finestra del pentagramma28.
28
Come per tutti gli altri oggetti in cui è possibile definire delle note, all’evidenziazione di un elemento appaiono, nella parte inferiore della finestra General palette, tutti i parametri relativi a quell’evento, cioè midicents, canale midi, velocity e durata.
MULTISEQ
- chord-seq
lista di sequenze di chord-seq
Tutte le classi fin qui definite possono essere connesse con altri elementi del linguaggio di OM. La particolare modalità di rappresentazoe della maggior parte dei parametri musicali descrivibili come liste, atomi o liste multiple, facilità l’organizzazione delle medesime in complesse strutture algoritmiche. Queste possono essere organizzate all’interno di un apposito spazio del programma chiamato patch. 2.1.5.4 PATCHES e MAQUETTE In un patch si definisce l’interfaccia visiva di un algoritmo. E’il corpo del programma. Nel caso di Open Music la procedura di formalizzazione di un algoritmo risponde alle più varie esigenze musicali, compositive e analitiche. Il Patch si compone graficamente all’interno di una finestra vuota in cui è possibile connettere tra di loro tutti gli oggetti definiti nel Packages. Classi, funzioni, maquette
(v.§ successivo), file audio e MIDI, o anche altri patch possono essere inseriti e connessi tra loro. La connessione tra patch richiede di specificare ingressi e uscite del patch stesso (nella figura successiva in alto a sinistra della finestra sono rappresentate due frecce: la prima definisce le uscite la seconda gli ingressi di un patch). Una volta che una classe viene inserita all’interno di un patch essa prende il nome di factory. Una factory attiva più istanze della classe permettendo all’utente la gestione dei parametri relativi a quella classe. Per fare un esempio concreto analizziamo il seguente patch di Mikhail Malt: fine del patch è la composizione aleatoria di una linea melodica le cui altezze sono determinate in modo random con note selezionate a partire da quattro campi armonici liberamente definiti dal compositore.
Dal punto di vista analitico il patch è l’approssimazione formale (algoritmo) del modello intuitivo (ottenere una serie di altezze) per mezzo del quale il compositore
ha operato le sue scelte (in questo caso non ancora definite poiché l’algoritmo “propone” non “prescrive” soluzioni). Il patch (interpretabile dall’alto verso il basso) mostra quattro oggetti chord in cui il compositore definisce i propri campi armonici. La valutazione del secondo outlet dei singoli oggetti chord definisce una lista i cui valori corrispondo alle altezze notate. Così la valutazione del primo oggetto chord fornisce la lista ? OM->(7200 6700 6400 6000)
cioè do mi sol do, quanto notato dal compositore all’interno dell’oggetto chord. Nel momento in cui colleghiamo l’outlet della lista/e all’oggetto/i chiamato/i nthnumber ed essendo
list [generic-function] NTH-RANDOM
returns a randomly chosen element from 29 otteniamo, ogni volta che richiamiamo la valutazione, una scelta random di uno dei valori della lista; di seguito, come esempio, cinque valutazioni della funzione nthnumber sulla lista definita precedentemente ? ? ? ? ? ? ?
OM->(7200 6700 6400 6000) OM->6400 OM->7200 OM->6700 OM->6700 OM->7200
L’oggetto repeat-n
self num [generic-function] REPEAT-N
repeats n times the evaluation of and collects the n results into a list.
accetta due elementi in ingresso: il primo inlet legge quanto valutato da nth-number mentre il secondo campiona quattro valori random in modo da ottenere: ? OM->(6700 6000 6400 6700) ?
L’algoritmo fin qui definito è ripetuto per ogni oggetto chord, cioè per ogni riserva armonica. Di seguito un oggetto Lisp chiamato append30 si incarica di concatenare le liste ottenute 29
E’possibile in qualsiasi istante richiamare la documentazione di un oggetto all’interno del patch. 30 V.par. 2.1.2.3
APPEND &rest
lists
[Function] concatenates the top-level elements of lists, in effect splicing them together. The lists are not modified. Returns the resulting concatenated list.
Di seguito uno dei possibili risultati della valutazione il cui risultato è di 4*4 elementi della lista ? OM->(7200 6400 7200 6400 7200 6900 6900 6500 6700 5900 6700 6700 6000 6000 6000 7200) ?
Il risultato è di nuovo immesso in repeat-n (in modo da ottenere “due frasi”) la cui valutazione restitutisce la seguente lista di liste ? OM->((6000 6000 6000 6700 6000 6500 6900 6500 7400 5900 6500 6700 7200 6000 7200 7200) (7200 6400 6400 6400 6500 6000 6000 6900 5900 5900 5900 7400 7200 6000 7200 6000)) ?
La funzione flat si incarica di trasformare una lista di liste in una lista piatta, semplice (priva di incassamenti) ed essere così leggibile in ingresso dall’oggetto chord-seq. Ogni valutazione dell’oggetto chord-seq richiama tutte le altre e restituisce per ogni valutazione differenti (infiniti) profili melodici.
Un complesso patch del compositore Tristan Murail utilizzato per la composizione Désintégrations. Si nota in particolare l’utilizzo di un patch nel patch (l’icona denominata “mypatch”) che incapsula il seguente algoritmo
MAQUETTE La maquette è uno dei tratti distintivi di OM. Nel campo della composizione assistita differenzia in modo sostanziale OM dal suo predecessore Patchwork. Una maquette permette di organizzare nel tempo (di comporre) le strutture musicali definite nelle patch. Permette quindi un più alto livello di organizzazione del materiale musicale (meso-macro formale). Le classi di oggetti che possono essere riconosciute da una maquette sono le seguenti: -
file aiff (audio) MidiFile Patch Altre maquette Factory Variabili e classi (definite nel packages score)
Nel seguente esempio alcuni di questi oggetti sono stati immessi nella maquette, in particolare, 3 file audio, 1 file midi, 2 chord factories presi da un patch, 2 patches prelevati dal Workspace e interconnessi tra loro.
La valutazione dell’oggetto maquette computa tutti gli oggetti rappresentati all’interno della maquette.
Seconda Parte
CAPITOLO 3 COMPOSIZIONE DI PATCHES IN OPENMUSIC I: introduzione e assistenza deterministica
3.1 Introduzione In questo capitolo si introduce l’ambiente di programmazione OM con la composizione di patches dalla difficoltà progressiva. Le fonti utilizzate per la definizione dei problemi sono le seguenti: il tutorial del software, ed alcune patches di Mikail Malt e Jacopo Baboni Schilingi. Si propone una libera traduzione del tutorial del software con opportune integrazioni. Del tutorial si evidenzia la struttura e la progettazione dell’algoritmo e si integrano gli esempi con la valutazione delle patches, i relativi commenti e eventuali digressioni teoriche su particolari argomenti per cui si ritiene necessaria una particolare spiegazione. Alcuni di questi esempi hanno fatto parte del primo tutorial di OM scritto da Jacopo Baboni Schilingi. Successivamente altri esempi sono stati progettati da Karim Haddad e Mikhail Malt. Il tutorial di OM è organizzato in modo tale da fornire all’utente una progressiva competenza nella costruzione delle patches dalla più semplice alla più complessa. Le patches introducono, a partire dal primo tutorial sulla trasposizione, all’elaborazione e alla generazione del materiale musicale. Si è deciso fare riferimento esclusivo all’utilizzo di materiale musicale riconducibile al sistema di notazione tradizionale per i quali si rimanda alla descrizione degli oggetti della classe musicale di OM (Cap.2 § 2.1.5.4). Nota sull’analisi degli algoritmi: Tutte le altezze delle note in OM sono espresse in midicents unità di misura derivata dall’unione dei termini MIDI e cent1. Le altezze, nel protocollo MIDI, sono caratterizzate da 128 valori che variano da 0 a 127. Per esempio, in valore MIDI, DO3, equivale a 60. Moltiplicato per 100, che rappresenta il cents (100 cents =1 semitono), equivale a 6000 midicents. Il midicents rende interpretabile i valori di note MIDI per intervalli inferiori al semitono. Così un valore di 6502 indica l’altezza MIDI numero 65, più 2 cents; 6050 indica un quarto di tono più grande di un DO3. Per un’immediata corrispondenza di tutti i valori midicents con le relative altezze si rimanda all’Appendice I dove sono rappresentate delle tabelle di conversione di semplice consultazione.
1
Un cent“…è pari a 1/100 di semitono equabilmente temperato, o a 1/1200 di un intervallo di 8ª giusta” in
(Azzaroni 1997)
Le patches si interpretano e si analizzano dall’alto verso il basso e viceversa seguendo il percorso definito nei collegamenti tra gli oggetti dell’algoritmo. Per ottenere il risultato desiderato è necessario valutare (cioè avviare il calcolo dell’algoritmo) l’ultimo oggetto della patch. Nel caso del primo esempio che segue è l’oggetto (D). Avviata la valutazione dell’oggetto e seguendo un processo a ritroso, l’algoritmo richiama gli elementi presenti all’interno dell’algoritmo, (A) e (B), poi (C) fino a mostrare il risultato richiesto (D). Si tenga presente che il significato, la semantica di ogni singolo oggetto è contestuale, tale per cui spesso viene definito in base a quella che è la sua funzione specifica nel contesto di un algoritmo particolare. Per esempio: l’oggetto dx->x, del tutorial “costruzione di una successione combinata di altezze”, opera su due liste di numeri; solo in virtù del fatto che è collegato ad un oggetto chord-seq, permette di dire che l’oggetto dx->x serve a costruire una scala. Per una definizione precisa delle singole funzioni si rimanda al reference di OM.
------------------------------------------------------------------------------3.1.1 Trasposizione di un accordo2 (Jacopo Baboni Schilingi) ------------------------------------------------------------------------------Trasposizione di un accordo usando un operatore aritmetico. Funzioni utilizzate Introduzione a CHORD e om+.
Descrizione Le note da trasporre sono immesse nell’editor chord (A). Trasporre le note dell’accordo equivale a sommare valori in midicents ad una data nota o serie di note che compongono l’accordo. A questo fine si utilizza l’operatore aritmetico om+ che è una funzione generica di addizione. Con la valutazione di (D) il patch traspone le note dell’accordo del chord box (A) aggiungendo (C) il valore immesso nell’input (B) ad ogni nota.
2
Corrisponde al tutorial 1
Struttura del patch A: nell’oggetto chord (A) l’utente scrive l’accordo da trasporre. Se si valuta solo questo oggetto è possibile visualizzare nella finestra del Listener la struttura dell’accordo definito. L’accordo do mi sol si è rappresentato dalla lista semplice di valori midicents (6000 7100 6400 6700) Dove do = 6000, si = 7100, mi = 6700, sol = 6400. L’ordine dei valori nella lista corrisponde all’ordine in cui le singole note dell’accordo sono state digitate dall’utente. Si ricorda a questo proposito che l’oggetto chord può visualizzare i propri elementi come accordi o come successioni di intervalli. In quanto successione intervallare chord memorizza l’ordine di immissione della altezze digitate dall’utente il quale potrà decidere come ascoltare quanto definito in chord. B: si immette il valore con cui trasporre (A). La valutazione di (B) restituisce l’atomo 200. Si nota che per trasporre di un semitono si immette il valore in midicents 100. Un quarto di tono corrisponde a 50 mentre un ottavo di tono 25. A numeri positivi corrispondono trasposizioni ascendenti, numeri negativi discendenti. Come si mostra nella figura successiva, è possibile visualizzare nel chord box (D) la notazione di una eventuale trasposizione per quarti o ottavi di tono. C: l’operatore aritmetico om+ somma gli elementi in ingresso, cioè (A) e (B). In questo caso aggiunge ad ogni elemento della lista di (A) il valore 200 in modo da ottenere le seguente nuova lista (6200 7300 6600 6900) D: per visualizzare il risultato d (C) in notazione musicale è necessario richiamare un altro oggetto chord e connettere quindi l’uscita (output) di (C) con il secondo ingresso (input) di (D).
In teoria della musica la trasposizione rappresenta uno dei principali strumenti di “elaborazione lineare del motivo…strumento tipico del contrappunto poliritmico a partire dagli albori della polifonia fino ad arrivare alle esperienze compositive di questo secolo” (Azzaroni 1997). Il legame con la genesi del pensiero polifonico ci porta a pensare alla trasposizione come minimo movimento necessario per articolare un materiale. Il percorso di astrazione dedotto per “muovere” un campo di altezze è definito dall’operazione di somma; in questo senso è stato anche teorizzato da Luigi Verdi (Verdi 1998): “La trasposizione (T) è una operazione che consiste nell’addizionare una costante n (cioè un numero di semitoni costante) ad una altezza data. Per ogni altezza x e ogni intervallo n sarà applicabile la formula Tn (x) = x + n”. Anche in (Baboni Schilingi 1999): ”La trasposizione di un accordo è riproducibile attraverso la somma di un valore costante con il valore dell’altezza di ogni nota dell’accordo”.
-----------------------------------------------------------------------3.1.2 Inversione di un intervallo3 (Jacopo Baboni Schilingi) -----------------------------------------------------------------------Inversione di un intervallo mediante l’uso di operatori aritmetici. Funzioni utilizzate NOTE, om+, om- e x-append.
Descrizione Questo patch, con la valutazione di (F) fornisce l’inversione di un intervallo definito nei box NOTE A e B.
3
Tutorial 2
Struttura del patch
A B Si definiscono gli estremi dell’intervallo da invertire nei box NOTE A e B. Do = 6000 e si = 7100. C: L’operatore aritmetico om- calcola la differenza in midicents tra la nota (A) e (B) cioè –1100. D: L’operatore aritmetico om+ somma il valore definito in (A) con il risultato di (C). 6000 – 1100 = 4900 E: x-append assembla in un’unica lista il valore di (A) con il risultato di (D). (6000 4900) F: La valutazione del CHORD box (F), con (E) come input, restituisce l’inverso dell’intervallo.
-----------------------------------------------------------------------3.1.3 Costruzione di una successione combinata di altezze4 (Jacopo Baboni Schilingi) -----------------------------------------------------------------------Costruzione di una succesione combinata di altezze mediante l’utilizzo della funzione dx->x. Funzioni utilizzate NOTE, CHORD-SEQ e dx->x.
Descrizione Questo patch crea una “scala” la cui nota iniziale è definita nel NOTE box A e basata sulla serie di intervalli definiti nella lista (B).
4
Tutorial 3 “Costruzione di una scala”
Struttura del patch A: NOTE box in cui definire la nota di partenza. La valutazione restituisce il relativo valore in midicents OM->6000
B: Lista di intervalli. se 100 = semitono 200 = tono la lista (200 200 100 200 200 200 100) = T T S T T T S C: dx->x accetta in ingresso due elementi, un atomo e una lista. In questo caso genera la scala la cui nota di partenza è definita in (A) secondo gli intervalli di (B). La valutazione restituisce quindi OM->(6000 6200 6400 6500 6700 6900 7100 7200)
Cioè (A) più la somma del suo valore in midicent con il primo elemento della lista (B). 6000 6000 + 200 6200 + 200 6400 + 100 6500 + 200 6700 + 200 6900 + 200 7100 + 100 7200
6000 6200 6400 6500 6700 6900 7100 7200
Con il patch è possibile definire una qualsiasi successione combinata (Verdi 1998) di altezze. Sempre secondo il modello teorico di Verdi è possibile: definire la densità (n°di altezze della combinazione), la cardinalità (n°delle classi di altezze)5, l’estensione (distanza intervallare fra i suoni estremi) e l’estensione minima (distanza intervallare minima entro cui una combinazione può essere ridotta). 5
Dalla definizione di Milton Babbit (1955): “Tutte le altezze che differiscono per un numero intero di ottave
appartengono ad una medesima classe di altezze (pitch class)…con tale termine si indica quindi “l’insieme di quelle altezze che differiscono l’un'altra solamente per l’ottava cui appartengono”. Tale nozione esclude ogni informazione inerente registro, durata, timbro…una classe di altezze è semplicemente l’insieme di tutte le altezze equivalenti a distanza di ottava” (Verdi 1998)
-----------------------------------------------------------------------3.1.4 Quattro operazioni su una serie di dodici suoni6 (Mikhail Malt) -----------------------------------------------------------------------Si definiscono in un patch le operazioni di trasposizione, retrogradazione, inversione e retrogradazione dell’inversione di una serie di 12 suoni. Funzioni utilizzate CHORD, dx->x, first, om*, om+, reverse, x->dx. Descrizione La patch esegue quattro operazioni su una stessa sequenza di note definite in (A).
6
Tutorial 6 dette anche forme a specchio.
Struttura del patch A: si definisce la serie di note. (es: Serie A1 da STRUCTURES di Pierre Boulez)
TRASPOSIZIONE B: La om+ box traspone la sequenza (come tutorial 1). C: mostra, dopo la valutazione, il risultato della trasposizione.
RETROGRADAZIONE E: Il box reverse restituisce la lettura retrograda di una lista (in questo caso quindi della lista di valori midicents derivati dalla sequenza originale):
INVERSIONE F: x->dx calcola la differenza tra gli intervalli7 della sequenza originale di note. Valori in midicents della sequenza originale: OM->(7500 7400 6900 6800 6700 6600 6400 7300 7200 7000 6500 5900) Differenza: OM->(-100 -500 -100 -100 -100 -200 900 -100 -200 -500 -600)
Cioè 7400 – 7500 = 6900 – 7400 = …
-100 -500
G: om* moltiplica ogni valore in uscita da x-dx per –1. Si ottengono così tutti valori positivi. OM->(100 500 100 100 100 200 -900 100 200 500 600)
H: Il modulo first prende la prima nota della serie originale restituendo un atomo e non una lista di un elemento. I: dx->x crea una nuova lista la cui nota di partenza è data da first (H) secondo la sequenza intervallare derivata da om* (G). 7
Si ribadisce il valore contestuale di quanto valutato da queste funzioni. In questo caso si deve interpretare tale risultato come una lista di intervalli tali che 100 = semitono 200 = tono, a valori negativi corrispondono intervalli discendenti.
Cioè: 7500 7500 + 100 7600 + 500 8100 + 100 8200 + 100 8300 + 100 8400 + 200 8600 + 900 7700 + 100 7800 + 200 8000 + 500 8500 + 600
7500 7600 8100 8200 8300 8400 8600 7700 7800 8000 8500 9100
L: mostra il risultato della valutazione dell’inversione in CHORD-SEQ:
RETROGRADAZIONE dell’INVERSIONE M: reverse restituisce il retrogrado della sequenza in uscita da dx->x (I). N: risultato della valutazione del retrogrado dell’inversione in CHORD-SEQ:
-----------------------------------------------------------------------3.1.5 Espansione e compressione di una sequenza di note8 (Jacopo Baboni Schilingi) -----------------------------------------------------------------------Si riducono o espandono le ampiezze degli intervalli di una sequenza data mediante l’uso di operatori aritmetici e seriali. Funzioni utilizzate CHORD, CHORD-SEQ, dx->x, om*, first, om-round, x->dx.
8
Tutorial 8
Descrizione Il box x->dx (B) calcola la differenza (dei valori midicents) degli intervalli della sequenza di note immesse in (A). om* (D) cambia, moltiplicando, questi intervalli proporzionalmente al valore immesso in (C). Il risultato della moltiplicazione è una nuova lista di intervalli che, una volta immessa in dx->x (F) può essere utilizzata per la generazione di una nuova serie di note. Struttura della patch
A: si definisce la sequenza di note:
B: x->dx calcola la differenza di intervalli tra ogni coppia di note definita in (A). OM->(800 –1100 600 –1600 100 400)
C: Fattore di moltiplicazione per l’espansione o la compressione intervallare. Immettendo un valore compreso tra 0 e 1 comprimerà la serie. Un valore maggiore di uno la espanderà. D: moltiplica gli intervalli in calcolati da x->dx (B) per il valore immesso in (C). Per un valore di 0.5 immesso in (C) si ottiene la seguente lista OM->(400.0 –550.0
300.0 –800.0 50.0 200.0)
E: il box first (E) seleziona la prima nota di (A), nota di partenza per la nuova serie (H). F: dx->x genera la nuova sequenza, la cui nota iniziale è quella definita in (E) e costruita secondo gli intervalli derivati da x->dx. OM->(6000
6400.0
5850.0
6150.0
5350.0
5400.0
5600.0)
G: om-round arrotonda i valori in uscita da dx->x. OM->(6000
6400
5850
6150
5350
5400
5600)
H: mostra il risultato della valutazione
Si nota che l’algoritmo è equivalente all’operazione di inversione di una sequenza. Solo per valori = 1 l’algoritmo restituisce l’inversione giusta; intendendo con questo termine l’inversione ottenibile dalle classiche forme a specchio.
-----------------------------------------------------------------------3.1.6 Costruzione di uno spettro armonico9 (Mikhail Malt) -----------------------------------------------------------------------Costruzione di uno spettro armonico e uso dell’incapsulamento. Funzioni utilizzate NOTE, mc->f, f->mc, arithm-ser.
Descrizione Questo patch genera uno spettro armonico a partire da una nota fondamentale. Si mostra l’utilizzo dell’incapsulamento di un patch all’interno del patch principale. Struttura della patch A: Viene definita la fondamentale direttamente sul pentagramma attraverso la notazione o mediante la definizione del relativo valore mindicents nel secondo input dell’oggetto NOTE. B: Si mostra la costruzione di un patch all’interno di cui definire l’algoritmo per il calcolo degli armonici dello spettro. L’algoritmo, in questo modo, sarà nascosto all’utente il quale 9
Tutorial 9
non dovrà fare altro che definire i parametri di ingresso al patch stesso. Una volta creata la patch appare la seguente icona nel patch principale.
E’ possibile rinominare il patch per esempio ridefinendolo con il nome harmonic series. Con un doppio click sull’icona è possibile visualizzare l’interno del patch dove definire gli ingressi (in questo caso quattro) e un’uscita con le apposite frecce in alto a sinistra del patch.
C: Per la generazione dello spettro armonico dobbiamo moltiplicare la frequenza della fondamentale per la serie degli armonici superiori. (per esempio data la fondamentale a 60Hz, dobbiamo moltplicare questo valore per 1, 2, 3…).
Per fare questo è necesssario convertire il valore midicents in frequenze mediante l’uso di mc->f (D). E: Per generare una lista di armonici utilizzeremo la funzione arithm-ser cioè una serie aritmetica i cui valori sono definiti da: (primo input) valore da cui far partire la serie (secondo input) valore dell’ultimo armonico voluto – (terzo input) il passo di lettura della serie. Con quest’ultimo è possibile definire, per esempio immettendo il valore 2, solo gli armonici dispari (1 3 5 7…)
F: dopo aver moltiplicato la fondamentale con l’uscita di arithm-ser mediante om*, si riconvertono le frequenze in midicents con la funzione f->mc (F) cioè la funzione inversa a quella precedentemente definita. G: La valutazione genera lo spettro armonico richiesto. Di seguito sono riportate le valutazioni dei singoli oggetti di B Conversione del valore della fondamentale frequenza Hz:
da
midicents
a
D ? OM->65.40639132514966
Serie aritmetica
per valori di default
fino a 16:
E ? OM->(1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16)
Moltiplicazione (E):
della
fondamentale
per ogni valore compreso in
x ? OM->(65.40639132514966 130.8127826502993 196.21917397544897 261.6255653005986 327.0319566257483 392.43834795089793 457.84473927604756 523.2511306011972 588.6575219263469 654.0639132514966 719.4703045766462 784.8766959017959 850.2830872269456 915.6894785520951 981.0958698772448 1046.5022612023945)
Conversione dei valori da frequenza
a midicents:
F OM->(3600 4800 5502 6000 6386 6702 6968 7200 7404 7586 7752 7902 8040 8168 8288 8400)
Valutazione della patch armonici superiori:
harmonic
series per una serie di 40
OM->(3600 4800 5502 6000 6386 6702 6968 7200 7404 7586 7752 7902 8040 8168 8288 8400 8504 8604 8698 8786 8870 8952 9028 9102 9172 9240 9306 9368 9430 9488 9546 9600 9654 9704 9756 9804 9852 9898 9942 9986)
-------------------------------------------------------------3.1.7 Costruzione di uno spettro con N parziali 10 -------------------------------------------------------------Data una fondamentale si vuole generare uno spettro per il quale sia possibile definire le armoniche o le parziali inarmoniche.
L’algoritmo appare simile a quello definito precedentemente. Tuttavia è qui possibile un maggiore controllo sulla generazione dello spettro dal momento in cui è possibile definire in una lista quali parziali vedere visualizzate.
10
Il seguente patch non è presente nei tutorial di OM. Il patch OM è di Mikhail Malt. Il manuale di PatchWork riporta un algoritmo identico attribuito al compositore Tristan Murail.
Si noti la differenza tra la patch incapsulata precedente e quella qui definita nella seguente figura:
In questo algoritmo è definito un unico secondo ingresso dove definire la sequenza di parziali armoniche o inarmoniche desiderate. La sequenza di parziali definite nella lista (1 3 5 7 9 11 15 17 19 20 24 30) corrisponde alla seguente successione di intervalli con fondamentale do:
--------------------------------------------------------------------------------------------------3.1.8 Espansione e compressione di una sequenza di intervalli II (Mikail Malt) --------------------------------------------------------------------------------------------------Il seguente patch può essere considerato come la versione ergonomica del patch precedente dove la struttura centrale dell’algoritmo non era incapsulata. La complessità di alcuni patches può essere tale da dover fare un utilizzo intensivo dell’incapsulamento per n livelli di profondita (cioè un patch in un patch che a sua volta è in un patch ecc. cfr. Cap.5 par 5.2.3). All’aumentare dei parametri da controllare è più intuitivo il patch seguente che quello precedentemente definito. Si noti l’incapsulamento dell’algoritmo e i commenti relativi a ciascun elemento del patch stesso.
L’algoritmo si differenzia dal precedente per la presenza dell’oggetto approx-m il quale accetta in ingresso due input. Facendo a ritroso il percorso che porta al primo input di approx-m ci si accorge che esso è lo stesso algoritmo definito nel patch precedente (tutorial 8). Il secondo input di approx-m permette la definizione del grado di approssimazione per semitoni, quarti di tono o ottavi di tono. Questa patch può essere considerata come un modello generico di implementazione dell’operazione di inversione.
-------------------------------------------------------------------------------3.1.9 Sei operazioni su una serie di dodici suoni (Mikhail Malt) -------------------------------------------------------------------------------Anche il patch seguente mostra l’uso dell’incapsulamento di algoritmi. Si confronti il patch seguente con l’esempio precedente relativo alle forme a specchio. Nel seguente patch, inversion_1 incapsula l’algoritmo definito per il calcolo di (L) del tutorial 2; così come per il retrogrado dell’inversione in cui è lasciato visibile solo il modulo reverse.
Nel patch è aggiunta una nuova operazione sulla serie chiamata inversion_2(axe) che definisce l’operazione di inversione rispetto ad una altezza definita come asse di riferimento.
-----------------------------------------------------------------------3.1.10 Costruzione random di una sequenza I Introduzione a om-random11 (Karim Haddad) -----------------------------------------------------------------------Introduzione alle funzioni random e stato delle patches Funzioni utilizzate om-random, repeat-n , CHORD-SEQ, x-append, stato del patch: eval-once mode
11
Tutorial 11
Descrizione In questo tutorial si dimostra l’utilizzo dell’oggetto om-random per la generazione random di note ribattute. La funzione verrà utilizzata in due modi differenti. La prima per generare le altezze, la seconda per la ripetizione delle stesse. om-random verrà utilizzato secondo le due modalità di utilizzo della funzione, nel modo definito normal e in quello eval-once mode. Struttura del patch A: om-random è utilizzato per la generazione di valori note midicents. La funzione accetta come argomenti due numeri (interi o in virgola mobile). Il primo argomento in ingresso definisce il numero più piccolo desiderato. Il secondo argomento, il più alto. Si determina cioè un range di valori entro cui determinare le possibilità di scelta. Nell’esempio i valori numerici in ingresso alla funzione corrispondono a MIDI note la cui valutazione viene moltiplicata per 100. L’uscita della funzione om* è connessa all’ingresso di repeat-n in modo da ripetere n-volte le note random generate. STATO DI UN OGGETTO:
B: Si confronti il risultato della valutazione di B e C. La valutazione di B fornisce una lista del tipo OM->(5300 5700 6500 6500 5400)
La valutazione di C invece del tipo
OM->(4300 4300 4300 4300 4300)
Per ogni valutazione delle patches, B fornisce una lista di cinque valori differenti mentre C una lista di cinque valori identici. La differenza è dovuta allo stato della funzione om-random; stato rappresentato visivamente dalla presenza del numero 1 sull’icona della funzione e attivabile dall’utente. In B, per ogni valutazione di repeat-n vengono associati 5 valori differenti in uscita da omrandom. Lo stato della funzione om-random in C (definito come eval-once mode) per ogni valutazione di repeat-n, fornisce la restituzione di un solo valore di omrandom iterato per 5 volte. D: il patch C è ripetuto per tre volte a per ogni ripetizione è aggiunta una nuova funzione om-random in ingresso a tutti e tre i moduli repeat-n. E: le uscite dei tre moduli repeat-n sono connesse agli ingressi di x-append (E) il quale unisce il risultato delle valutazioni in un’unica lista semplice. F: L’oggetto CHORD-SEQ ci permette di vedere rappresentato il risultato in notazione musicale della valutazione di E.
-----------------------------------------------------------------------3.1.11 Costruzione random di una sequenza II Introduzione alle durate e alle dinamiche12 (Karim Haddad) -----------------------------------------------------------------------Funzioni utilizzate CHORD-SEQ, om-random, repeat-n, e dx->x.
Descrizione In questo esempio si estendono le procedure random definite precedentemente alla generazione di valori dinamici e di durata. Struttura del patch A: Si utilizza lo stesso patch precedentemente definito ma con om-random nello stato normal mode. Non si vogliono ottenere cioè note ribattute.
12
Tutorial 12
B: Lo stesso patch viene utilizzato per definire le durate con valori in ingresso ad omrandom consoni alla rappresentazione in millisecondi delle durate. 10 e 50 genereranno così valori compresi tra 100ms e 500ms. (cfr Cap.2 par.2.1.5.4 struttura oggetto chord). Per definire le durate è necessario determinare due parametri: 1 La durata di un evento (nota o pausa) in millisecondi relativamente alla propria posizione nel tempo. 2 La durata di un evento in millisecondi relativamente all’istante temporale 0 in cui tutta la sequenza a cui tale evento appartiene ha inizio. Ci si riferisce a 2 come al valore onset di un evento nel tempo t. C: per far coincidere i valori onset con le durate è necessario settare il modulo repeat-n nello stato eval-once mode. Un modulo è valutato tante volte quante sono le connessioni attive. In questo caso si nota che l’uscita di repeat-n è connessa all’ingresso dei due oggetti dx->x e CHORD-SEQ. Se non fosse attivo lo stato eval-once mode repeat-n fornirebbe valori differenti in ingresso agli oggetti per i quali invece è necessario fornire lo stesso valore. D: la funzione dx->x fornisce una lista degli onset. E: Si utilizza la stessa patch di A per rappresentare valori di velocity13 compresi tra 10 e 120. F: valore in ingresso al secondo input dei tre moduli repeat-n.
13
La velocity è un parametro MIDI per la rappresentazione della dinamica; come le altezze utilizza valori da 0 (indicativamente un pianissimo ppp) a 127 (fortissimo fff). In OM è possibile settare questi valori per differenti range dinamici. Se non si alterano questi valori automaticamente OM assegna i seguenti range alle indicazioni di dinamica tradizionali: ppp da 0 a 20 pp da 21 a 40 p da 41 a 55 mp da 56 a 60 mf f ff fff
da 61 a 85 da 86 a 100 da 101 a 115 da 116 a 127
La seguente è una sequenza generata con l’uso di questa patch.
Le due pagine seguenti introducono l’uso dell’oggetto voice per la rappresentazione di strutture ritmiche. Si è visto come per il patch precedente sia stato possibile definire valori random di durata i quali però non possono essere visualizzati secondo il sistema di notazione ritmica tradizionale nell’oggetto chord-seq. Se è necessario visualizzare tale notazione si ricorre all’oggetto voice, il quale accetta in ingresso nel primo input l’oggetto chord-seq. Tutti i dati relativi al chord-seq vengono quindi processati da voice, compreso il processo noto come quantificazione (o quantizzazione) mediante cui si ricostruisce secondo il sistema di notazione tradizionale, la struttura ritmica di quanto contenuto in chord-seq. I valori in millisecondi relativi alle durate vengono adattati ad una griglia ritmico-metrico-temporale la cui struttura è a sua volta modificabile dall’utente. I valori della griglia sono definiti dai seguenti parametri:
-valore metronomico -metrica -suddivisione massima della pulsazione (8 equivale ad un trentaduesimo) -forbidden indica una lista di suddivisioni da evitare per esempio (3 7) proibisce la rappresentazione di terzine e settimine. Seguono quattro valutazioni della patch precedente con aggiunta dell’oggetto voice; nell’ordine, per ogni valutazione: oggetto chord-seq-oggetto voice e evidenziazione dell’oggetto voice.
Il processo di quantificazione ritmica tra chord seq e voice può essere mediato da un oggetto chiamato omquantify il quale permette la visualizzazione e l’editing dei parametri direttamente nel patch. Il patch seguente (tutorial 31) mostra la quantizzazione di una sequenza random definita in chord-seq (A) del tutorial 12.
A: il quarto output di chord-seq definisce la lista multipla di durate in millisecondi per ogni evento definito nella sequenza, in questo caso: ? OM->((420) (390) (200) (390) (310) (200) (240) (410) (180) (220) (380) (220) (200) (340) (350) (130) (350) (500) (380) (430) (210) (160) (340) (390) (170) (480) (140) (300) (460) (310))
B: l’oggetto flat trasforma una lista multipla in lista semplice, cioè: ? OM->(420 390 200 390 310 200 240 410 180 220 380 220 200 340 350 130 350 500 380 430 210 160 340 390 170 480 140 300 460 310)
C: omquantify accetta in ingresso: primo input – una lista di durate secondo input – un tempo metronomico
terzo input – metro In uscita omquantify genera una lista di liste che è la modalità di rappresentazione simbolica delle strutture ritmiche in OM. (cfr.paragrafo success.) ? OM->(? ((4//4 ((1 (2 2 1)) (1 (2 2 1 1)) (1 (1.0 2 1 1)) (1 (2 1 1 1)))) (4//4 ((1 (1.0 3 1 2 1)) (1 (2.0 2 1)) (1 (2.0 2 1 3)) (1 (2 1 3)))) (3//4 ((1 (1 2 4 1)) (1 (1.0 -4)) -1))))
D: L’oggetto voice interpreta tale lista simbolica in notazione tradizionale tale per cui il risultato, secondo quanto definito in (C) sarà:
E: omquantify nasconde altri input opzionali mediante cui semplificare il ritmo e rimuovere i valori irrazionali
E’possibile a questo punto sperimentare con i vari parametri relativi al metro e al tempo metronomico e con gli input opzionali relativi alla esclusione di suddivisioni ritmiche particolari (in questo caso la quintina, la sestina e la settimina cioè 5 6 7) con un controllo di precisione variabile tra 1.0 e 0. Al cambiamento di metro richiesto si noti che il listener avvisa dell’eventuale troncamento delle note di più breve durata: ? Warning: with the given constraints, 1 notes are lost while quantizing Risulta infine il ritmo:
3.2 Tempo, metro e ritmo: introduzione alla definizione di strutture ritmiche Genesi della forma è il processo: “campo assai vasto dell’intera azione compositiva, dal limite della concezione astratta dell’idea musicale a quello della sua realizzazione in sostanza sonora – rappresentata o meno con segni di qualsiasi tipo (grafici, fisici, o quant’altro) – attraverso quella rete complessa di nessi che legano il “passaggio” dall’elaborazione concettuale dell’idea alla sua realizzazione. Centrale in questo passaggio è la nozione di tempo come agente “formante”…” (Azzaroni 1997) Il tempo, in musica, si manifesta in modo percepibile attraverso la forma musicale, “una forma come architettura prodotta dalle articolazioni temporali del suono: le diverse configurazioni sonore “si assoggettano a manipolazioni, trasformazioni reversibili, processi per i quali diviene incidente l’intervento del pensiero relazionante, ovvero dell’intelligenza creatrice di nessi fra ciò che si svolge nel tempo e nello spazio “astratto del sonoro, e il pensiero relazionante si fa “portatore di trame simboliche, razionali o emotive proprio con i processi trasformativi che produce, in tal modo facendosi sostanza della narratio musicale” (Azzaroni 1997). La complessità delle strategie utilizzate per dare forma alla musica implica differenti concezioni dei tempi musicali. In OM è possibile definire complesse strutture temporali per mezzo di differenti strumenti: 1- è possibile scrivere musica secondo un sistema di notazione musicale tradizionale tipo Finale (v.tutorial 45) 2- è possibile una quantificazione precisa di oggetti audio/midi. Cioè è possibile convertire una lista di eventi midi in millisecondi in alberi ritmici (cfr.tutorial precedente); è possibile dedurre la struttura ritmica di un suono dall’analisi dello spettro. (cfr. librerie per OM di Hans Tutschku) 3- È possibile una descrizione di alto livello delle strutture ritmiche. Di seguito si introduce alla descrizione di alto livello delle strutture ritmiche. 3.2.1 Alberi ritmici La seguente introduzione (cfr. nota 23 Cap.2) ha lo scopo di mostrare una delle possibili applicazioni musicali per mezzo della notazione di liste numeriche. In questo senso l’uso di liste si dimostra particolarmente efficace per fornire una descrizione di alto livello del parametro ritmico della notazione musicale. Nell’ambiente di programmazione OM una lista numerica può essere convertita in una qualsiasi struttura metrico-ritmica. Viceversa è possibile pensare complesse strutture
metrico-ritmiche mediante la strutturazione di liste multiple. Complesse strutture metricoritmiche descritte mediante liste multiple vengono chiamate alberi ritmici, rhythmic trees. Gli alberi ritmici costituiscono quindi un particolare metodo di notazione simbolica delle strutture ritmiche. DEFINIZIONE Un albero ritmico è definito dalla forma (D S) dove: D è un numero intero o frazionario che esprime una durata (time extent). S è una lista di eventi definiti da proporzioni il cui limite di durata è definito in D. (Altrimenti è possibile pensare più semplicemente a S come un gruppo di proporzioni di D). Ogni evento S può essere: un numero o una lista della stessa struttura di D. Se (1 (1 1 1 1)) definisce una struttura la cui estensione temporale è, per esempio, l’intero D (1), il quale contiene quattro valori uguali, si otterranno quattro quarti. Se D (1) = semiminima, si otterranno quattro semicrome. (2 ( (1 (1 1 1 1)) (1 (1 1 1 1)) ) è una struttura formata da due interi, contenenti due uguali sottostrutture ognuna della durata di un intero. Essendo le sottostrutture definibili come la precedente, questa può essere intepretata come contenente 2 misure in 4/4. S può anche rappresentare una sequenza di proporzioni di D. Per esempio la struttura definita da (4//4 (1 2 1)) rappresenta una misura in 4/4 formata da una semiminima più una minima, più una semiminima. (Mazzola 2002) D può essere sostituito da un punto interrogativo ‘?’ nel qual caso definisce una variabile globale. L’esempio precedente può essere così riscritto come (? ((1 (1 1 1 1)) (1 (1 1 1 1)) )
Esempi: ESEMPIO 1 (1 (1 1 1 1 1)) considerato come gruppo singolo. La scelta del quarto è arbitraria.
ESEMPIO 2 (? ((4//4 (1 (1 (1 -2 1 1)) 1.0 1)) (4//4 (1.0 (1 (1 1 1)) -1 1))))
I numeri con valore negativo sono interpretati come pause, i numeri con valore in virgola mobile come legature di durata. Si interpreti la lista multipla b come derivazione di a: a
(? ((4//4 (1 1
1
1)) (4//4 (1
1
1 1))))
b
(? ((4//4 (1 (1 (1 -2 1 1)) 1.0 1)) (4//4 (1.0 (1 (1 1 1)) -1 1)))) dove 4//4 definisce il metro. il primo livello di parentesi definisce l’inizio della suddivisione del metro. 1 quindi rappresenta la prima unità di suddivisione (1 (1 indica che il secondo quarto viene suddiviso. Questi valori sono (1 –2 1 1)) cioè quattro valori, teoricamente quattro sedicesimi se non fosse per il secondo valore –2 che sta ad indicare una pausa di un ottavo. Tre semicrome, più pausa di un ottavo, in una pulsazione di quarto, definiscono una quintina.
ESEMPIO 3 Nell’esempio successivo si inserisce una terzina in una quintina di semicrome. (? (((4 4) (1 (1 (1 (2 (1 1 1)) 1 1)) 1 1))))
La rappresentazione simbolica delle strutture ritmiche mediante liste permette numerose di elaborazione e trasformazione algoritmica, come la strutturazione dei rapporti di aumentazione e diminuzione, l’inversione o il controllo e la generazione aleatoria. L’esempio seguente tratto da una patch di Mikhail Malt, rappresenta un algoritmo in cui sono definite procedure random per la generazione di strutture metriche e ritmiche.
Alla sequenza così generata corrisponde il seguente albero ritmico: (? (((4 8) (1 -1 -1 -1)) ((4 16) (1 -1 -1 -1)) ((4 16) (-1 1 1 1)) ((4 16) (1 1 1 -1)) ((4 8) (1 1 1 1))))
CAPITOLO 4 COMPOSIZIONE DI PATCHES IN OPENMUSIC II: introduzione a OMLOOP
4.1 OMLOOP OMLOOP è uno degli oggetti che meglio rappresenta le possibilità tipicamente iterativefunzionali e di definizione delle strutture di controllo di OM (cfr.Cap.1 § 1.3.1.1.1). Come rappresentato nella figura seguente, quando inserito all’interno di un patch, esso si presenta come un’icona a forma di spirale. Un doppio click rivela sua struttura interna. Si nota come sia necessario definire diversi input all’interno dell’oggetto affinchè possa connettersi con altri elementi nel patch.
OMLOOP permette la programmazione visiva di complesse iterazioni ed è direttamente ispirata alla macro Common Lisp loop .
La figura precedente rappresenta la struttura generica di OMLOOP. Essa è costituita da: -
Un insieme di ingressi opzionali il cui numero è definibile dall’utente.
-
Un’icona chiamata eachTime che restituisce il risultato di ogni iterazione di loop.
-
Un’icona chiamata finally che determina il valore risultante.
-
Il corpo dell’algoritmo, che definisce la semantica di OMLOOP, cioè il suo fine relativo al contesto in cui è immesso.
Il corpo di OMLOOP si definisce attraverso la connessione di oggetti così come avviene per tutte le altre patch. Nella parte superiore della finestra è possibile individuare i moduli di OMLOOP divisi tra iteratori e i collettori (o accumulatori) tutti richiamabili all’occasione come dimostrato nella figura precedente. I quattro iteratori sono: For, while, Inlist e Onlist. Gli accumulatori: acum, count, sum, min, max, collect. Tutti gli accumulatori possono essere considerati come versioni particolari del modulo acum. Si riportano di seguito le patches realizzate da Mikhail Malt al fine di illustrare le proprietà di OMLOOP. La valutazione di ogni singolo esempio è riportata alla fine di ogni patch.
4.1.1 ITERATORI 4.1.1.1 FOR Esempio 1: Forloop 1
Esempio 2: Forloop II
Esempio 3: Forloop III
Valutazione: ? 4 7 10 13 16 19 22 25 28 31 34 37 40 43 46 49 OM->49 ?
Esempio 4: Forloop – Collect I
? 4 7 10 13 16 19 22 25 28 31 34 37 40 43 46 OM->(4 7 10 13 16 19 22 25 28 31 34 37 40 43 46) ?
Esempio 5: Forloop – Collect II
? OM->(1 4 7 10 13 16 19 22 25 28 31 34 37 40 43 46)
4.1.1.2 WHILE Esempio 1: whileloop I
Esempio 2: whileloop II
? 0 1 2 3 4 5 OM->(6 end) ?
Esempio 3: whileloop III
? 0 1 2 3 4 OM->(5 end)
4.1.1.3 LISTLOOP Esempio 1: listloop I
Esempio 2: listloop II
? 10 11 12 13 14 15 OM->(10 11 12 13 14 15) ?
Esempio 3: listloop III
? OM->((5700 6000 6300) (6300 6600 6900) (6200 6500 6800) (6600 6900 7200) (6800 7100 7400) (6700 7000 7300)) ?
Esempio 4: listloop IV
? OM->((10) (11) (12) (13) (14) (15))
Esempio 5: listloop V
? OM->((5700 6000 6300) (6300 6600 6900) (6200 6500 6800) (6600 6900 7200) (6800 7100 7400) (6700 7000 7300))
Esempio 6: listloop 6
? OM->(-1 -1 -1 -6 4 -1 -1 -1 -1)
4.1.1.4 ONLISTLOOP Esempio 1: onlistloop I
Esempio 2: onlistloop II
? (10 11 12 13 14 15) (11 12 13 14 15) (12 13 14 15) (13 14 15) (14 15) (15) OM->nil ?
Esempio 3: onlistloop III
(10 11 12 13 14 15) (11 12 13 14 15) (12 13 14 15) (13 14 15) (14 15) (15) OM->((10 11 12 13 14 15) (11 12 13 14 15) (12 13 14 15) (13 14 15) (14 15) (15)) ?
Esempio 4: onlistloop IV calcolo degli intervalli tra altezze di un accordo
allintervals1:
? OM->(300 400 400 700 700 1100)
allintervals2:
? OM->(300 400 400 700 700 1100)
4.1.2 COLLETTORI
4.1.2.1 ACCUM
Esempio 1: somma
? OM->55
Esempio 2: moltiplicazione
? OM->3628800
Esempio 3: somma e moltiplicazione
accum4:
? OM->55
accum5:
? OM->3628800
Esempio 4: patch come input
? OM->8
patchcountif incapsula il seguente algoritmo:
4.1.2.2 COLLECT
Esempio 1:
? OM->(-1 -2 -3 -4)
mypatch incapsula il seguente algoritmo:
4.1.2.3 SUM
Esempio 1:
? OM->21
Esempio 2:
? OM->21
4.1.2.4 MIN
? OM->1
4.1.2.5 MAX
? OM->9
4.1.2.6 IF-COUNT
? OM->8
4.2 Applicazioni di OMLOOP: Esempio 1: applicare una funzione
? OM->((1) (2) (3) (4) (5) (6) (7) (8) (9))
Esempio 2: serie aritmetiche
A
B
A:
? OM->(12)
B:
? OM->(0 2 4 6 8 10 12 14)
Esempio 3: somma dei termini di una serie aritmetica
? OM->(42)
Esempio 4: x - dx
? OM->(-1 -1 -1 -6 4 -1 -1 -1 -1)
Esempio 5: segmentazione di liste
A:
B:
A:
? OM->((1 2) (3 4) (10 6 7) (8 9 10))
B:
? OM->((1 2) (3 4) (10 6 7) (8 9 10) (1 2 3 4))
omloop incapsula un ulteriore omloop così strutturato:
CAPITOLO 5 COMPOSIZIONE DI PATCHES IN OPENMUSIC III
5.1 Esempi di applicazioni musicali con OMLOOP Esempio 1: moltiplicazione di due accordi
Omloop:
Esempio 2: moltiplicazione di un accordo per se stesso
La valutazione del patch restituisce la seguente progressione:
omloop è così strutturato:
il patch transpose-elem incapsula il seguente algoritmo, il quale, a sua volta, contiene un omloop:
omloop è così strutturato:
Esempio 4: -----------------------------------------------------------------------Generazione di una sequenza di note a partire da una interpolazione1 (Mikhail Malt) -----------------------------------------------------------------------Sequenza random da accordi interpolati. Funzioni utilizzate interpolation, omloop, nth-random, repeat-n, flat,CHORD e CHORD-SEQ. Descrizione In questo patch si utilizza il random per generare note da particolari accordi al fine di costruire una sequenza di note. (cfr. Cap.2 § 2.1.5.4) A differenza del patch citato nel rimando, si nota che questi accordi sono il risultato di una interpolazione tra due accordi attentamente selezionati. Il primo accordo è definito nel registro grave mentre il secondo in quello acuto. Il risultato dell’interpolazione sarà una sequenza ascendente di accordi, tendenza che sarà preservata nella generazione della sequenza di note.
1
Tutorial 17. L’interpolazione è un metodo per individuare nuovi punti del piano cartesiano a partire da un insieme finito di punti dati.
Struttura del patch A: si definiscono accordi della medesima densità (stesso numero di note) nell’oggetto CHORD (A) e in CHORD (B) il primo nel registro grave, il secondo in quello acuto.
C: l’oggetto interpolation (C) esegue l’interpolazione di due accordi per un numero n di passi definito nel terzo input dell’oggetto. Il valore immesso nell’ultimo input rappresenta la curva di tendenza dell’interpolazione. 1.0 è lineare, significa che l’interpolazione avviene passo dopo passo con il 50% di A all’interno dei primi 6 accordi e il 50% di B nei rimanenti (figura seguente). In una interpolazione non lineare è possibile muoversi liberamente da un’estremità all’altra della curva che si desideri venga seguita.
D: l’oggetto CHORD-SEQ (D) mostra il risultato dell’interpolazione.
E: per prelevare in modo random n-campioni da ogni accordo dell’interpolazione si usa omloop (E) che è così costituito.
listloop conta in ingresso ogni nota che proviene da chord. nth-random sceglie in modo random una nota che viene ripetuta n volte e restituita in uscita da collect. F: l’uscita di omloop è una lista equivalente ad una lista di accordi. In modo da avere una sequenza di note è necessario rimuovere i livelli interni delle parentesi per mezzo della funzione flat (F). La lista di note è ora pronta per essere immessa nell’oggetto CHORD-SEQ che, ad ogni valutazione, ci restituirà una diversa sequenza di note.
----------------------------------------------------------------------------------------5.2 Uso di BPF (break-point function): Campionare una sequenza di note (Jacopo Baboni Schilingi) ----------------------------------------------------------------------------------------Si campiona una sequenza di note rappresentate in un BPF. Funzioni utilizzate CHORD, CHORD-SEQ, BPF, bpf-sample,list-max.
Descrizione In questo patch si prendono le note definite nell’oggetto CHORD box (A), si convertono i valori midicents in una break-point function (B) i quali vengono ricampionati utilizzando un numero di campioni definiti in (C). Struttura del patch A: si inserisce una sequenza di note nell’oggetto chord.
B: BPF, in questo caso, interpreta i valori midicents di (A) come punti equidistanti su di un piano cartesiano. Ciò è possibile in quanto l’oggetto BPF accetta in ingresso una lista di valori da associare alla coordinata x (secondo input) e una lista di valori da associare alla coordinata y (terzo input). Se la lista dei valori midicents di (A) ? OM->(6000 5400 7300 7300 5700 5300 6100 7600 7400 7400 5900 6600 6800)
è immessa come ingresso a BPF nel terzo input, cioè come lista di coordinate per l’asse y, questi diverranno valori delle componenti y delle coppie di coordinate (x y). I valori di x, se non specificati, si distribuiscono in maniera equidistante sull’asse in funzione del passo di default (0 10). Per cui, date le coppie di coordinate (0 ; 6000) (10 ; 5400) (20 ; 7300) (30 ; 7300) (40 ; 5700) (50 ; 5300) (60 ; 6100) (70 ; 7600) (80 ; 7400) (90 ; 7400) (100 ; 5900) (110 ; 6600) (120 ; 6800) Si ottiene la seguente rappresentazione sul piano cartesiano, in cui, per comodità, può risultare utile unire i punti con una linea spezzata, per esempio per descrivere l’andamento del profilo melodico o di qualsiasi altro parametro. (cfr.sul concetto di inviluppo nella computer music Cap.1§ 1.4.2)
Tornando al patch, la traiettoria della linea ben rappresenta il profilo “melodico” nell’ordine delle altezze da noi immesso in (A) cioè:
Solo successivamente, quando abbiamo definito che cosa associare e in che modo a BPF, è possibile avanzare qualsiasi interpretazione spaziale o temporale del profilo delineato. Nel caso del patch qui descritto è possibile dire che esso ben rappresenta l’evoluzione di un profilo melodico. C: In questo input è possibile digitare il numero di punti-campione con cui ricampionare il profilo della linea spezzata. D: Il modulo bpf-sample si incarica di ricampionare la linea spezzata utilizzando un qualsiasi numero di punti (C). E: In modo da campionare la totalità di punti presenti nel BPF è necessario comunicare a (D) di osservare la linea fino al suo ultimo elemento. F: La valutazione di CHORD-SEQ (F) con un valore di ricampiomento (C) uguale al numero di elementi presenti in (A), restituisce lo stesso profilo di linea. All’aumentare di (C) , per esempio per C = 32, il profilo della curva del BPF tende a smussarsi.
Così avviene anche per il profilo melodico in (F). Al profilo melodico originale vengono aggiunte tante note quanto è grande la differenza tra il numero di note definito in (A) e (C), in questo caso 16, che si andranno ad aggiungere per interpolazione al profilo melodico originale. La figura seguente mostra il nuovo profilo melodico:
-----------------------------------------------------------------------------------------------------5.2.2 Uso del BPF Trasformazione di un BPF in una sequenza di note (Jacopo Baboni Schilingi) -----------------------------------------------------------------------------------------------------Funzioni utilizzate CHORD, CHORD-SEQ, BPF, bpf-sample, first, om-scale e om-round.
.
Descrizione In questo patch è possibile disegnare una curva affinchè possa essere convertita in un profilo di altezze dall’intervallo cornice riscalabile. Struttura del patch A: Nel modulo BPF si disegna una curva a piacere. B: In questo box immettere il numero di punti-campione della linea da campionare. C: In questo caso bpf-sample campiona la curva disegnata in (A) per il numero di campioni immesso in (B). D: Si immette in CHORD una nota che sarà la nota più bassa del profilo melodico. E: Il modulo first prende il primo elemento della lista proveniente da (D). F: Si inserisce la nota più acuta del profilo di altezze. G: Il modulo first prende il primo elemento della lista proveniente da (F). H: Il modulo om-scale riscala i valori in uscita da bpf-sample tra quelli determinati in (D) e (F). I: om-round arrotonda i valori in uscita da (H). L: Mostra il risultato della valutazione.
5.2.3 Affinamento delle tecniche di campionamento Il seguente patch di Mikhail Malt mostra un ulteriore affinamento delle tecniche di campionamento di un BPF. In questo contesto esso è particolarmente interessante poiché mostra anche vari livelli di incapsulamento dell’informazione. In questo senso è utile per comprendere quale sia il grado di complessità che può possedere una patch grazie a questa tecnica di programmazione. Nella figura, il patch così come si mostra all’utente:
Il patch, a partire dall’icona bpf-sample mostra cinque livelli di incapsulamento dell’informazione rappresentabili con il seguente schema. Si noti che, al quinto livello, l’icona spirale, rappresenta un loop. Di seguito la rappresentazione della struttura di incapsulamento del patch e la visualizzazione dei singoli livelli:
I°Livello:
II°Livello:
III°Livello:
IV°Livello:
V°Livello:
5.3 Esempi dalle librerie I: OMTREE e Profile OMTREE è una libreria dedicata all’elaborazione di alberi ritmici sviluppata da Ustaz Karim Haddad. Di seguito, alcuni processi effettuati su strutture ritmiche definite nell’oggetto VOICE: reverse-tree, retrogradazione ritmica:
reversetree restituisce il retrogrado della lista di liste dell’albero ritmico originale cioè: ? OM->(2 (((4 4) (1 -1 (1 (1 1 2 1)) 1)) ((4 4) (1 1 (1 (1 1 -2 1)) 1))))
invert-rhythm, inversione ritmica (note trasformate in pause e viceversa):
invert-rhythm cambia di segno i valori compresi nella lista di liste dell’albero ritmico originale: ? OM->(2 (((4 4) ((1 (1 -1 2)) (1 (3.0 -1)) (1 (3 -1)) (1 (1 -1 2)))) ((4 4) ((1 (1.0 -1 1 -1)) (1 (3 -1)) 1 (1 (1.0 -1 2))))))
rotate-tree, rotazione di alberi ritmici I:
Rotazione della lista di liste del ritmo originale per n posizioni (in questo caso 1 immesso nel secondo input del modulo rotatetree) tale per cui si ottiene, a partire dalla prima lista: (? ((4//4 (1 (1 (3 -2)) 1 (1(-2 1)))) (4//4 (-2 (1 (-3 4)) 1))))
la lista ruotata di una posizione: (2 (((4 4) ((1 (3 (1 (-2 1)) -2 (1 (1 -2)))))) ((4 4) ((1 (-3 (1 (4 1)) 1))))))
rotate-tree, rotazione di alberi ritmici II: Utilizzando lo stesso modulo rotate-tree è possibile stabilire misura per misura il numero di rotazioni da effettuare. Nell’esempio seguente si mostra come sia possibile ruotare la lista relativa alla prima misura di due posizioni mentre la seconda di una posizione in modo da rimanere uguale all’esempio precedente. In particolare: prima si definisce che si vuole lavorare sulle misure (indicandolo nel terzo input del modulo rotate-tree (bymeasure). Nel secondo input si immette una lista in cui il primo valore corrisponde al
numero di rotazione della posizione della prima misura, il secondo valore della seconda e così via se ci fossero altre misure.
? OM->(? (((4 4) ((1 (-2 (1 (1 -2)) 1 (1 (1 3)))))) ((4 4) ((1 (-3 (1 (4 1)) 2))))))
Nell’esempio seguente tietree trasforma tutte le pause in note con legatura di durata. Successivamente il modulo reducetree semplifica la notazione.
subst-rhythm o sostituzione di valori di una lista I. E’possibile immettere dei valori nel terzo input del modulo subst-rhythm, che sostituiranno i valori dell’albero ritmico originale:
? OM->(2 (((4 4) ((1 (-1 (1 (2 1 1 1)) -2 1)))) ((4 4) ((1 (1 (1 (1 2 1 1)) -1 1))))))
subst-rhythm o sostituzione di valori di una lista II.
? OM->(2 (((4 4) ((1 ((1 (1 1 1)) (1 ((1 (1 7)) (2 (1 2)) (1 (3 2)) (1 (5)))) 1 1)))) ((4 4) ((1 (1 (1 (1 2 1 1)) -1 1))))))
subst-rhythm o sostituzione di valori di una lista III.
? OM->(2 (((4 4) ((1 ((1 (1 1 1)) (1 (7 (2 (1 2)) (1 (3 2)) 5)) 1 1)))) ((4 4) ((1 (1 (1 (1 2 1 1)) -1 1))))))
subst-rhythm o sostituzione di valori di una lista IV.
? OM->(2 (((4 4) ((1 (2 (1 (1 -2 1 1)) (1 (1 -1 1)) (1 (3 2)))))) ((4 4) ((1 (1 (1 (1 (2 (1.0 1 -1)) 1 1)) -1 (1 (1 1 -2 1))))))))
Il modulo make-tree-groups permette: - l’associazione di particolari figure ritmiche a relativi simboli. - la costruzione di un albero ritmico a partire da una sequenza di simboli con misure definite.
(a
d
a
c
a
b
a
a…)
a=111 b=121
figura di terzina di crome figura di semicroma, croma, semicroma
c=34
figura di settimina con croma puntata ( 3 ) e semiminima ( 4 )
d=1111
figura di quartina di semicrome
PROFILE La libreria PROFILE è stata concepita e programmata per l’ambiente OM da Jacopo Baboni Schilingi. (Baboni Schilingi Malt 1998) La libreria fornisce una serie di strumenti per l’elaborazione e la manipolazione delle altezze descrivibili per mezzo della nozione di profilo. Nella teoria della musica il concetto di profilo rinvia immediatamente alla dimensione orizzontale del sistema notazionale musicale occidentale.2
2
P.es. in (Azzaroni 1997)
In particolare il profilo di una sequenza di altezze si costituisce nel passaggio dall’intervallo, descrivibile come segmento di retta, alla linea melodica, intesa come linea spezzata, dotata di una direzionalità geometrico-melodica. Delle due variabili della dimensione orizzontale notazionale, altezze e tempo, la libreria profile considera solo il profilo delle altezze. Il profilo melodico è definito da Baboni Schilingi, come: “…una successione lineare di direzioni di intervalli musicali, equidistanti dal punto di vista temporale, rappresentata graficamente da una curva per segmenti (figura seguente). Come diretta conseguenza di una concezione parametrica della composizione musicale, di chiara derivazione seriale, attualmente diversi compositori3 hanno utilizzato l’idea di profilo come elemento indipendente dagli altri parametri musicali.” (Baboni Schilingi Malt 1995)
Tipico della concezione parametrica anche della musica elettronica, la rappresentazione grafica per mezzo di linee spezzate può rappresentare un alto livello di astrazione mediante cui dissociare temporaneamente gli oggetti musicali dalla descrizione nel tempo dei loro parametri costitutivi. L’alto livello di astrazione permesso dalla figura geometrica non preclude la perdita di controllo da parte del compositore: “Il compositore può controllare l’evoluzione del profilo melodico controllando i seguenti parametri: le direzioni degli intervalli, gli intervalli 3
Baboni-Schilingi, Brian Ferneyhough, Ivan Fedele, Mikhail Malt, Philippe Manoury, Alessandro Melchiorre, Tristan Murail
stessi, le altezze assolute in sesno verticale (armonico) che orizzontale, l’andamento globale di ogni processo attraverso grafici e il grado di profondità di un processo attraverso la ricorsione e la iterazione implementate direttamente nelle funzioni.” (Baboni Schilingi Malt 1995) compr/expan, compressione ed espansione del profilo: Esempio A
Esempio B
Nell’esempio A, il seguente profilo melodico
è espanso per un valore a piacere immesso nel secondo input del modulo compr/expan; in questo caso 1.8 da cui si ottiene il seguente profilo:
Maggiore è il valore, più ampia sarà l’espansione del motivo; il seguente profilo è stato espanso di 2.5
Il seguente di 4.0
Valori minori di 1 comprimono un profilo. Nell’esempio B si utilizza il modulo loop per ottenere una progressione dell’espansione verso una compressione o viceversa, del medesimo profilo melodico. La figura seguente mostra l’algoritmo di loop. Si noti l’utilizzo della serie aritmetica al posto dell’unico valore da immettere in compr/expan.
Dal medesimo profilo originale e per valori definita dalla serie aritmetica – 4 –3 –2 –1 0 1 234
interpol-prof permette l’interpolazione di profili in un numero a piacere di passi. Nell’esempio seguente, anch’esso tratto da Baboni Schilingi, si decide di interpolare una sequenza tratta da Bach con una di Chopin in 10 passi. Il seguente è Bach:
Il seguente Chopin:
Di seguito il patch mostra tutti i passaggi necessari per effettuare una metamorfosi del tema di Bach in quello di Chopin. Si osserva che il primo e l’ultimo profilo sono rispettivamente i temi originali.
1
J.S.Bach
2
3
4
5
6
7
8
9
10
F. Chopin
Si paragona il principio di trasformazione per metamorfosi ad una interpolazione tra due profili il cui percorso può essere visualizzato mediante il modulo bpf. Per visualizzare tale percorso deve essere utilizzato il modulo bpf-interpolx. Il patch seguente rappresenta la metamorfosi di profili descritti attraverso segmenti di retta:
A
B
B
A range-approx riscala gli elementi di un profilo all’interno di un intervallo cornice:
Data una sequenza, per esempio:
è possible decidere di riscalare il range intervallare all’interno di un intervallo, per esempio:
In modo da ottenere il seguente risultato:
group-list permette di articolare una lista raggruppandone gli elementi. Una seconda lista numerica stabilisce la lunghezza di questi elementi. Nell’esempio seguente una sequenza discendente di note viene raggruppata in accordi della densità di 1 2 3 4 5 6 altezze.
La seguente è la sequenza di note immessa nel primo input di group-list:
cioè (8000 6800 6098 5600 5214 4898 4632 4400 4196 4014 3848 3698 3560 3432 3312 3200 3096 2996 2902 2814 2730 2648 2572 2498 2428 2360 2294 2232)
Di seguito la valutazione della patch per la lista di valori (1 2 3 4 5 6) immessi come secondo input:
? OM->((8000) (6800 6098) (5600 5214 4898) (4632 4400 4196 4014) (3848 3698 3560 3432 3312) (3200 3096 2996 2902 2814 2730))
notes-change Nell’esempio seguente, ad un determinato profilo melodico è possibile sostituire il sistema di riferimento sonoro, aggingendo una serie di intervalli immessi come secondo input.
Dato il seguente profilo:
E’possibile definire una serie di note-sistema di riferimento:
In modo da ottenere un profilo melodico coerente con quello immesso ma vincolato ad un sistema di riferimento definito a posteriori.
Come ultimo esempio si riporta il modulo subst-list mediante cui operare complesse sostituzioni di liste.
? OM->(1 (ttt) 3 4 5 2 oioi ppp 2 3 22 p)
L’esempio mostra come sia possibile sostituire, in una data lista, l’atomo 2 con (ttt). In questo caso è richiesto che la sostituzione avvenga una sola volta (terzo input). -----------------------------------------------------------------------5.4 La Maquette (Karim Haddad)4 -----------------------------------------------------------------------Descrizione Oggetti nella MAQUETTE e salvataggio del contenuto come file MIDI. Funzioni utilizzate MAQUETTE, VOICE,CHORD-SEQ, list e save-as-midi La MAQUETTE è l’oggetto ideale per ordinare nel tempo eventi e processi musicali. Si esamina un modo semplice per disporre al suo interno oggetti come MAQUETTE, CHORD-SEQ e VOICE.
Si crea una cartella dove immetteremo la MAQUETTE:
4
Tutorial 32
Il primo input è per l’onset. Il secondo riguarda un oggetto o una lista di oggetti che devono essere inseriti nella MAQUETTE.
Struttura del patch A: In (A) creiamo una VOICE. Questa avrà la funzione di CANTUS FIRMUS della nostra sequenza musicale, che significa che tutti gli oggetti che immetteremo nella maquette, saranno sincronizzati con ogni nota della nostra VOICE. B: Si è deciso di immettere sette eventi nella MAQUETTE, inclusa VOICE (A) che sarà l’evento di partenza. L’albero ritmico (? (((4 4) (1 (2 ((2 (1.0 4)) 1)) 1.0)) ((4 4) ((2 (-3 2)) (1 (2.0 2 1)) (1 (1.0 6))))))
C: Sette note verranno prelevate da un CHORD-SEQ (C) che è connesso al terzo input di VOICE.
Dopo la valutazione, il seguente sarà il nostro CANTUS:
D-J: Dopo aver creato il CANTUS, riuniamo una lista di oggetti musicali con l’utilizzo di list (J).
Il primo oggetto della lista sarà la nostra VOICE. La sequenza della MAQUETTE sarà data dalla prima nota di VOICE (Do#).
(D-F-G) CHORD-SEQ sono differenti valutazioni del tutorial 11 (Costruzione random di una sequenza I)
La MAQUETTE (E) proviene dal tutorial 28.
(H) CHORD-SEQ tutorial 17.
(I) Tutorial 12 con l’aggiunta di un’uscita.
K: In modo da ottenere da VOICE una lista in millisecondi degli onset è necessario connettere VOICE ad un CHORD-SEQ (K). Questo rappresenta un metodo efficiente per trascrivere una notazione ritmica in dati numerici. Si dirà che CHORD-SEQ eredita dati dall’oggetto voice mediante l’utilizzo del metodo corretto. L: Il primo input della MAQUETTE accetta la lista di onset provenienti da CHORD-SEQ (K). Questa lista rappresenta le coordinate temporali di ogni oggetto che abbiamo riunito mediante list (j), i quali, saranno connessi al secondo input della MAQUETTE. Dopo la valutazione della MAQUETTE (L) gli oggetti saranno disposti agli onset desiderati.
M: E’possibile salvare l’intera sequenza come MIDIFILE.
5.5 Introduzione alle tecniche non deterministiche Nella presente dissertazione ci si è soffermati ad analizzare alcune applicazioni di tecniche deterministiche alla composizione musicale mediante il computer. Gli esempi didattici forniti nei tutorial mostrano come sia possibile progettare un algoritmo affinché generi del materiale che possa risultare di una qualche utilità al compositore. Nella letteratura sulla composizione assistita con il termine non-deterministico si fa riferimento a una particolare tecnica di programmazione detta Constraint Programming (CP), programmazione per vincoli. Essa è una tecnica derivata dall’IA che consente la rappresentazione di un problema specificando solo un parte di esso. Così ne parla Charlotte Truchet: “A CP problem is structured as a Constraint Satisfaction Problem; with a set of variables…, domains of possible values for those variables, and constraints which are predicates stated on the variables. The goal is to find an affectation of values to the variables such that constraint are satisfied”. Invece di utilizzare un algoritmo per definire un problema, l’utente definisce il suo problema mediante una serie di regole che devono essere seguite quando si ricerca una soluzione. Naturalmente, per un problema definito, sono possibili molteplici soluzioni. Si pensi alle regole definite in un manuale di armonia o di contrappunto. E’ necessario distinguere questo metodo da quanto applicato precedentemente con le tecniche dette deterministiche. Il metodo non-deterministico permette l’astrazione di un problema musicale per mezzo della sua rappresentazione attraverso regole e permette al compositore di concentrarsi maggiormente sulla definizione del problema.5 Il metodo deterministico, il quale offre comunque nuovi significati al processo compositivo, permette la definizione di quelle che possono essere chiamate procedure più che regole, le quali sono strutturate secondo una precisa definizione algoritmica. Per cui sono possibili esplorazioni random, stocastiche, caotiche di variabili; processi deterministici sono tutti quei processi per i quali è possibile implementare e “tradurre”, grazie alla particolarità del computer, un qualsiasi contenuto informativo nella sua sonificazione diretta. Il metodo non-deterministico implementa una particolare tecnologia che non è definita per le tecniche deterministiche, una tecnologia che “frees the composer to concentrate on what he wants to do in a musical sense; the how is left to the computer…the attitude of constraints based computer aided composition is particulary close to the way many musicians and music textbooks are thinking or talking: musicians often describe, for instance, a certain compositional style by a set of compositional rules…to give a traditional counterpoint example: usually all notes shall be consonant to simultaneous 5
Si veda a questo proposito la definizione di regola in (Baroni, Dalmonte, Jacoboni 1999); laddove Baroni deduce delle regole dall’analisi, il compositore definisce le proprie regole per realizzare un processo.
notes, however in certain circumstances there may be dissonaces…Can we formulate this as a constraint problem as abstract as in counterpoint textbooks…” (Anders 2003). Nell’implementazione di questa tecnica si fa quindi riferimento alla esplicita formulazione di “regole della musica” riconducibili, in parte, a quanto teorizzato in (Baroni, Dalmote, Jacoboni 1999). Tuttavia, dal punto di vista poietico qui considerato, il compositore inventa e crea la propria grammatica6, cioè elabora strategie per la definizione di una sintassi finalizzata all’emergenza di particolari unità morfologiche.7 Si rimanda alle seguenti pubblicazioni per un’approfondita analisi delle applicazioni mediante tecniche non deterministiche (Bonnet Rueda 1999, Sandred 2000, Anders 2003, Truchet 2004). CONCLUSIONI Con la generazione di compositori nata a partire dalla fine degli anni 60, algoritmi e procedure, sistemi interattivi e patches, diventano ormai parte integrante di una nuova grammatica musicale, complementare alle possibilità sintattiche dei sistemi notazionali tradizionali. Si pensa in particolare ai compositori legati al gruppo di lavoro e di ricerca P.R.I.S.M.A. (Pedagogia e ricerca internazionale sui sistemi musicali assisti) (AAVV. Prisma 01 2003) momento d’incontro fondamentale per chi desideri “promuovere un’estetica ed una pratica che articolano logica matematica e libertà espressiva, fondamenti del rapporto fra regola e invenzione”. In questo gruppo di ricerca si focalizza l’attenzione sul rapporto tra analisi, formalizzazione e composizione per poi definire nuove ipotesi di scrittura possibili attraverso il mezzo informatico8. Nella presente dissertazione si è voluto limitare la complessità delle nuove “ipotesi di scrittura” introducendo la disciplina della composizione musicale assistita dal computer,
6
Con il termine grammatica si fa riferimento ad una conoscenza esplicita delle regole della composizione. Ad essa si contrappone una competenza strutturale-grammaticale a cui fa riferimento una conoscenza intuitiva ma non esplicita delle regole: “E’necessario tornare alla distinzione fra sapere intuitivo e sapere dichiarativo…Le conoscenze strutturali a cui fanno comunemente appello l’ascoltatore e il compositore non sono necessariamente di carattere “dichiarativo”, anzi, di norma sono solo intuitive: un buon ascoltatore o un buon compositore sanno ad esempio che cosa si deve intendere per “tema”, ma di solito non sanno definire tale concetto. E’perciò opportuno distiguere la conoscenza intuitiva delle regole da quella concettualmente esplicitata: chiameremo la prima con il termine di competenza strutturale (o anche grammaticale) e riserveremo solo alla seconda il termine di grammatica in senso stretto. Diciamo che per grammatca intendiamo l’esplicitazione concettuale della competenza grammaticale”. (Baroni, Dalmonte, Jacoboni 1999) 7 La composizione per modelli interattivi (CMI) è una libreria per OM realizzata dal compositore Jacopo Baboni Schilingi in cui si definisce un sistema organizzato e formalizzato di regole dedotto dalla prassi dello stesso compositore. 8 Ipotesi che, ricordiamo, comprendono la diversa possibilità di articolare oggetti e processi compositivi a vari livelli di descrizione.
nella modalità in cui essa si manifesta in una delle sue più importanti realizzazioni tecnologiche: OpenMusic. La composizione musicale assistita dal computer rappresenta un momento di incontro tra differenti discipline altamente specializzate, come la composizione musicale, la musicologia computazionale e l’informatica musicale. Si è cercato di esplicitare i paradigmi culturali, tecnici, tecnologici e scientifici, soggiacenti a ciascun ambito, in modo da rilevare possibili percorsi comuni, percorsi che concretizzano, si è detto, nella possibilità di uno studio comparato tra metodo della scienza normale e necessità umanistiche. Si crede siano molte le conseguenze che questo studio potrebbe avere all’interno delle discipline musicologiche e scientifiche. Conseguenze a cui si è solamente fatto cenno, e che necessitano di una approfondita ricerca e sistematizzazione teorica. Quest’ultima, in particolare, non potrà prescindere dal considerare i numerosissimi spunti di riflessione che offre il recentissimo testo del compositore Jacopo Baboni Schilingi, “La musica ipersistemica”, testo di pubblicazione troppo recente per essere integralmente considerato in questa dissertazione. A questa sistematizzazione si dovrebbero accompagnare i fondamentali contributi teorici a cui si è fatto continuamente riferimento, da Horacio Vaggione a Curtis Roads, da Guerino Mazzola a Agostino DiScipio. Si delinea così, un possibile contributo ad una teoria della forma musicale che integri i nuovi processi trasformazionali come parte fondamentale e causale dello sviluppo di un nuovo “repertorio delle morfologie”, per utilizzare la terminologia di (Baroni, Dalmonte, Jacoboni 1999). Si è fatto cenno a tutto questo evidenziando la natura poietica degli esempi considerati. Tuttavia rimangono aperti molti altri campi di studio a cui, per ovvi motivi contestuali, non si è potuto fare cenno: quello analitico per esempio. La libreria per OpenMusic OMZN sembra fornire un’accurata descrizione delle procedure analitiche che, nel corso del Novecento, hanno fatto ricorso al numero come strumento d’indagine. Gli studi di Moreno Andreatta http://recherche.ircam.fr/equipes/repmus/moreno rappresentano un saldo riferimento per questo indirizzo analitico. In generale, il contributo informatico alla disciplina analitica sembra anche fornire preziosi strumenti per uscire dall’impasse della dialettica poietico-estesica. Il saggio di J.J.Nattiez, Il combattimento di Crono e Orfeo e di Stéphane Roy, L’analyse des musiques électroacoustique: Modèles et proposition, edizioni L’Harmattan 2003 sembrano, diremmo per necessità, approfondire le strategie poietiche del compositore, mediante una continua reinterpretazione di strategie di ascolto, quindi estesiche, indagate dal punto di vista psicoacustico e con il supporto del mezzo informatico. Riportiamo, un’ultima volta, le considerazioni di Giuseppe Longo:
“il calcolatore consente di (e obbliga a) scendere nei minuti particolari di un’operazione e di osservare in filigrana i meccanismi e le strutture soggiacenti altrimenti invisibili. L’esecuzione passo passo ci mette così di fronte ai problemi che costituiscono quel “mare” che sta in mezzo tra il “dire” e il “fare”. “l’algoritmo costituisce la differenza fondamentale tra l’impostazione informatica e quella tradizionale (filosofica e scientifica) della conoscenza. Più simile all’attività pratica, passo passo, degli artigiani che a quella teorica e speculativa dei pensatori, l’informatica consente di articolare con precisione potenzialmente arbitraria i passaggi che portano dal concetto primo o dall’intuizione al suo dispiegamento analitico e all’attuazione….più sorprendente è l’influenza che l’informatica esercita sui costrutti teorici…” Non pare affatto scontato ribadire che in tutta la dissertazione non si è fatto cenno alla definizione di come comporre musica. La poietica (sinonimo di processo) e le sue strategie rappresentano solo un primo momento di articolazione del materiale in cui riconoscere l’emergenza di una idea già definita o, viceversa, riconoscere il germe di una possibile idea ancora da strutturare. Nella terminologia del compositore e musicologo Guerino Mazzola (Mazzola 2002) la poietica definisce l’insieme delle strategie locali e globali per la definizione di topologie e di processi di trasformazione del materiale9; altra cosa è la considerazione di una poetica globale che comprenda non solo le prospettive deterministiche e non deterministiche10, ma anche livelli di significazione più elevati come quelli narrativi culturali (Mazzola 2002). E’ certo che la genesi della forma, a cui si è fatto cenno in questa dissertazione, riguardi quindi esclusivamente gli aspetti quantitativi del comporre. Laddove il compositore attribuisce un qualsiasi significato alla natura della sua creazione, se ne assume la piena responabilità etica ed estetica. In particolare ciò vale per i processi deterministici che si sono considerati in questa dissertazione11. Al fascino immortale della macchina pensante, al progetto di un’Intelligenza Artificiale, il senso comune sembra oggi rispondere con la banalizzazione dei processi automatici 9
In breve: la trasformazione si distingue dalla topologia in quanto “trasfigura” un materiale in modo tale da non rendere riconoscibile la fonte da cui esso proviene. Una deformazione topologica mantiene inalterate proprietà strutturali e percettive-gestaltiche tali da riconoscere un principio di identità e causalità (cfr.Baboni Schilingi 2005) tra il materiale creato, quello generato e sviluppato. Il confine tra trasformazione e deformazione topologica è essenzialmente culturale. 10
O del modo in cui queste vengono investite di una finalità semantica; ci si chiede: quale significato estetico il compositore attribuisce ad una particolare procedura? 11 Sono molte, oggi, le applicazioni di informatica musicale che offrono una banalizzazione delle procedure automatiche con semplici sonificazioni, di solito ritmico melodico, dei processi caotici e aleatori.
che di quel sogno furono la prima manifestazione. “Al cuore dell’avvenire prevedibile si trovano il byte e il numero”, è la posizione critica dell’umanista George Steiner (Steiner 1989). Certamente, è possibile sostenere che, oggi, l’opinione corrente, sia talmente mutata che è auspicabile, con Steiner, il sostegno ad una critica radicale del pensiero “creativo” che si modelli esclusivamente su “schermi e modelli narrativi di algoritmi formali”. Ma l’ars subtilior musicale mai ha fatto parte del senso comune. L’eterna condizione di musica reservata delle prassi artigianali qui considerate, hanno fatto della musica un momento privilegiato del rapporto tra arte e scienza. E nel porre continuamente i loro problemi che i compositori hanno contribuito alla realizzazione di un software complesso come OpenMusic. Viceversa, è nel disporre di tale complessità che il compositore ha reso possibile l’emergenza e la strutturazione di nuove possibilità formali. Tutto ciò, naturalmente, è necessario desiderarlo affinchè possa esistere. “E’importante in questo momento definire un rapporto equilibrato con le macchine, musicali e non, che sempre più entrano a far parte della nostra vita. Non dobbiamo né temerle né mitizzarle. Ciò che vi si immette sono solo idee, e solo se sono efficaci funzioneranno…” (Luca Francesconi, L’uomo polifonico, in programma del Festival Regola Gioco 1998) Dal punto di vista musicale, si è detto a proposito dell’interazione, sulla quantità (prima manifestazione di un processo ricorsivo), il compositore può intervenire per ottenere l’ espressione sensibile di una sua intenzione, di un suo desiderio. In questo “le arti delineano e creano sistemi che sono analoghi a una condizione di esistenza che si desidera” come vera e reale (Brün 1970). E’questo desiderio che muove il pensiero critico, di chi compone e di chi sente ed ascolta musica. E’quindi fondamentale non dimenticare la complessità delle interazioni psicologiche che contribuiscono alla formazione dell’esperienza musicale “come concretizzazione di intenzioni/progetti determinati, di significazioni culturali e di comunicazioni sociali, che trovano le loro determinazioni finali solo in una dinamica gamma di eventi e situazioni interpersonali”. (John R.Searle in Longo 1998) Totalmente immerso in questa immensa rete di possibilità espressive è, per ora, ancora l’uomo.
APPENDICE I Tabelle di conversione valori MIDI note in frequenze temperate e microtonali
Hauteur Midi - hauteur tempérée - fréquence MIDI Pitch - note - frequency Voici la correspondance des notes Midi (Midi pitches) avec la notation musicale habituelle des hauteurs (souvenez-vous que le La du diapason (440 Hz) est nommé La3. Ici, les noms des notes sont indiqués selon la convention anglo-saxonne.
F
E
D
C
G
A
B
Enfin, la troisième colonne donne la fréquence (exprimée en Hertz) des notes, sur l'étendue du registre du piano. Marc Battier, 1996 Midi
Pitch
0: 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: -11:
C -2 C# -2 D -2 Eb -2 E -2 F -2 F# -2 G -2 G# -2 A -2 Bb -2 B -2
Midi
Pitch
48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59:
C2 C#2 D2 Eb2 E2 F2 F#2 G2 G#2 A2 Bb2 B2
Midi
Pitch
96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107:
C6 C#6 D6 Eb6 E6 F6 F#6 G6 G#6 A6 Bb6 B6
Midi
-
130.81 138.59 146.83 155.56 164.81 174.61 184.99 195.99 207.65 220.00 233.08 246.94
Frequency
2093.00 2217.46 2349.31 2489.01 2637.02 2793.82 2959.95 3135.96 3322.43 3520.00 3729.31 3951.06
Pitch
Frequency
12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23:
C -1 C# -1 D -1 Eb -1 E -1 F -1 F# -1 G -1 G# -1 A -1 Bb -1 B -1
Midi
Pitch
60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71:
C3 C#3 D3 Eb3 E3 F3 F#3 G3 G#3 A3 Bb3 B3
Midi
Pitch
108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119:
C7 C#7 D7 Eb7 E7 F7 F#7 G7 G#7 A7 Bb7 B7
Midi
27.50 29.13 30.86
Frequency
261.62 277.18 293.66 311.12 329.62 349.22 369.99 391.99 415.30 440.00 466.16 493.88
Frequency
4186.01 4434.92 4698.64 4978.03 5274.04 5587.65 5919.91 6271.93 6644.87 7040.00 7458.62 7902.13
Pitch
24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35:
Midi
72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83:
Frequency
C0 C#0 D0 Eb0 E0 F0 F#0 G0 G#0 A0 Bb0 B0
Pitch
C4 C#4 D4 Eb4 E4 F4 F#4 G4 G#4 A4 Bb4 B4
Midi Pitch
120: 121: 122: 123: 124: 125: 126: 127:
C8 C#8 D8 Eb8 E8 F8 F#8 G8
Midi Pitch
32.70 34.64 36.70 38.89 41.20 43.65 46.24 48.99 51.91 55.00 58.27 61.73
Frequency
523.25 554.36 587.32 622.25 659.25 698.45 739.98 783.99 830.60 880.00 932.32 987.76
Frequency
8372.02 8869.84 9397.27 9956.06 10548.08 11175.30 11839.82 12543.85
Frequency
36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47:
Midi
84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95:
C1 C#1 D1 Eb1 E1 F1 F#1 G1 G#1 A1 Bb1 B1
Pitch
C5 C#5 D5 Eb5 E5 F5 F#5 G5 G#5 A5 Bb5 B5
65.40 69.29 73.41 77.78 82.40 87.30 92.49 97.99 103.82 110.00 116.54 123.47
Frequency
1046.50 1108.73 1174.65 1244.50 1318.51 1396.91 1479.97 1567.98 1661.21 1760.00 1864.65 1975.53
CHART 5
MIDI - PITCH - FREQUENCY
Studio Data Book 2
Fréquence microtonale - hauteur - note Midi Microtonal Frequency - Pitch - MIDI Conversion des fréquences en hauteurs temperées jusqu'au 1/8e de ton. Les noms des notes sont exprimés comme A, B, …, G, où A=La, B=Si, etc. Colonne 1 Fréquence exprimée en hertz Colonne 2 hauteur temperée correspondante à la resolution du 1/8e de ton. Les degrés microtonaux suivent la convention:: C hauteur temperée au 1/2 ton; C désigne la note Do. Ch la note Do hausée d'un 1/8e de ton Cq la note Do hausée d'un 1/4 de de ton Colonne 3 hauteur exprimée en 1/2 tons Colonne 4 notation MIDI This chart gives the conversion of frequency into pitch. Column 1 frequency in Hertz Column 2 pitch based on a fine resolution of 1/8th of a whole tone. Microtonal pitches are expressed as follows: C regular tempered pitch Ch C pitch, plus 1/8th (one eighth) of a tone Cq C pitch, plus 1/4th (one fourth) of a tone Column 3 pitch expressed in tempered semitones (no microtones) Column 4 pitch expressed as MIDI pitch
16.35 16.59 16.83 17.08 17.32 17.58 17.83 18.09 18.35 18.62 18.89 19.17 19.45 19.73 20.02 20.31 20.60 20.90 21.21 21.51 21.83 22.14 22.47 22.79 23.12 23.46 23.80 24.15 24.50 24.86 25.22 25.58 25.96 26.33 26.72 27.11 27.50 27.90 28.31 28.72 29.14 29.56 29.99 30.43 30.87 31.32 31.77 32.23
do-1 doh-1 doq-1 doqh-1 do#-1 do#h-1 do#q-1 do#qh-1 re-1 reh-1 req-1 reqh-1 re#-1 re#h-1 re#q-1 re#qh-1 mi-1 mih-1 miq-1 miqh-1 fa-1 fah-1 faq-1 faqh-1 fa#-1 fa#h-1 fa#q-1 fa#qh-1 sol-1 solh-1 solq-1 solqh-1 sol#-1 sol#h-1 sol#q-1 sol#qh-1 la-1 lah-1 laq-1 laqh-1 la#-1 la#h-1 la#q-1 la#qh-1 si-1 sih-1 siq0 siqh-1
la-1 la-1 la-1 la-1 la#-1 la#-1 la#-1 la#-1 si-1 si-1 si-1 si-1 do0
21 21 21 21 22 22 22 22 23 23 23 23 24
32.70 33.18 33.66 34.15 34.65 35.15 35.66 36.18 36.71 37.24 37.78 38.33 38.89 39.46 40.03 40.61 41.20 41.80 42.41 43.03 43.65 44.29 44.93 45.59 46.25 46.92 47.60 48.30 49.00 49.71 50.44 51.17 51.91 52.67 53.43 54.21 55.00 55.80 56.61 57.44 58.27 59.12 59.98 60.85 61.74 62.63 63.54 64.47
do0 doh0 doq0 doqh0 do#0 do#h0 do#q0 do#qh0 re0 reh0 req0 reqh0 re#0 re#h0 re#q0 re#qh0 mi0 mih0 miq0 miqh0 fa0 fah0 faq0 faqh0 fa#0 fa#h0 fa#q0 fa#qh0 sol0 solh0 solq0 solqh0 sol#0 sol#h0 sol#q0 sol#qh0 la0 lah0 laq0 laqh0 la#0 la#h0 la#q0 la#qh0 si0 sih0 siq1 siqh0
do0 do0 do0 do#0 do#0 do#0 do#0 re0 re0 re0 re0 re#0 re#0 re#0 re#0 mi0 mi0 mi0 mi0 fa0 fa0 fa0 fa0 fa#0 fa#0 fa#0 fa#0 sol0 sol0 sol0 sol0 sol#0 sol#0 sol#0 sol#0 la0 la0 la0 la0 la#0 la#0 la#0 la#0 si0 si0 si0 si0 do1
24 24 24 25 25 25 25 26 26 26 26 27 27 27 27 28 28 28 28 29 29 29 29 30 30 30 30 31 31 31 31 32 32 32 32 33 33 33 33 34 34 34 34 35 35 35 35 36
65.41 66.36 67.32 68.30 69.30 70.30 71.33 72.36 73.42 74.48 75.57 76.67 77.78 78.91 80.06 81.23 82.41 83.61 84.82 86.06 87.31 88.58 89.87 91.17 92.50 93.84 95.21 96.59 98.00 99.42 100.87 102.34 103.83 105.34 106.87 108.42 110.00 111.60 113.22 114.87 116.54 118.24 119.96 121.70 123.47 125.27 127.09 128.94
do1 doh1 doq1 doqh1 do#1 do#h1 do#q1 do#qh1 re1 reh1 req1 reqh1 re#1 re#h1 re#q1 re#qh1 mi1 mih1 miq1 miqh1 fa1 fah1 faq1 faqh1 fa#1 fa#h1 fa#q1 fa#qh1 sol1 solh1 solq1 solqh1 sol#1 sol#h1 sol#q1 sol#qh1 la1 lah1 laq1 laqh1 la#1 la#h1 la#q1 la#qh1 si1 sih1 siq2 siqh1
do1 do1 do1 do#1 do#1 do#1 do#1 re1 re1 re1 re1 re#1 re#1 re#1 re#1 mi1 mi1 mi1 mi1 fa1 fa1 fa1 fa1 fa#1 fa#1 fa#1 fa#1 sol1 sol1 sol1 sol1 sol#1 sol#1 sol#1 sol#1 la1 la1 la1 la1 la#1 la#1 la#1 la#1 si1 si1 si1 si1 do2
36 36 36 37 37 37 37 38 38 38 38 39 39 39 39 40 40 40 40 41 41 41 41 42 42 42 42 43 43 43 43 44 44 44 44 45 45 45 45 46 46 46 46 47 47 47 47 48
130.81 132.72 134.65 136.60 138.59 140.61 142.65 144.73 146.83 148.97 151.13 153.33 155.56 157.83 160.12 162.45 164.81 167.21 169.64 172.11 174.61 177.15 179.73 182.34 185.00 187.69 190.42 193.19 196.00 198.85 201.74 204.68 207.65 210.67 213.74 216.85 220.00 223.20 226.45 229.74 233.08 236.47 239.91 243.40 246.94 250.53 254.18 257.87
do2 doh2 doq2 doqh2 do#2 do#h2 do#q2 do#qh2 re2 reh2 req2 reqh2 re#2 re#h2 re#q2 re#qh2 mi2 mih2 miq2 miqh2 fa2 fah2 faq2 faqh2 fa#2 fa#h2 fa#q2 fa#qh2 sol2 solh2 solq2 solqh2 sol#2 sol#h2 sol#q2 sol#qh2 la2 lah2 laq2 laqh2 la#2 la#h2 la#q2 la#qh2 si2 sih2 siq3 siqh2
do2 do2 do2 do#2 do#2 do#2 do#2 re2 re2 re2 re2 re#2 re#2 re#2 re#2 mi2 mi2 mi2 mi2 fa2 fa2 fa2 fa2 fa#2 fa#2 fa#2 fa#2 sol2 sol2 sol2 sol2 sol#2 sol#2 sol#2 sol#2 la2 la2 la2 la2 la#2 la#2 la#2 la#2 si2 si2 si2 si2 do3
48 48 48 49 49 49 49 50 50 50 50 51 51 51 51 52 52 52 52 53 53 53 53 54 54 54 54 55 55 55 55 56 56 56 56 57 57 57 57 58 58 58 58 59 59 59 59 60
261.63 265.43 269.29 273.21 277.18 281.21 285.30 289.45 293.66 297.94 302.27 306.67 311.13 315.65 320.24 324.90 329.63 334.42 339.29 344.22 349.23 354.31 359.46 364.69 369.99 375.38 380.84 386.38 392.00 397.70 403.48 409.35 415.30 421.35 427.47 433.69 440.00 446.40 452.89 459.48 466.16 472.94 479.82 486.80 493.88 501.07 508.36 515.75
do3 doh3 doq3 doqh3 do#3 do#h3 do#q3 do#qh3 re3 reh3 req3 reqh3 re#3 re#h3 re#q3 re#qh3 mi3 mih3 miq3 miqh3 fa3 fah3 faq3 faqh3 fa#3 fa#h3 fa#q3 fa#qh3 sol3 solh3 solq3 solqh3 sol#3 sol#h3 sol#q3 sol#qh3 la3 lah3 laq3 laqh3 la#3 la#h3 la#q3 la#qh3 si3 sih3 siq4 siqh3
do3 do3 do3 do#3 do#3 do#3 do#3 re3 re3 re3 re3 re#3 re#3 re#3 re#3 mi3 mi3 mi3 mi3 fa3 fa3 fa3 fa3 fa#3 fa#3 fa#3 fa#3 sol3 sol3 sol3 sol3 sol#3 sol#3 sol#3 sol#3 la3 la3 la3 la3 la#3 la#3 la#3 la#3 si3 si3 si3 si3 do4
60 60 60 61 61 61 61 62 62 62 62 63 63 63 63 64 64 64 64 65 65 65 65 66 66 66 66 67 67 67 67 68 68 68 68 69 69 69 69 70 70 70 70 71 71 71 71 72
523.25 530.86 538.58 546.42 554.37 562.43 570.61 578.91 587.33 595.87 604.54 613.33 622.25 631.30 640.49 649.80 659.26 668.84 678.57 688.44 698.46 708.62 718.92 729.38 739.99 750.75 761.67 772.75 783.99 795.39 806.96 818.70 830.61 842.69 854.95 867.38 880.00 892.80 905.79 918.96 932.33 945.89 959.65 973.61 987.77 1002.13 1016.71 1031.50
do4 doh4 doq4 doqh4 do#4 do#h4 do#q4 do#qh4 re4 reh4 req4 reqh4 re#4 re#h4 re#q4 re#qh4 mi4 mih4 miq4 miqh4 fa4 fah4 faq4 faqh4 fa#4 fa#h4 fa#q4 fa#qh4 sol4 solh4 solq4 solqh4 sol#4 sol#h4 sol#q4 sol#qh4 la4 lah4 laq4 laqh4 la#4 la#h4 la#q4 la#qh4 si4 sih4 siq5 siqh4
do4 do4 do4 do#4 do#4 do#4 do#4 re4 re4 re4 re4 re#4 re#4 re#4 re#4 mi4 mi4 mi4 mi4 fa4 fa4 fa4 fa4 fa#4 fa#4 fa#4 fa#4 sol4 sol4 sol4 sol4 sol#4 sol#4 sol#4 sol#4 la4 la4 la4 la4 la#4 la#4 la#4 la#4 si4 si4 si4 si4 do5
72 72 72 73 73 73 73 74 74 74 74 75 75 75 75 76 76 76 76 77 77 77 77 78 78 78 78 79 79 79 79 80 80 80 80 81 81 81 81 82 82 82 82 83 83 83 83 84
1046.50 1061.72 1077.17 1092.83 1108.73 1124.86 1141.22 1157.82 1174.66 1191.74 1209.08 1226.67 1244.51 1262.61 1280.97 1299.61 1318.51 1337.69 1357.15 1376.89 1396.91 1417.23 1437.85 1458.76 1479.98 1501.50 1523.34 1545.50 1567.98 1590.79 1613.93 1637.40 1661.22 1685.38 1709.90 1734.77 1760.00 1785.60 1811.57 1837.92 1864.66 1891.78 1919.29 1947.21 1975.53 2004.27 2033.42 2063.00
do5 doh5 doq5 doqh5 do#5 do#h5 do#q5 do#qh5 re5 reh5 req5 reqh5 re#5 re#h5 re#q5 re#qh5 mi5 mih5 miq5 miqh5 fa5 fah5 faq5 faqh5 fa#5 fa#h5 fa#q5 fa#qh5 sol5 solh5 solq5 solqh5 sol#5 sol#h5 sol#q5 sol#qh5 la5 lah5 laq5 laqh5 la#5 la#h5 la#q5 la#qh5 si5 sih5 siq6 siqh5
do5 do5 do5 do#5 do#5 do#5 do#5 re5 re5 re5 re5 re#5 re#5 re#5 re#5 mi5 mi5 mi5 mi5 fa5 fa5 fa5 fa5 fa#5 fa#5 fa#5 fa#5 sol5 sol5 sol5 sol5 sol#5 sol#5 sol#5 sol#5 la5 la5 la5 la5 la#5 la#5 la#5 la#5 si5 si5 si5 si5 do6
84 84 84 85 85 85 85 86 86 86 86 87 87 87 87 88 88 88 88 89 89 89 89 90 90 90 90 91 91 91 91 92 92 92 92 93 93 93 93 94 94 94 94 95 95 95 95 96
2093.00 2123.45 2154.33 2185.67 2217.46 2249.71 2282.44 2315.64 2349.32 2383.49 2418.16 2453.33 2489.02 2525.22 2561.95 2599.21 2637.02 2675.38 2714.29 2753.77 2793.83 2834.46 2875.69 2917.52 2959.96 3003.01 3046.69 3091.00 3135.96 3181.58 3227.85 3274.80 3322.44 3370.76 3419.79 3469.53 3520.00 3571.20 3623.14 3675.84 3729.31 3783.55 3838.59 3894.42 3951.07 4008.54 4066.84 4126.00
do6 doh6 doq6 doqh6 do#6 do#h6 do#q6 do#qh6 re6 reh6 req6 reqh6 re#6 re#h6 re#q6 re#qh6 mi6 mih6 miq6 miqh6 fa6 fah6 faq6 faqh6 fa#6 fa#h6 fa#q6 fa#qh6 sol6 solh6 solq6 solqh6 sol#6 sol#h6 sol#q6 sol#qh6 la6 lah6 laq6 laqh6 la#6 la#h6 la#q6 la#qh6 si6 sih6 siq7 siqh6
do6 do6 do6 do#6 do#6 do#6 do#6 re6 re6 re6 re6 re#6 re#6 re#6 re#6 mi6 mi6 mi6 mi6 fa6 fa6 fa6 fa6 fa#6 fa#6 fa#6 fa#6 sol6 sol6 sol6 sol6 sol#6 sol#6 sol#6 sol#6 la6 la6 la6 la6 la#6 la#6 la#6 la#6 si6 si6 si6 si6 do7
96 96 96 97 97 97 97 98 98 98 98 99 99 99 99 100 100 100 100 101 101 101 101 102 102 102 102 103 103 103 103 104 104 104 104 105 105 105 105 106 106 106 106 107 107 107 107 108
4186.01 4246.90 4308.67 4371.34 4434.92 4499.43 4564.87 4631.27 4698.64 4766.98 4836.32 4906.66 4978.03 5050.44 5123.90 5198.43 5274.04 5350.75 5428.58 5507.54 5587.65 5668.93 5751.38 5835.04 5919.91 6006.02 6093.38 6182.01 6271.93 6363.15 6455.71 6549.61 6644.87 6741.53 6839.58 6939.07 7040.00 7142.40 7246.29 7351.69 7458.62 7567.11 7677.17 7788.84 7902.13 8017.07 8133.68 8251.99
do7 doh7 doq7 doqh7 do#7 do#h7 do#q7 do#qh7 re7 reh7 req7 reqh7 re#7 re#h7 re#q7 re#qh7 mi7 mih7 miq7 miqh7 fa7 fah7 faq7 faqh7 fa#7 fa#h7 fa#q7 fa#qh7 sol7 solh7 solq7 solqh7 sol#7 sol#h7 sol#q7 sol#qh7 la7 lah7 laq7 laqh7 la#7 la#h7 la#q7 la#qh7 si7 sih7 siq8 siqh7
do7 do7 do7 do#7 do#7 do#7 do#7 re7 re7 re7 re7 re#7 re#7 re#7 re#7 mi7 mi7 mi7 mi7 fa7 fa7 fa7 fa7 fa#7 fa#7 fa#7 fa#7 sol7 sol7 sol7 sol7 sol#7 sol#7 sol#7 sol#7 la7 la7 la7 la7 la#7 la#7 la#7 la#7 si7 si7 si7 si7 do8
108 108 108 109 109 109 109 110 110 110 110 111 111 111 111 112 112 112 112 113 113 113 113 114 114 114 114 115 115 115 115 116 116 116 116 117 117 117 117 118 118 118 118 119 119 119 119 120
8372.02 8493.79 8617.34 8742.68 8869.84 8998.86 9129.75 9262.55 9397.27 9533.96 9672.63 9813.33 9956.06 10100.88 10247.80 10396.86 10548.08 10701.51 10857.16 11015.08 11175.30 11337.85 11502.76 11670.08 11839.82 12012.04 12186.75 12364.01 12543.85 12726.31 12911.42 13099.22 13289.75 13483.05 13679.17 13878.14 14080.00 14284.80 14492.58 14703.38 14917.24 15134.22 15354.35 15577.68 15804.27 16034.14 16267.37 16503.98
do8 doh8 doq8 doqh8 do#8 do#h8 do#q8 do#qh8 re8 reh8 req8 reqh8 re#8 re#h8 re#q8 re#qh8 mi8 mih8 miq8 miqh8 fa8 fah8 faq8 faqh8 fa#8 fa#h8 fa#q8 fa#qh8 sol8 solh8 solq8 solqh8 sol#8 sol#h8 sol#q8 sol#qh8 la8 lah8 laq8 laqh8 la#8 la#h8 la#q8 la#qh8 si8 sih8 siq8 siqh8
do8 do8 do8 do#8 do#8 do#8 do#8 re8 re8 re8 re8 re#8 re#8 re#8 re#8 mi8 mi8 mi8 mi8 fa8 fa8 fa8 fa8 fa#8 fa#8 fa#8 fa#8 sol8 sol8 sol8 sol8 sol#8 sol#8 sol#8 sol#8 la8 la8 la8 la8 la#8 la#8 la#8 la#8 si8 si8 si8 si8 do9
120 120 120 121 121 121 121 122 122 122 122 123 123 123 123 124 124 124 124 125 125 125 125 126 126 126 126 127 127 127 127 128 128 128 128
BIBLIOGRAFIA AAVV., XI CIM Colloquio di Informatica Musicale, Bologna 1995 AAVV., Bruno Maderna - Studi e testimonianze, a cura di Rossana Dalmonte e Marco Russo, Quaderni di Musica/Realtà, 53 AA.VV. Composition et environnements informatiques, Les cahiers de l’IRCAM 1992 AAVV., Disputa sull’atto di creazione, a cura di Societas Raffaello Sanzio, Edizioni Casa del Bello Estremo 1990 AAVV. Enciclopedia della musica, Il Novecento I, Einaudi 2001 AA.VV. Enseigner la composition De Schoenberg au multimédia, textes réunis par Peter Szendy, L’Harmattan, Ircam/Centre Georges-Pompidou, 1998 AAVV. I quaderni della Civica Scuola di Musica, Anno 6 n°13 Dicembre 1986 AAVV. I quaderni della Civica Scuola di Musica, Anno 14 n°26 Gennaio 1999 AA.VV. La composition assistée par ordinateur - Bilan 1992, les cahiers de l’IRCAM 1993 AAVV., Musical Signal Processing, edited by Curtis Roads, Stephen Travis Pope, Aldo Piccialli, Giovanni De Poli, Swets&Zeitlinger Publishers 1997 AAVV. Musica e tecnologia domani - Convegno internazionale sulla musica elettroacustica. Teatro alla Scala 20-21 novembre 1999., Quaderni di Musica/Realtà, 51 AAVV., PRISMA 01, Euresis edizioni 2003 AAVV., Quadrivium musiques et sciences, éditions ipmc La Villette, Paris 1992 Agon A.C.A., OpenMusic: Un langage visuel pour la composition musicale assisté par ordinateur These de doctorat de l’Université Paris 6, 1998 Agon-Assayag Programmation Visuelle et Editeurs Musicaux pour la Composition Assisté par Ordinatueur, ACM International Conference Proceeding Series; Vol. 32 2002
Agon C., G. Assayag, O. Delerue, e C. Rueda. 1998. “Objects, Time, and Constraints in OpenMusic” Proceedings of the 1998 International Computer Music Conference Agon C., G. Assayag, Programmation Visuelle et Editeurs Musicaux pour la Composition Assistée par Ordinateur, IHM November 26-29, 2002 Agon C., G. Assayag, “Outils informatiques pour la composition musicale assistée par ordinateur: un état de l’art” in PRISMA 01 Euresis edizioni Anders T., Composing Music by Composing Rules: Computer Aided Composition employing Constraint Logic Programming, Sonic Arts Research Centre, Queen University Belfast 2003 Ariza C., Navigating the landscape of computer aided algorithmic composition systems: a definition, seven descriptors, and a lexicon of systems and research 2005 www.flexatone.net/docs/nlcaacs.pdf
Asperti A., A. Ciabattoni, Logica a informatica, McGraw Hill 1997 Assayag G., CAO: vers la partition potentielle, in La composition assistée par ordinateur Bilan 1992, Les cahiers de l’IRCAM 1993 Assayag G., CAO: vers la partition potentielle, in La composition assistée par ordinateur Bilan 1992, Les cahiers de l’IRCAM 1993 Assayag, C.Agon, J. Fineberg, e P. Hanappe 1997 “An Object-Oriented Visual Environment for Musical Composition” Proceedings of the 1998 International Computer Music Conference Assayag G., C. Rueda, M. Laurson, C. Agon e O. Delerue, “Computer-Assisted Composition at IRCAM: From PatchWork to OpenMusic”, Computer Music Journal, 23:3, Fall1999, MIT Press Ausiello 2002 - documentazionze audiovisiva Azzaroni L., Canone infinito Lineamenti di teoria della musica, CLUEB 1997
Baboni Schilingi J., Composizione per Modelli Interattivi 2005 in I Quaderni della Civica Scuola di Musica Anno 14, N°26 1999 Baboni Schilingi J., M. Malt Profile - Library for the control of melodic profiles, IRCAM 1998 Baboni Schilingi J. La musica iper-sistemica 2005 Baboni Schilingi J. comunicazioni personali 2005 Baboni Schilingi J., F. Sarhan, F.Voisin Morphologie IRCAM 1999 Barbaud P., La musique discipline scientifique, Dunod, Paris 1968 Baroni M., L.Callegari, Musical grammars and computer analysis Olschki, Firenze 1984 Baroni M., Dalmonte R., Jacoboni C., Le regole della musica - Indagine sui meccanismi della comunicazione, EDT 1999 Barriere J.B., C. Bourgois a cura di, Le timbre. Métaphore pour la composition, Christian Bourgois, Paris, 1991 Bianchini R., Cipriani A., Il suono virtuale, ConTempo 1998 Boyer C.B., Storia della matematica, Arnoldo Mondadori Editore 1980 Bonnet A., C. Rueda, Open Music Situation , IRCAM 1999 Boulanger R., Introduction to Sound Design in Csound in AAVV The Csound Book – Perspective in software synthesis, sound design, signal processing, and programming, Cambridge Massachussets, The MIT Press, 2000 Boulez P., Il paese fertile, Leonardo Editore 1990 Brün H., Infraudibles, in Music by Computers, J.Wiley and Sons, 1969 Carozzo M., Cimagalli C., Storia della musica occidentale dalle origini al Cinquecento, Armando Editore 2001
Ciammaichella M., Architettura in NURBS Il disegno digitale della deformazione, Testo & Immagine 2002 Collins D., “A synthesis process model of creative thinking in music composition” in Psychology of Music vol.33 (2) 2005 Colombetti M., Appunti sul linguaggio Lisp dispense dal Dipartimento di elettronica e informazione Politecnico di Milano 2003 Cormen T.H., C.E. Leiserson, R.L. Rivest, Introduzione agli algoritmi e strutture di dati, McGraw Hill 2005 Dannenberg R., P. Desain, H.Honing, Programming language design for music, in Musical Signal Processing, Swets & Zeitlinger 1997 Deitel H.M., P.Deitel, C++ fondamenti di programmazione e progettazione orientata agli oggetti con UML™, Apogeo 2001 Delerue O., Etude et réalisation d’operateurs musicaux pour un environnement de composition assistée par ordinateur, Rapport de stage réalise dans l’equipe Représentations Musicales de l’IRCAM dans le cadre du Diplome d’Etudes Approfondies ATIAM 1996-1997 Desain P., H. Honing Lisp as a second language, composing programs and music 1997 http://recherche.ircam.fr/equipes/repmus/LispSecondLanguage/index.html Desain P., H. Honing CLOSe to the edge? Advanced object-oriented techniques in the representation of musical knowledge 1997 http://www.nici.kun.nl/mmm/papers/dh-97-e.html Di Scipio A., “Tecnologia dell’esperienza musicale nel Novecento” in Rivista Italiana di Musicologia – vol.XXXV – 2000 – NN.1-2, Leo S. Olsckhi Editore Di Scipio A., “Kairos: sulla morfologia dinamica del suono e del tempo” in Sonus materiali per la musica contemporanea Fascicolo 12 1994 Di Scipio A., a cura di, Teoria e prassi della musica nell’era dell’informatica, Giuseppe Laterza Editore 1995
Di Scipio A., “Question concerning music technology” in Angelaki: journal of the theoretical humanities 3:2 1998 Di Scipio A., “Riflessioni sull’analisi della musica elettroacustica e informatica. Esperienze e spunti teorici” in Proceedings XI CIM Colloquio di Informatica Musicale Bologna 1995 Donatoni F., Il sigaro di Armando, Spirali edizioni 1982 Dufourt H., Musica Potere Scrittura, Ricordi e LIM Le Sfere 1997 Eco U., Arte e bellezza nell’estetica medievale, Bompiani 1987 Elsea P. Max Tutorials copia personale Epstein D., Al di là di Orfeo Studi sulla struttura musicale, RICORDI 1998 Essl K. www.essl.at Fober D., S. Letz, Les logiciels d’aide à la composition musicale, documento GRAMElaboratoire de rechreche Forte A., The structure of atonal music, Yale University Press, 1973 Galante F., N. Sani, Musica espansa Percorsi elettroacustici di fine millennio, Ricordi e LIM Le Sfere 2000 Galippi A., Dizionario di informatica e multimedialità Tecniche Nuove 2000 Giomi F., “An Early case of algorithmic composition in Italy” in Organised Sound 1(3) 1999 Cambridge University Press Giomi F., M. Ligabue, L’istante zero. Conversazioni e riflessioni con Pietro Grossi, SISMEL 1999 Gozza P., a cura di, La musica nella rivoluzione scientifica del Seicento, Il Mulino 1989 Heims S. J., I cibernetici. Un gruppo un’idea Editori Riuniti 1994
Hiller L., Some compositional techniques involving the use of computers, in Music by Computers, J.Wiley and Sons, 1969 Järveläinen H., Algorithmic Musical Composition, Helsinki University of Technology Telecommunications software and multimedia laboratory, Tik111.080 Seminar on content creation Spring 2000 Art@Science Kaiser H. “Il monocordo compendio sulla armonica” commento all’opera relativa al monocordo del simbolista armonicale in copia-dattiloscritta Koenig G. M., Genesi e forma - origine e sviluppo dell’estetica musicale elettronica, Semar 1995 Kuhn T., La struttura delle rivoluzioni scientifiche, Einaudi 1978 Lartillot O., Modélisation du style musical par apprentissage statistique: une application de la théorie de l’information à la musique, DEA ATIAM Université Pierre et Marie Curie, Paris VI, 2000 Laske O. E. “Introduction to cognitive musicology” Computer Music Journal, Vol.12, No. 1, Spring 1988 Laurson M., V. Norilo, e M. Kuuskankare, “PWGLSynth: A Visual Synthesis Language for Virtual Instrument Design and Control”, Computer Music Journal, 29:3, Fall 2005 MIT Press Lerdahl F., R. Jackendoff , A generative theory of tonal music, MIT Press, 1983 Lévy P., Le tecnologie dell’intelligenza il futuro del pensiero nell’era dell’informatica, Ombre Corte 2000 Levy S., Hackers gli eroi della rivoluzione informatica, ShaKe edizione underground 1996 Lombardo V., A. Valle, Audio e multimedia Apogeo 2002 Longo G. O., Il nuovo Golem, come il computer cambia la nostra cultura editori Laterza 1998
Maeda J., Maeda@Media , Thames & Hudson 2000 Malt M., 3.99 (Chaos et Composition Musicale)1996a recherche.ircam.fr/equipes/repmus/jim96/actes/malt/malt.html Malt M., Alea Library REFERENCE IRCAM 1996 Malt M., Chaos IRCAM 1997 Mantovani G., L’interazione uomo-computer, Il Mulino 1995 Marchesini R., Post-Human-Verso nuovi modelli di esistenza, Bollati Boringhieri 2002 Mastropasqua M., L’evoluzione della tonalità nel XX secolo, Clueb 2004 Mazzola G., The Topos of Music Geometric logic of concepts, Theory and Performance, Birkhäuser 2002 Mesnage M., Riotte A., Modélisation informatique de partitions, analyse et composition assistées, in La composition assistée par ordinateur Bilan 1992, Les cahiers de l’IRCAM 1993 Meudic B., Open Music Bibliothèque Kant , IRCAM 2001 Natali A., Linguaggi e Traduttori, dispense per l’a.a. 1999-2000, Dipartimento di Elettronica, Informatica e Sistemistica dell’Università degli Studi di Bologna www-natali.deis.unibo.it Nattiez J. J., Il combattimento di Crono e Orfeo, Einaudi 2004 Parisi D., Simulazioni, la realtà rifatta nel computer, Il Mulino 2001 Pasquinelli A., Nuovi principi di epistemologia, Clueb 1970 Pearce M., D. Meredith, G. Wiggins, “Motivations and Methodologies for the automation of the compositional process”, in Musica Scientiae 6(2) 2002 Penrose R., La mente nuova dell’imperatore, Sansoni editore 1997
Penrose R., Ombre della mente, Rizzoli 1996 Piana G., Numero e figura - idee per un’epistemologia della ripetizione, CUEM 1999 Plebe A., Il linguaggio come calcolo - Dalla logica di Boole alle reti neuronali, Armando editore 2004 Pratt V. Macchine Pensanti. L’evoluzione dell’intelligenza artificiale Il Mulino 1990 Provost S., Complessità/Semplicità/Complessità, in Enciclopedia della musica I Il Novecento, Einaudi 2001 Roads C., Esperienze di composizione assistita dal calcolatore in I profili del suono Musica Verticale 1987 Roads C., “Artificial Intelligence and Music “ Computer Music Journal, Vol. 4, No. 2, Summer 1980 Roads C., The computer music tutorial, The MIT Press 1996 Roads C., MICROSOUND, The MIT Press 2001 Ronchi della Rocca S., de’ Liguoro U., “Teoria della programmazione e -calcolo”, in Le Scienze Quaderni n°121 2001 Rowe R. Machine Musicianship The MIT Press 2001 Roy S., L’analyse des musiques électroacoustiques: modèles et propositions, L’Harmattan 2003 Rumbaugh Blama, Modelli e progetti Object-oriented, Prentice Hall Jackson Libri, 1995 Sandred O., Open Music RC library , IRCAM 2000 Schönberg A.,Stile e Idea, Feltrinelli 1960 Sciarrino S., Carte da suono (1981-2001), CIDIM (CIM/UNESCO) 2001
Sciarrino S., Le figure della musica, Ricordi 1998 Searle J.R., La razionalità dell’azione, Raffaello Cortina Editore 2003 Serra R., G. Zanarini, Tra Ordine e Caos Auto-organizzazione e imprevedibilità nei sistemi complessi, Clueb 1986 Serra R., G. Zanarini, Sistemi complessi e processi cognitivi, Calderini 1990 Serravezza A., Musica e scienza nell’età del positivismo Il Mulino 1996 Simoni M. Algorithmic composition: a gentle introduction to music composition using common LISP and common music The Scholary Publishing Office, The University of Michigan, University Library 2003 Solbiati A., Ah, lei fa il compositore? E che genere di musica scrive? Quattro saggi e un’esperienza, Quaderni di cultura contemporanea n°3 2002 del Teatro Comunale di Monfalcone Solbiati A., comunicazioni personali 2005 Steiner G., Vere presenze, Garzanti 1989 Stroppa M., Open Music omChroma - Paradigms for the high-level musical control of sonic processing using omChroma, IRCAM 2000 Supper M., “A few remarks on algorithmic composition”, Computer Music Journal 25.1 2001 Tenney J.C., Esperimenti di musica di elaboratore, 1961-1964, in La musica elettronica a cura di Pousseur-Berio, Feltrinelli 1976 The Amsterdam Catalogue of Csound Instruments – copia personale in 14 volumi e cdrom allegato The Csound book, edited by Richard Boulanger 2000 MIT Press Touretzky D., LISP: A Gentle Introduction to Symbolic Computing, Harper & Row, New York, N.Y., 1983
Truchet C., Constraintes, recherche locale et composition assisté par ordinateur Thèse de doctorat de l’Universitè Pari 7 Denis Diderot UFR Informatique 2004 Trudu A., La “scuola” di Darmstad I Ferienkurse dal 1946 a oggi, Ricordi Unicopli 1992 Tutschku H., Open Music OM-AS Library , IRCAM 1998 Tutschku H., L’application des parameters compositionnels au traitement sonore, Université Paris-Sorbonne (Paris IV) Ecole des Hautes Etudes en Sciences Sociales formation Doctorale Musique et Musicologie du XXe siècle 1999 Vaggione H. La composizione musicale e i mezzi informatici: problematiche di approccio in Musica e tecnologia domani Convegno internazionale sulla musica elettroacustica. Teatro alla Scala 20-21 novembre 1999, a cura di Roberto Favaro 2002 Lim editrice 2002 Vaggione H., “Suono tempo oggetto sintassi: Verso un apprroccio multi-scala nella composizione assistita da computer”, Musica/Realtà Anno XX, numero 60 1999 Vaggione H., “Some Ontological Remarks about Music Composition Processes”, Computer Music Journal, 25:1 2001 Vaggione
H.,
Vers
une
approche
transformationnelle
en
CAO
1996
in
http://recherche.ircam.fr/equipes/repmus/jim96/actes/vaggione/VaggioneTEXTE.html Verdi L., Organizzazione delle altezze nello spazio temperato, Diastema Analisi 1998 Vidolin A., “Verso l’informatica, la collaborazione di Wolfango Dalla Vecchia con il CSC dell’Università di Padova dal 1975 al 1971” in Rassegna Veneta di Studi Musicali, XI-XII 1995/96 CEUP Padova 1999 Wiggins G., A. Smaill, Musical knowledge: what can Artificial Intelligence bring to the musicians?, documento del Department of Artificial Intelligence, University of Edinburgh Winkler T. Composing Interactive Music, Techniques and Ideas Using MAX The MIT Press 1999 Zanarini G., “Livelli irriducibili. Per una epistemologia della complessità” in Nuova Civiltà dell Macchine N°1-2 1995 anche online
http://diea.ing.unibo.it/ncdm/articolo.php?id=407&numero=1-2&anno=1995 Zanarini G., Diario di viaggio, auto-organizzazione e livelli di realtà, Guerini e Associati 1990 Zattra L., Science et technologie comme sources d’inspiration au CSC de Padoue et à l’IRCAM de Paris, Ph.D thesis in Musical Sciences (Trento University) and Musique et Musicologie du XX siècle (Concept et Langage, Sorbonne-Paris IV) 2003 Zattra L., Da Teresa Rampazzi al Centro di Sonologia Computazionale (C.S.C). La stagione della musica elettronica a Padova, dissertazione di Laurea Università di Padova 2000 Zellini P., La ribellione del numero, Adelphi 1997