Sei sulla pagina 1di 300

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: Jean-
Baptiste 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.

8
Editors

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.

10 11
MIDI piano-roll con l’utilizzo di MidiShare (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
13
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.
 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.

 OMMiel per l’analisi musicale

 OM2pt esportazione della maquette a ProTools 17.

 OMPitchfield e OMTimepack composizione basata sulla teoria di Allen Forte.

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

18
 OMZN formalizzazione algebrica delle strutture musicali.

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 auto-
organizzazione, 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 post-
seriale (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.
32
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
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
Alonzo Church (cfr.Cap. 2 § 2.1.2.1)
37
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-pratico-
didatta-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
40
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)
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:

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

41
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++ JAVA
ADA PROLOG
VISICALC SMALLTALK
FORTRAN77 LISP
PASCAL
SIMULA67
LISP
APL
ALGOL
COBOL LISP
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 stanno


progressivamente occupando oggi parti sempre più ampie dell’information space
connesso ai moderni linguaggi di programmazione…e l’uso di linguaggio ad oggetti
induce il programmatore a seguire, in modo più o meno consapevole, principi primari
quali modularità, incapsulamento43…” (ibidem)

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
Si intende qui conoscenza come sinonimo di scienza nel senso più lato del termine.
48
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 general-
purpose 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 extra-


musicale, 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
Per una biografia completa www.csounds.com/mathews
56
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 MUSIC4B (1965)


MUSIC10(1966, J.Chowning – J.Moorer) 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 (sample rate) o frequenza di campionamento audio


Kr (controlo rate) o frequenza di controllo
Ksmps numero intero che rappresenta il rapporto tra sr e kr
Nchnls (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 10 0 0 0 0 0 1 ;(fond.+VII arm.)
f1 27 4096 10 0 0 0 0 0 0 1 ;(solo VII arm.)
i1 0 2
i1 3 2
i1 6 2
i1 9 2
i1 12 2
i1 15 2
i1 18 2
i1 21 2
i1 24 2
i1 27 2

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 dinamica dei parametri sonori – genesi della


trasformazione.

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.
75
E’possibile parlare di famiglie spettrali quando queste mantegno caratteristiche psicoasutiche tali da
risultare inalterate nel tempo.
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 “f-
statement” 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 p2 p3 p4 p5
i1 0 2 20000 110 ;suona una nota a partire da 0 secondi, della durata di due
;secondi con ampiezza 20000 e freq. fondamentale 110 Hz
i1 3 2 8000 110 ;suona una nota a 3 secondi dall'inizio, con durata 2 sec.,
;ampiezza 8000 e freq. fondamentale 110 Hz
i1 6 2 9000 440

i1 9 2 15000 440

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 p-
field 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 ; strumento 1 nota di 3 secondi frequenza 222 Hz


i2 4 3 10000 222 ; strumento 2 nota di 3 secondi frequenza 222 Hz
i1 8 3 8000 800 ; strumento 1 nota di 3 secondi frequenza 800 Hz
i2 12 3 8000 800 ; 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 informatico-
elettronica81, 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.
81
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.
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 ; (frequenza di campionamento)
kr = 4410 ; (frequenza di controllo)
ksmps = 10 ; (rapporto sr/kr)
nchnls = 1 ; (numero di canali 1)

instr 1 ; (strumento 1)

kglis line 220,p3,440 ;codice operativo, line, segmento che va da 220 a 440
;nel tempo p3 (durata della nota). I risultati affluiscono
;nella variabile di controllo kglis
a1 oscil p4,kglis,1 ; opcode oscil, ampiezza p4, frequenza espressa dai dati
; di kglis, funzione 1 (che troveremo nella score). I risultati
;affluiscono nella variabile audio a1

out a1 ; scrittura su disco dei dati contenuti in a1


endin

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 0,p3,10000 ;segmento che va da 0 a 10000 nel tempo p3.


;I risultati affluiscono nella variabile di controllo
;kenv
a2 oscil kenv,220,1 ;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
Commento di Grossi riportato in www.luxflux.org/n3/partiture1.htm
87
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
Per la mostra di architettura “La casa abitata” a Palazzo Strozzi nel 1965.
93
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
Sulla storia del CSC di Padova si veda (Zattra 2000).
95
Il testo della convenzione è riportato alla nota 145 della dissertazione di laurea di (Zattra 2000).
96
Antropologia, intelligenza artificiale, psicologia cognitiva, linguistica, musicologia, neuroscienze,
psicoacustica e semiotica.
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 psicologico-
cognitivista (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 allo-
referential (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.
99
Si ricorda a questo punto che l’equipe di ricerca dell’IRCAM che ha sviluppato OpenMusic prende il nome
di Representation Musicales.
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/
9
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
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))
2
da cui 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 1999-
2000)
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 read-
eval-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 ;espressione atomica che denota un valore


1
? pi ;espressione atomica che denota un simbolo
3.141592653589793

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) ;espressioni composte da simbolo e valori


