• Non ci sono risultati.

Listato 1.2: Lʼinstrument block relativo alla patch rappresentata in figura 1.3.

1.5. Obiettivi della tes

Nei precedenti paragrafi abbiamo cercato di inquadrare il contesto scientifico-tecnologico in cui si inserisce il lavoro che sta dietro a questa tesi.

In questo paragrafo viene presentato pureCMusic (o pCM), il framework di supporto alla sintesi au- dio e alla composizione algoritmica oggetto dello sviluppo operato parallelamente alla tesi. Sono poi esposti gli obiettivi che cercheremo di perseguire durante l’attività di progettazione e sviluppo, insieme agli strumenti adottati per raggiungere tali obiettivi.

1.5.1. Introduzione a pCM

La ricerca in ambito dei dispositivi di input musicali alternativi [Tarabella97], condotta dal prof. Leonello Tarabella al computerART project del CNR di Pisa, ha determinato la necessità di svilup- pare un supporto per il processamento ed il mapping in tempo reale dei dati di controllo generati da particolari human gesture interfaces create dallo stesso gruppo di ricerca, note come iper-strumen- ti7. Ne è nata una libreria di supporto alla composizione algoritmica controllabile in tempo reale da

device di input esterni, nota come pureCMusic (pCM) [Tarabella03b].

Oltre agli strumenti per la definizione di score articolati, e di gestione di stream di dati di controllo in/da interfacce esterne, pCM comprende anche i tipici generatori di sintesi e processamento audio (oscillatori, inviluppi, filtri, delay, ecc.) La composizione è definita da un programma C/C++, e la sua performance corrisponde all’esecuzione del programma corrispondente. Durante la fase di svi- luppo, il compositore, oltre a definire l’orchestra adottata, esprime l’evoluzione della composizione, influenzata eventualmente dai dati forniti dai controller esterni.

Come vedremo più in dettaglio nel capitolo successivo, pCM cerca di mantenersi il più possibile consistente rispetto alle astrazioni introdotte da Csound (vedi paragrafo 1.3.1), permettendo al- l’utente di poter operare in termini di score, movimenti/sezioni, orchestra, instrument, generatori, ecc. Allo stesso tempo, pCM tenta di alleggerire il più possibile l’architettura, eliminando possibili overhead causati dall’introduzione di livelli di indirettezza, come quello di un interprete, come nel caso di Csound.

L’obiettivo principale di pCM è di abilitare l’utente a definire motori di sintesi di complessità arbi- traria capaci di renderizzare audio in tempo reale manovrati da un flusso di controllo esterno.

7 Un iper-strumento è un dispositivo che genera informazioni rilevate dal movimento delle mani. Il rilevamento avviene senza alcun mezzo tangibile, come raggi infrarossi ed elaborazione real-time di immagini. Esempi di iper-strumenti realizzati sono il TwinTowers e Handel [Tarab2].

La scelta di implementare il supporto sotto forma di framework C/C++ ha il vantaggio di poter esprimere potenzialmente qualunque logica di mapping tra controller esterni e parametri di sintesi, e di poter godere allo stesso tempo di alte performance.

1.5.2. Obiettivi

Il nostro primo obiettivo è di analizzare il framework pCM, così com’è stato concepito e implemen- tato nel corso di questi anni di ricerca al computerART project del CNR di Pisa. Il processo di anali- si dovrà cogliere i concetti coinvolti nel framework, le loro relazioni e le loro modalità di imple- mentazione, con particolare attenzione all’architettura e al modo con cui essa poggia sul particolare supporto audio adottato.

Una volta acquisita una comprensione sufficientemente dettagliata del framework pCM, cerchere- mo di spingerci oltre: ritorneremo alla definizione dei concetti fondamentali della sintesi audio digi- tale esposti in questo capitolo, per capire quali siano i possibili incrementi applicabili a pCM. Avere un’idea chiara sulle problematiche e sugli oggetti coinvolti nel processo di rendering in un contesto real-time sarà fondamentale per capire quali scelte di progettazione e di implementazione portare avanti nel processo di sviluppo.

Contemporaneamente, l’obiettivo sarà quello di dotare pCM di una veste più orientata agli oggetti: come vedremo nel prossimo capitolo, pCM è stato sostanzialmente implementato in C, con il sup- porto di un ristretto sottoinsieme del C++, del quale si è utilizzato principalmente il supporto alle classi e oggetti. Cercheremo quindi di attuare un processo di re-ingegnerizzazione, per traslare l’implementazione di pCM da C in C++, sfruttando buona parte dei costrutti offerti dal linguaggio. Chiameremo pureCMusic+ (o pCM+) questa nuova versione del framework.

Fin dall’attività di (ri)progettazione, eviteremo il più possibile di reinventare la ruota, orientando lo sviluppo ai pattern e paradigmi di programmazione (affidandoci a testi fondamentali, come [Gamma95].)