6
? (* 5 5 6.3)
157.5
?

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 a aBc R32v ciao


Numeri 75 -2 +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 Atomi

Sequenza di Lista vuota Simboli Numeri


S-espressioni (NIL)

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) ; valore Minimo


5

(abs 7) ; valore assoluto


7

(expt 3 3) ; elevamento a potenza


27

(sqrt 25) ; radice quadrata


5

(round 1.25) ; arrotondamento e differenza


1
0.25

(round 1.75) ; arrotondamento e differenza


2
-0.25

(truncate 14 4) ; divisione tra interi e resto


3
2

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) ; verifica che l’argomento=0
T

(zerop 5)
NIL

(eql -6 -6) ; verifica gli argomenti siano uguali


T

(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 <nome funzione-applicazione> (<lista parametri>)


(<corpo funzione-applicazione>)

esempio: voglio creare una funzione SOMMASQRT che automaticamente calcola la


radice quadrata della somma di due valori.

(defun sommasqrt (x y) ; definisco la funzione


(sqrt (+ (* x) (* y))))
SOMMASQRT

(sommasqrt 17 8) ; valuto la mia funzione


5

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.

? (random 6)
4
? (random 6)
0
? (random 6)
3
? (random 6)
5
? (random 6)
4
? (random 6)
0
? (random 6)
4

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 <nome funzione-applicazione> (<lista parametri>)
(<corpo funzione-applicazione>)

Esempio: creare la funzione triade minore di la (la-min-chord)

(defun la-min-chord () ; definisco la funzione


(list ‘la ‘do ‘mi)
la-min-chord ; valutazione

(la-min-chord) ; valuto la mia funzione


(LA DO MI)

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 <TEST-CLAUSE> <T-CONSEQUENT> <NIL-CONSEQUENT>)

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

OR
Forma 1 Forma 2 Valutazione
T T T
T F T
F T T
F F F

? (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 (<espressione1> <azione1>)


(<espressionee> <azione2>)
.
.
.
(<espressioneN> <azioneN>)

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-range-
with-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 <KEY-FORM>
(<KEY-1> <CONSEQUENT-1A> <CONSEQUENT-1B>…<CONSEQUENT-
1Z>)
(<KEY-2> <CONSEQUENT-2A> <CONSEQUENT-2B>…<CONSEQUENT-
2Z>)
.
.
.
(<KEY-N> <CONSEQUENT-NA> <CONSEQUENT-NB>…<CONSEQUENT-
NZ>))

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: Persone Oggetto 1 della classe Persone


Attributi: Nome Nome: Marco
Cognome Cognome: Troni
Codice fisc Codice fisc: mrctr009234234p

Oggetto 2 della classe Persone


Nome: Giulia
Cognome: Barolo
Codice fisc: Gubr23984092384o

Classe: Rettangolo Oggetto 1 della classe Rettangolo


Attributi: Lunghezza Lunghezza: 8
Larghezza Larghezza: 4
Colore area Colore area: 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: Persone Oggetto 1 della classe Persone


Attributi: Nome Nome: Marco
Cognome Cognome: Troni
Codice fisc Codice fisc: mrctr009234234p
Oggetto 2 della classe Persone
Nome: Giulia
Cognome: Barolo
Codice fisc: Gubr23984092384o
Metodi: modifica
cancella

Classe: Rettangolo Oggetto 1 della classe Rettangolo


Attributi: Lunghezza Lunghezza: 8
Larghezza Larghezza: 4
Colore area Colore area: giallo

Metodi: modifica
ruota
cancella
sposta

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
Non è necessario salvare dal momento in cui un oggetto è creato nel workspace.
26
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 esprime l’unità di misura delle altezze in OM cioè midicents (MIDI


*100).
- vel valore della velocity tra 0 e 127.
- dur valore della durata in millisecondi
- chan 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 C

REST

- dur durata del silenzio in millisecondi


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 valori midicents
- lvel valori velocity
- loffset
- ldur una lista di durate
- lchan 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.

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 lista multipla: rappresenta una particolare modalità di scrittura


ritmica
- chords 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 lista di valori midicents


- lOnset lista con tempi di attacco di ciascun evento in millisecondi
- lDur lista di durate
- lVel lista delle velocity (0-127)
- lOffset
- lChan lista di canali MIDI
- ilegato 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 nth-
number ed essendo

NTH-RANDOM list
[generic-function]
returns a randomly chosen element from <list>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 nth-
number sulla lista definita precedentemente

? OM->(7200 6700 6400 6000)


? OM->6400
? OM->7200
? OM->6700
? OM->6700
? OM->7200
?

L’oggetto repeat-n

REPEAT-N self num


[generic-function]
repeats n times the evaluation of <self> 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
6000 + 200 6200
6200 + 200 6400
6400 + 100 6500
6500 + 200 6700
6700 + 200 6900
6900 + 200 7100
7100 + 100 7200
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 = -100
6900 – 7400 = -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
7500 + 100 7600
7600 + 500 8100
8100 + 100 8200
8200 + 100 8300
8300 + 100 8400
8400 + 200 8600
8600 + 900 7700
7700 + 100 7800
7800 + 200 8000
8000 + 500 8500
8500 + 600 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 da midicents a


frequenza Hz:

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 della fondamentale per ogni valore compreso in


(E):

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 harmonic series per una serie di 40


armonici superiori:

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 om-
random. 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 om-
random 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 om-
random 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 da 61 a 85
f da 86 a 100
ff da 101 a 115
fff 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 metrico-
ritmiche 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:

(? ((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 iterative-
funzionali 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:

? 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 (by-
measure). 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 figura di terzina di crome


b=121 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 2 3 4 5 6 7 8 9 10

J.S.Bach 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

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 iper-
sistemica”, 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.

G A B
D E F
C
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 Midi Pitch Frequency Midi Pitch Frequency Midi Pitch Frequency

0: C -2 - 12: C -1 - 24: C0 32.70 36: C1 65.40


1: C# -2 - 13: C# -1 - 25: C#0 34.64 37: C#1 69.29
2: D -2 - 14: D -1 - 26: D0 36.70 38: D1 73.41
3: Eb -2 - 15: Eb -1 - 27: Eb0 38.89 39: Eb1 77.78
4: E -2 - 16: E -1 - 28: E0 41.20 40: E1 82.40
5: F -2 - 17: F -1 - 29: F0 43.65 41: F1 87.30
6: F# -2 - 18: F# -1 - 30: F#0 46.24 42: F#1 92.49
7: G -2 - 19: G -1 - 31: G0 48.99 43: G1 97.99
8: G# -2 - 20: G# -1 - 32: G#0 51.91 44: G#1 103.82
9: A -2 - 21: A -1 27.50 33: A0 55.00 45: A1 110.00
10: Bb -2 - 22: Bb -1 29.13 34: Bb0 58.27 46: Bb1 116.54
-11: B -2 - 23: B -1 30.86 35: B0 61.73 47: B1 123.47

Midi Pitch Midi Pitch Frequency Midi Pitch Frequency Midi Pitch Frequency

48: C2 130.81 60: C3 261.62 72: C4 523.25 84: C5 1046.50


49: C#2 138.59 61: C#3 277.18 73: C#4 554.36 85: C#5 1108.73
50: D2 146.83 62: D3 293.66 74: D4 587.32 86: D5 1174.65
51: Eb2 155.56 63: Eb3 311.12 75: Eb4 622.25 87: Eb5 1244.50
52: E2 164.81 64: E3 329.62 76: E4 659.25 88: E5 1318.51
53: F2 174.61 65: F3 349.22 77: F4 698.45 89: F5 1396.91
54: F#2 184.99 66: F#3 369.99 78: F#4 739.98 90: F#5 1479.97
55: G2 195.99 67: G3 391.99 79: G4 783.99 91: G5 1567.98
56: G#2 207.65 68: G#3 415.30 80: G#4 830.60 92: G#5 1661.21
57: A2 220.00 69: A3 440.00 81: A4 880.00 93: A5 1760.00
58: Bb2 233.08 70: Bb3 466.16 82: Bb4 932.32 94: Bb5 1864.65
59: B2 246.94 71: B3 493.88 83: B4 987.76 95: B5 1975.53

Midi Pitch Frequency Midi Pitch Frequency Midi Pitch Frequency

96: C6 2093.00 120: C8 8372.02


108: C7 4186.01
97: C#6 2217.46 121: C#8 8869.84
109: C#7 4434.92
98: D6 2349.31 122: D8 9397.27
110: D7 4698.64
99: Eb6 2489.01 123: Eb8 9956.06
111: Eb7 4978.03
100: E6 2637.02 124: E8 10548.08
112: E7 5274.04
101: F6 2793.82 125: F8 11175.30
113: F7 5587.65
102: F#6 2959.95 126: F#8 11839.82
114: F#7 5919.91
103: G6 3135.96 127: G8 12543.85
115: G7 6271.93
104: G#6 3322.43 116: G#7 6644.87
105: A6 3520.00 117: A7 7040.00
106: Bb6 3729.31 118: Bb7 7458.62
107: B6 3951.06 119: B7 7902.13
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 do-1 32.70 do0 do0 24 65.41 do1 do1 36
16.59 doh-1 33.18 doh0 do0 24 66.36 doh1 do1 36
16.83 doq-1 33.66 doq0 do0 24 67.32 doq1 do1 36
17.08 doqh-1 34.15 doqh0 do#0 25 68.30 doqh1 do#1 37
17.32 do#-1 34.65 do#0 do#0 25 69.30 do#1 do#1 37
17.58 do#h-1 35.15 do#h0 do#0 25 70.30 do#h1 do#1 37
17.83 do#q-1 35.66 do#q0 do#0 25 71.33 do#q1 do#1 37
18.09 do#qh-1 36.18 do#qh0 re0 26 72.36 do#qh1 re1 38
18.35 re-1 36.71 re0 re0 26 73.42 re1 re1 38
18.62 reh-1 37.24 reh0 re0 26 74.48 reh1 re1 38
18.89 req-1 37.78 req0 re0 26 75.57 req1 re1 38
19.17 reqh-1 38.33 reqh0 re#0 27 76.67 reqh1 re#1 39
19.45 re#-1 38.89 re#0 re#0 27 77.78 re#1 re#1 39
19.73 re#h-1 39.46 re#h0 re#0 27 78.91 re#h1 re#1 39
20.02 re#q-1 40.03 re#q0 re#0 27 80.06 re#q1 re#1 39
20.31 re#qh-1 40.61 re#qh0 mi0 28 81.23 re#qh1 mi1 40
20.60 mi-1 41.20 mi0 mi0 28 82.41 mi1 mi1 40
20.90 mih-1 41.80 mih0 mi0 28 83.61 mih1 mi1 40
21.21 miq-1 42.41 miq0 mi0 28 84.82 miq1 mi1 40
21.51 miqh-1 43.03 miqh0 fa0 29 86.06 miqh1 fa1 41
21.83 fa-1 43.65 fa0 fa0 29 87.31 fa1 fa1 41
22.14 fah-1 44.29 fah0 fa0 29 88.58 fah1 fa1 41
22.47 faq-1 44.93 faq0 fa0 29 89.87 faq1 fa1 41
22.79 faqh-1 45.59 faqh0 fa#0 30 91.17 faqh1 fa#1 42
23.12 fa#-1 46.25 fa#0 fa#0 30 92.50 fa#1 fa#1 42
23.46 fa#h-1 46.92 fa#h0 fa#0 30 93.84 fa#h1 fa#1 42
23.80 fa#q-1 47.60 fa#q0 fa#0 30 95.21 fa#q1 fa#1 42
24.15 fa#qh-1 48.30 fa#qh0 sol0 31 96.59 fa#qh1 sol1 43
24.50 sol-1 49.00 sol0 sol0 31 98.00 sol1 sol1 43
24.86 solh-1 49.71 solh0 sol0 31 99.42 solh1 sol1 43
25.22 solq-1 50.44 solq0 sol0 31 100.87 solq1 sol1 43
25.58 solqh-1 51.17 solqh0 sol#0 32 102.34 solqh1 sol#1 44
25.96 sol#-1 51.91 sol#0 sol#0 32 103.83 sol#1 sol#1 44
26.33 sol#h-1 52.67 sol#h0 sol#0 32 105.34 sol#h1 sol#1 44
26.72 sol#q-1 53.43 sol#q0 sol#0 32 106.87 sol#q1 sol#1 44
27.11 sol#qh-1 la-1 21 54.21 sol#qh0 la0 33 108.42 sol#qh1 la1 45
27.50 la-1 la-1 21 55.00 la0 la0 33 110.00 la1 la1 45
27.90 lah-1 la-1 21 55.80 lah0 la0 33 111.60 lah1 la1 45
28.31 laq-1 la-1 21 56.61 laq0 la0 33 113.22 laq1 la1 45
28.72 laqh-1 la#-1 22 57.44 laqh0 la#0 34 114.87 laqh1 la#1 46
29.14 la#-1 la#-1 22 58.27 la#0 la#0 34 116.54 la#1 la#1 46
29.56 la#h-1 la#-1 22 59.12 la#h0 la#0 34 118.24 la#h1 la#1 46
29.99 la#q-1 la#-1 22 59.98 la#q0 la#0 34 119.96 la#q1 la#1 46
30.43 la#qh-1 si-1 23 60.85 la#qh0 si0 35 121.70 la#qh1 si1 47
30.87 si-1 si-1 23 61.74 si0 si0 35 123.47 si1 si1 47
31.32 sih-1 si-1 23 62.63 sih0 si0 35 125.27 sih1 si1 47
31.77 siq0 si-1 23 63.54 siq1 si0 35 127.09 siq2 si1 47
32.23 siqh-1 do0 24 64.47 siqh0 do1 36 128.94 siqh1 do2 48
130.81 do2 do2 48 261.63 do3 do3 60 523.25 do4 do4 72
132.72 doh2 do2 48 265.43 doh3 do3 60 530.86 doh4 do4 72
134.65 doq2 do2 48 269.29 doq3 do3 60 538.58 doq4 do4 72
136.60 doqh2 do#2 49 273.21 doqh3 do#3 61 546.42 doqh4 do#4 73
138.59 do#2 do#2 49 277.18 do#3 do#3 61 554.37 do#4 do#4 73
140.61 do#h2 do#2 49 281.21 do#h3 do#3 61 562.43 do#h4 do#4 73
142.65 do#q2 do#2 49 285.30 do#q3 do#3 61 570.61 do#q4 do#4 73
144.73 do#qh2 re2 50 289.45 do#qh3 re3 62 578.91 do#qh4 re4 74
146.83 re2 re2 50 293.66 re3 re3 62 587.33 re4 re4 74
148.97 reh2 re2 50 297.94 reh3 re3 62 595.87 reh4 re4 74
151.13 req2 re2 50 302.27 req3 re3 62 604.54 req4 re4 74
153.33 reqh2 re#2 51 306.67 reqh3 re#3 63 613.33 reqh4 re#4 75
155.56 re#2 re#2 51 311.13 re#3 re#3 63 622.25 re#4 re#4 75
157.83 re#h2 re#2 51 315.65 re#h3 re#3 63 631.30 re#h4 re#4 75
160.12 re#q2 re#2 51 320.24 re#q3 re#3 63 640.49 re#q4 re#4 75
162.45 re#qh2 mi2 52 324.90 re#qh3 mi3 64 649.80 re#qh4 mi4 76
164.81 mi2 mi2 52 329.63 mi3 mi3 64 659.26 mi4 mi4 76
167.21 mih2 mi2 52 334.42 mih3 mi3 64 668.84 mih4 mi4 76
169.64 miq2 mi2 52 339.29 miq3 mi3 64 678.57 miq4 mi4 76
172.11 miqh2 fa2 53 344.22 miqh3 fa3 65 688.44 miqh4 fa4 77
174.61 fa2 fa2 53 349.23 fa3 fa3 65 698.46 fa4 fa4 77
177.15 fah2 fa2 53 354.31 fah3 fa3 65 708.62 fah4 fa4 77
179.73 faq2 fa2 53 359.46 faq3 fa3 65 718.92 faq4 fa4 77
182.34 faqh2 fa#2 54 364.69 faqh3 fa#3 66 729.38 faqh4 fa#4 78
185.00 fa#2 fa#2 54 369.99 fa#3 fa#3 66 739.99 fa#4 fa#4 78
187.69 fa#h2 fa#2 54 375.38 fa#h3 fa#3 66 750.75 fa#h4 fa#4 78
190.42 fa#q2 fa#2 54 380.84 fa#q3 fa#3 66 761.67 fa#q4 fa#4 78
193.19 fa#qh2 sol2 55 386.38 fa#qh3 sol3 67 772.75 fa#qh4 sol4 79
196.00 sol2 sol2 55 392.00 sol3 sol3 67 783.99 sol4 sol4 79
198.85 solh2 sol2 55 397.70 solh3 sol3 67 795.39 solh4 sol4 79
201.74 solq2 sol2 55 403.48 solq3 sol3 67 806.96 solq4 sol4 79
204.68 solqh2 sol#2 56 409.35 solqh3 sol#3 68 818.70 solqh4 sol#4 80
207.65 sol#2 sol#2 56 415.30 sol#3 sol#3 68 830.61 sol#4 sol#4 80
210.67 sol#h2 sol#2 56 421.35 sol#h3 sol#3 68 842.69 sol#h4 sol#4 80
213.74 sol#q2 sol#2 56 427.47 sol#q3 sol#3 68 854.95 sol#q4 sol#4 80
216.85 sol#qh2 la2 57 433.69 sol#qh3 la3 69 867.38 sol#qh4 la4 81
220.00 la2 la2 57 440.00 la3 la3 69 880.00 la4 la4 81
223.20 lah2 la2 57 446.40 lah3 la3 69 892.80 lah4 la4 81
226.45 laq2 la2 57 452.89 laq3 la3 69 905.79 laq4 la4 81
229.74 laqh2 la#2 58 459.48 laqh3 la#3 70 918.96 laqh4 la#4 82
233.08 la#2 la#2 58 466.16 la#3 la#3 70 932.33 la#4 la#4 82
236.47 la#h2 la#2 58 472.94 la#h3 la#3 70 945.89 la#h4 la#4 82
239.91 la#q2 la#2 58 479.82 la#q3 la#3 70 959.65 la#q4 la#4 82
243.40 la#qh2 si2 59 486.80 la#qh3 si3 71 973.61 la#qh4 si4 83
246.94 si2 si2 59 493.88 si3 si3 71 987.77 si4 si4 83
250.53 sih2 si2 59 501.07 sih3 si3 71 1002.13 sih4 si4 83
254.18 siq3 si2 59 508.36 siq4 si3 71 1016.71 siq5 si4 83
257.87 siqh2 do3 60 515.75 siqh3 do4 72 1031.50 siqh4 do5 84
1046.50 do5 do5 84 2093.00 do6 do6 96 4186.01 do7 do7 108
1061.72 doh5 do5 84 2123.45 doh6 do6 96 4246.90 doh7 do7 108
1077.17 doq5 do5 84 2154.33 doq6 do6 96 4308.67 doq7 do7 108
1092.83 doqh5 do#5 85 2185.67 doqh6 do#6 97 4371.34 doqh7 do#7 109
1108.73 do#5 do#5 85 2217.46 do#6 do#6 97 4434.92 do#7 do#7 109
1124.86 do#h5 do#5 85 2249.71 do#h6 do#6 97 4499.43 do#h7 do#7 109
1141.22 do#q5 do#5 85 2282.44 do#q6 do#6 97 4564.87 do#q7 do#7 109
1157.82 do#qh5 re5 86 2315.64 do#qh6 re6 98 4631.27 do#qh7 re7 110
1174.66 re5 re5 86 2349.32 re6 re6 98 4698.64 re7 re7 110
1191.74 reh5 re5 86 2383.49 reh6 re6 98 4766.98 reh7 re7 110
1209.08 req5 re5 86 2418.16 req6 re6 98 4836.32 req7 re7 110
1226.67 reqh5 re#5 87 2453.33 reqh6 re#6 99 4906.66 reqh7 re#7 111
1244.51 re#5 re#5 87 2489.02 re#6 re#6 99 4978.03 re#7 re#7 111
1262.61 re#h5 re#5 87 2525.22 re#h6 re#6 99 5050.44 re#h7 re#7 111
1280.97 re#q5 re#5 87 2561.95 re#q6 re#6 99 5123.90 re#q7 re#7 111
1299.61 re#qh5 mi5 88 2599.21 re#qh6 mi6 100 5198.43 re#qh7 mi7 112
1318.51 mi5 mi5 88 2637.02 mi6 mi6 100 5274.04 mi7 mi7 112
1337.69 mih5 mi5 88 2675.38 mih6 mi6 100 5350.75 mih7 mi7 112
1357.15 miq5 mi5 88 2714.29 miq6 mi6 100 5428.58 miq7 mi7 112
1376.89 miqh5 fa5 89 2753.77 miqh6 fa6 101 5507.54 miqh7 fa7 113
1396.91 fa5 fa5 89 2793.83 fa6 fa6 101 5587.65 fa7 fa7 113
1417.23 fah5 fa5 89 2834.46 fah6 fa6 101 5668.93 fah7 fa7 113
1437.85 faq5 fa5 89 2875.69 faq6 fa6 101 5751.38 faq7 fa7 113
1458.76 faqh5 fa#5 90 2917.52 faqh6 fa#6 102 5835.04 faqh7 fa#7 114
1479.98 fa#5 fa#5 90 2959.96 fa#6 fa#6 102 5919.91 fa#7 fa#7 114
1501.50 fa#h5 fa#5 90 3003.01 fa#h6 fa#6 102 6006.02 fa#h7 fa#7 114
1523.34 fa#q5 fa#5 90 3046.69 fa#q6 fa#6 102 6093.38 fa#q7 fa#7 114
1545.50 fa#qh5 sol5 91 3091.00 fa#qh6 sol6 103 6182.01 fa#qh7 sol7 115
1567.98 sol5 sol5 91 3135.96 sol6 sol6 103 6271.93 sol7 sol7 115
1590.79 solh5 sol5 91 3181.58 solh6 sol6 103 6363.15 solh7 sol7 115
1613.93 solq5 sol5 91 3227.85 solq6 sol6 103 6455.71 solq7 sol7 115
1637.40 solqh5 sol#5 92 3274.80 solqh6 sol#6 104 6549.61 solqh7 sol#7 116
1661.22 sol#5 sol#5 92 3322.44 sol#6 sol#6 104 6644.87 sol#7 sol#7 116
1685.38 sol#h5 sol#5 92 3370.76 sol#h6 sol#6 104 6741.53 sol#h7 sol#7 116
1709.90 sol#q5 sol#5 92 3419.79 sol#q6 sol#6 104 6839.58 sol#q7 sol#7 116
1734.77 sol#qh5 la5 93 3469.53 sol#qh6 la6 105 6939.07 sol#qh7 la7 117
1760.00 la5 la5 93 3520.00 la6 la6 105 7040.00 la7 la7 117
1785.60 lah5 la5 93 3571.20 lah6 la6 105 7142.40 lah7 la7 117
1811.57 laq5 la5 93 3623.14 laq6 la6 105 7246.29 laq7 la7 117
1837.92 laqh5 la#5 94 3675.84 laqh6 la#6 106 7351.69 laqh7 la#7 118
1864.66 la#5 la#5 94 3729.31 la#6 la#6 106 7458.62 la#7 la#7 118
1891.78 la#h5 la#5 94 3783.55 la#h6 la#6 106 7567.11 la#h7 la#7 118
1919.29 la#q5 la#5 94 3838.59 la#q6 la#6 106 7677.17 la#q7 la#7 118
1947.21 la#qh5 si5 95 3894.42 la#qh6 si6 107 7788.84 la#qh7 si7 119
1975.53 si5 si5 95 3951.07 si6 si6 107 7902.13 si7 si7 119
2004.27 sih5 si5 95 4008.54 sih6 si6 107 8017.07 sih7 si7 119
2033.42 siq6 si5 95 4066.84 siq7 si6 107 8133.68 siq8 si7 119
2063.00 siqh5 do6 96 4126.00 siqh6 do7 108 8251.99 siqh7 do8 120
8372.02 do8 do8 120
8493.79 doh8 do8 120
8617.34 doq8 do8 120
8742.68 doqh8 do#8 121
8869.84 do#8 do#8 121
8998.86 do#h8 do#8 121
9129.75 do#q8 do#8 121
9262.55 do#qh8 re8 122
9397.27 re8 re8 122
9533.96 reh8 re8 122
9672.63 req8 re8 122
9813.33 reqh8 re#8 123
9956.06 re#8 re#8 123
10100.88 re#h8 re#8 123
10247.80 re#q8 re#8 123
10396.86 re#qh8 mi8 124
10548.08 mi8 mi8 124
10701.51 mih8 mi8 124
10857.16 miq8 mi8 124
11015.08 miqh8 fa8 125
11175.30 fa8 fa8 125
11337.85 fah8 fa8 125
11502.76 faq8 fa8 125
11670.08 faqh8 fa#8 126
11839.82 fa#8 fa#8 126
12012.04 fa#h8 fa#8 126
12186.75 fa#q8 fa#8 126
12364.01 fa#qh8 sol8 127
12543.85 sol8 sol8 127
12726.31 solh8 sol8 127
12911.42 solq8 sol8 127
13099.22 solqh8 sol#8 128
13289.75 sol#8 sol#8 128
13483.05 sol#h8 sol#8 128
13679.17 sol#q8 sol#8 128
13878.14 sol#qh8 la8
14080.00 la8 la8
14284.80 lah8 la8
14492.58 laq8 la8
14703.38 laqh8 la#8
14917.24 la#8 la#8
15134.22 la#h8 la#8
15354.35 la#q8 la#8
15577.68 la#qh8 si8
15804.27 si8 si8
16034.14 sih8 si8
16267.37 siq8 si8
16503.98 siqh8 do9
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 GRAME-
laboratoire 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, Tik-
111.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

Potrebbero piacerti anche