Quando possibile, per l’applicazione dei pattern e paradigmi, poggeremo sulla libreria C++ Loki8,

concepita da Andrei Alexandrescu nel suo celebre testo Modern C++ Design: GenericProgram- ming and Design Patterns Applied (ed. Addison Wesley) [Alexandrescu01].

Altre librerie che potremmo prendere in considerazione nel corso dello sviluppo sono quelle della “famiglia” boost9.

Particolare attenzione sarà rivolta alle nuove possibilità offerte dai processori di ultima generazione con architetture multi-core. È indubbio quale sia la portata dell’impatto di tale progresso tecnologi- co su domini applicativi che richiedano performance run-time, come certamente quello della sintesi e del processamento audio. È altresì indubbio quanto sia non trascurabile tale impatto sul codice sorgente. Spinti dalla consapevolezza che ben presto sopravviveranno soltanto le applicazioni in grado di distribuire il calcolo “nel migliore dei modi” (cioè massimizzando l’efficienza relativa [Vanneschi07b]) tra i vari core, obiettivo centrale sarà di abilitare pCM al processamento audio pa- rallelo su architetture multi-core. Per fare questo ci serviremo della libreria Threading Building Block10 [Reinders07] della Intel, recentemente resa open-source nei termini della GNU General

Public Licence. Tale scelta sarà ampiamente motivata a tempo debito (vedi paragrafo 3.3).

Un altro obiettivo sarà di svincolare il framework da un particolare supporto audio, dotandolo di un’architettura tale da abilitare l’utente a scrivere facilmente nuovi “componenti” per poggiare pCM+ su diversi supporti audio.

Nonostante pCM ricopra sia la parte relativa all’orchestra, sia la parte relativa allo score, noi ci con- centreremo principalmente sull’orchestra. pCM+ sarà quindi prima di tutto un framework per co- struire algoritmi di sintesi con performance real-time, tali da sfruttare al massimo le risorse di calco- lo disponibili sugli attuali e futuri processori con architettura multi-core.

8 È possibile scaricare la libreria loki in loki-lib.sourceforge.net/ 9 www.boost.org

Tutto questo sarà realizzato senza snaturare i concetti di base e la filosofia con cui è stato concepito in origine pCM: chi conosce Csound necessita di poche altre conoscenze per poter sfruttare il framework.

1.6. Conclusioni

In questo capitolo sono state esposte le conoscenze nell’ambito della sintesi e del processamento audio significative e fondamentali per gli obiettivi perseguiti da questa tesi. Abbiamo inizialmente introdotto le problematiche che stanno dietro all’implementazione digitale di un oscillatore. Sono state poi formulate le definizioni di generatore e patch, popolando il dominio dell’elaborazione au- dio di ulteriori entità oltre a quella del semplice oscillatore digitale, come inviluppi, filtri, riverberi, ecc,

Abbiamo quindi esteso ulteriormente il nostro contesto applicativo introducendo due differenti esempi di sistemi software per la sintesi audio: Csound e Max. Da essi è emersa la canonica separa- zione delle responsabilità tra i concetti di score e orchestra.

Dai sistemi di sintesi audio siamo scesi al livello sottostante dei supporti audio, introducendo PortAudio, un supporto multi-piattaforma, e Core Audio, il supporto nativo su piattaforma Mac OS X.

Abbiamo infine presentato il framework pureCMusic, e gli obiettivi che questa tesi si prefigge di perseguire e raggiungere durante lo sviluppo da essa documentato.

2.1. Introduzione

In questo capitolo viene esposto il framework pureCMusic (pCM), precedentemente introdotto al paragrafo 1.5.1, con l’obiettivo di comprenderne i concetti e le astrazioni messe a disposizione del- l’utente, nonché analizzare il modo in cui esse sono implementate, là dove avrà senso farlo.

Sarà adottato un approccio top-down, cominciando a valutare il framework dal punto di vista del- l’utente, per poi affondare sui dettagli implementativi. Nel fare questo, cercheremo di isolare criti- camente le responsabilità e il modo in cui esse sono distribuite all’interno del codice.

Astrazioni e responsabilità saranno la base per la successiva fase di (ri)progettazione; comprenderle è l’obiettivo principale di questo capitolo.

Ricoprire esaustivamente ogni minuzia implementativa non è lo scopo della nostra analisi, che si limiterà invece a valutare ogni aspetto e dettaglio del codice sorgente che riveli o nasconda infor- mazioni utili alla comprensione della struttura e dei meccanismi con cui il framework pCM è stato originariamente concepito.

Nel procedere con l’analisi sarà inevitabile iniziare ad individuare ed isolare eventuali difetti o erro- ri di progettazione, che lasceremo in sospeso fino al prossimo capitolo, limitandoci a farne una pri- ma analisi, senza proporre rimedi o soluzioni.