Scelte e procedure

Per compiere un'azione di qualsiasi tipo dobbiamo necessariamente effettuare delle scelte.

Nello specifico musicale se vogliamo comporre un brano ovvero organizzare in qualche modo suoni nel tempo dobbiamo ad esempio scegliere se questi saranno generati da uno strumento acustico o un ensemble strumentale, elaborati da un computer o diffusi da un player, l'andamento temporale che avrà e in generale le caratteristiche musicali che vogliamo dare al nostro lavoro.

In base a queste e altre scelte dobbiamo poi decidere come organizzare tutto il materiale musicale, ovvero compiere una scelta di tipo estetico-procedurale e, se il nostro brano implica un qualche tipo di utilizzo dell'informatica come organizzare le relazioni che intercorrono tra i due linguaggi.

Una procedura, per essere tale deve possedere alcune caratteristiche precise. Deve ottenere dei dati finali (output) trasformando dei dati iniziali (input). Il modo in cui avviene questa trasformazione (algoritmo), è dato dalle regole stabilite nella procedura.

image not found

In musica (e anche in informatica) possiamo effettuare due tipi di operazioni:

L’output di un processo può diventare l’input di un altro e via dicendo, e creare in questo modo una catena procedurale che in musica dovrebbe sempre seguire una coerenza linguistico/sintattica ove anche la totale incoerenza diventa una scelta procedurale coerente in quanto precisa idea musicale.

Nello stabilire le regole possiamo scegliere tra due approcci differenti che spesso coesistono all’interno di ogni singolo brano:

Le scelte procedurali che effettueremo in ambito informatico devono sempre essere coerenti con quelle musicali specifiche del brano e assumere una funzione di secondarietà (subordinazione) rispetto ad esse.

Rappresentazioni

Una procedura, un’idea o un concetto possono essere rappresentati graficamente attraverso schemi a blocchi (block diagrams).

image not found

In informatica possiamo anche rappresentare un processo computazionale attraverso pseudocodici che sono una via di mezzo tra il linguaggio naturale (descrittivo) e un linguaggio di programmazione di alto livello.

In uno pseudocodice si possono trovare le istruzioni tipiche dei linguaggi di programmazione espresse in una forma più semplice e leggibile ma, a differenza di questi non può essere elaborato ed eseguito dal computer tramite interpretazione o compilazione.

-----------> Pseudocodice

se anno = 2000
scrivi: "nuovo millennio"

-----------> Implementato in php

if ($anno=2000) echo("nuovo millennio");

-----------> Implementato in basic

if ($anno=2000) THEN print("nuovo millennio")

-----------> Implementato in C

if (anno=2000) {printf("nuovo millennio");}

-----------> Implementato in SuperCollider

if(~anno == 2000, {"nuovo millennio".postln} );

In entrambi i casi si tratta di una forma generica di rappresentazione, utilizzabile in molti contesti e senza simboli grafici o sintassi definite.

Un diagramma di flusso (flowchart) invece è uno schema a blocchi più specifico che viene utilizzato per rappresentare graficamente il flusso di controllo di algoritmi, procedure e istruzioni operative.

image not found

Quando in ambito musicale è previsto l’utilizzo di uno strumento elettroacustico o informatico, scrivere questi diagrammi diventa fondamentale, in quanto favoriscono la riproducibilità del brano nel tempo fornendo le istruzioni per realizzare l’idea musicale originale con qualsiasi tipo di software o device passato, presente o futuro. Fra dieci, venti o cento anni infatti ci saranno nuove tecnologie e saranno inventati nuovi software e hardware, SuperCollider e Max probabilmente non esisteranno più e se legassimo la possibilità di eseguire un brano a una specifica tecnologia o software potrebbe non essere più possibile riprodurlo.

Non è un problema nuovo, anche alcuni musicisti del passato lo hanno affrontato ma in modo marginale e subordinato ad altri concetti. Dalle origini e fino ai primi anni del novecento i mutamenti nelle tecnologie strumentali e nel linguaggo musicale si sono succeduti con estrema lentezza. Questo ha permesso un’assimilazione culturale "metabolica" dei cambiamenti, nonchè delle loro potenzialità espressive, che sono state a volte causa, a volte effetto dei mutamenti stessi. Prendiamo come esempio il fortepiano. Fu ideato e costruito a Firenze attorno al 1700 da Bartolomeo Cristofori artigiano padovano al servizio del Principe Ferdinando de'Medici. Fu lo strumento prediletto da Haydn, Mozart, Beethoven, Schubert, Schumann, per nominare solo i più famosi fra i grandi compositori vissuti tra la fine del settecento e l’inizio dell’ottocento. Nello stesso periodo però le mutate esigenze sia musicali che concertistiche, provocarono dei radicali cambiamenti nella costruzione e nella struttura degli strumenti. La maggiore richiesta di volume sonoro giustificata dal diffondersi del rito del concerto pubblico in ambienti sempre più vasti, impose l’uso di corde non più di ottone, rame o ferro, bensì di acciaio con calibri maggiori e quindi con maggiori tensioni a loro volta necessariamente sostenute non più da un fragile telaio in legno, ma da un robusto sostegno di ghisa. I martelletti non più ricoperti di pelle ma di feltro, e di dimensioni maggiori, in quanto chiamati a produrre sonorità più adatte a un pubblico sempre più numeroso. Così insensibilmente nel periodo che va dalla creazione dello strumento al 1850 ed oltre, il fortepiano diviene ciò che noi oggi siamo abituati a riconoscere come il pianoforte. Una trasformazione durata circa 150 anni che ha permesso la metabolizzazione naturale dei cambiamenti tecnico/espressivi sia nei musicisti, sia nel pubblico. Ai nostri giorni invece il progresso tecnologico è talmente rapido che non permette la sedimentazione dei cambiamenti in una coscienza collettiva e viene meno la formazione di uno "standard" condiviso e condivisibile. Bisogna dunque utilizzare un maggiore grado di astrazione nella descrizione dei processi sia compositivi che realizzativi di un’idea musicale. Un esempio del passato che, seppur non muovendo da questa problematica ha compiuto la stessa operazione: J.S.Bach. All’interno della sua produzione musicale, ha scritto brani senza specificare l’organico e quindi la tecnica strumentale. L'arte della fuga (Die Kunst der Fuge) ad esempio è un insieme di brani in cui i contrappunti possono essere eseguiti con un organo, un clavicembalo, un pianoforte, con un quartetto d’archi oppure qualsiasi altro strumento o gruppo di strumenti che ne comprendano l’estensione. Questa operazione è resa possibile dal linguaggio musicale utilizzato e dall’idea che il compositore voleva trasmettere. Il parametro timbrico e la tecnica strumentale sono inifluenti rispetto quest’ultima (fatto sottolineato anche nel titolo - L’arte della fuga e non Il clavicembalo ben temperato...). In altri casi invece, come ad esempio gli Studi per pianoforte di F.Chopin seppur all’interno dello stesso linguaggio (il linguaggio tonale), non è possibile lo stesso tipo di astrazione, in quanto estremamente legati alle proprietà dello strumento e alla tecnica strumentale.

Diagrammi di flusso

Nel realizzare musica con mezzi informatici, elettroacustici o misti, possiamo utilizzare tre diverse tipologie di diagrammi di flusso (flowchart) ognuna delle quali con simboli e regole proprie:

Procedurali

Il linguaggio dei diagrammi di flusso è un possibile formalismo per la descrizione di algoritmi che descrive il flusso delle operazioni da eseguire per realizzare la trasformazione, definita nell’algoritmo, dai dati iniziali ai risultati.

Ogni istruzione dell’algoritmo è rappresentata da un particolare simbolo detto blocco elementare la cui forma grafica è determinata dal tipo di istruzione.

I cinque tipi di blocchi più comuni sono:

image not found

I blocchi sono collegati tra loro da linee di flusso, munite di frecce, che indicano il susseguirsi di azioni elementari.

Un diagramma di flusso minimo è composto dai seguenti elementi:

Un diagramma di flusso deve soddisfare le seguenti condizioni:

Il diagramma seguente ad esempio descrive una procedura per filtrare altezze appartenenti a una scala pentatonica da una scala cromatica.

image not found

Nell'illustrazioen seguente possiamo trovare un’elenco dei blocchi elementari meno comuni:

image not found

Ogni procedura descrive una sequenza di operazioni che devono essere effettuate su dei dati. Queste operazioni vengono effettuate attraverso diverse tipologie di operatori.

Operatori

In informatica un operatore è un simbolo che specifica quale legge applicare a uno o più operandi per ottenere un risultato. Gli operatori possono essere classificati in base al numero di operandi che accettano, ovvero in base al numero di dati su cui lavorano.

Programmazione strutturata

La programmazione strutturata è un paradigma che favorisce la descrizione di algoritmi facilmente documentabili e comprensibili. Un diagramma a blocchi strutturato ha tre possibili schemi di flusso:

Il teorema di Böhm-Jacopini afferma che qualsiasi algoritmo può essere implementato seguendo questi tre schemi. Le tre strutture possono essere concatenate o nidificate, ma non possono essere intrecciate o accavallate. Vediamo un esempio applicato agli schemi precedenti.

(         // CONCATENATI (uno DOPO l'altro)
~in = [0.25,2];                           
~seq = 4.collect({rrand(~in[0],~in[1])}).sort.reverse * 2; // Concatenati da sx a dx...
)


(         // NIDIFICATI (uno DENTRO un altro)
~seq = [0.25,0.75,1];                                                        
~seq.do({arg item,id;                                  // Schema di iterazione

             if(item == 0.25, {~seq.put(id, item*4)}); // Schema di selezione	

         });
)

Questo paragrafo è tecnicamente importante ed ha una duplice veste, non solo per la parte tecnico-informatica, ma anche per la strutturazione di un pensiero musicale proprio dell’utilizzo di strumenti informatici ed elettroacustici. Il con- cetto più importante da comprendere è come a diversità di pensiero corrisponda diversità di schema. Se per esempio vogliamo cambiare il numero e i valori di tutti i parametri a ogni evento, è meglio adottare uno schema di sequenza, dove abbiamo sotto controllo tutti i dati a ogni passo. Se vogliamo invece che i parametri in output dipendano da quelli in input o da scelte probabilistiche o pseudo-casuali è meglio adottare uno schema di selezione. Se infine tutti gli eventi hanno un numero finito di parametri che cambiano in modo dinamico ad ogni passo è meglio adottare uno schema di iterazione e via dicendo.

Algoritmi di sintesi

Possiamo rappresentare graficamente anche il percorso che deve compiere un segnale audio per realizzare un algoritmo di sintesi o di elaborazione del suono rendendolo di fatto realizzabile attraverso qualsiasi tipo di software o hardware che lo consenta.

image not found

Se la realizzazione viene effettuata attraverso un software in questo diagramma va specificato esclusivamente il percorso che i segnali compiono all'interno di esso. Gli eventuali inputs e gli outputs saranno i segnali in ingresso e in uscita dalla scheda audio mentre il percorso degli stessi che va oltre la scheda audio dovrà essere illustrato in un altro diagramma riguardante il routing e la disposizione dei microfoni (eventuali) e degli altoparlanti.

Per poter rappresentare e leggere correttamente questo percorso dobbiamo adottare un insieme di simboli standardizzato e codificato. Purtroppo però ancora oggi non esiste una codifica universalmente adottata come per altri ambiti ma ci sono alcune convenzioni grafiche adottate in importanti pubblicazioni ormai storiche riguardanti l'informatica musicale che si prestano maggiormante di altre a rappresentare elementi comuni a quasi tutti gli algoritmi di sintesi.

I/O

Simboli che indicano le possibili comunicazioni con il mondo esterno al software.

image not found

Connessioni

I seguenti simboli indicano la somma e la moltiplicazione tra due o più segnali e i punti di connessione o ponte tra i collegamenti.

image not found

Switch

I seguenti simboli indicano interruttori e ripartitori del segnale.

image not found

Amplificatori

I seguenti simboli indicano: potenziometri (fader o knob) e amplificatori.

image not found

Generatori

Il simbolo comunemente adottato per gli oscillatori può essere impiegato per tutti i tipi di generatori di suono.

image not found

Nella prima e seconda riga sono rappresentati gli oscillatori a forma d'onda fissa più comuni, nella terza un generatore di rumore, un generatore di segnali di controllo (LFO) e un player di Buffer o sound files. Infine nell'ultima riga un oscillatore tabellare generico

Memorie

I seguenti simboli possono essere utilizzati per indicare supporti specifici per dati audio.

image not found

Inviluppi

I seguenti simboli possono essere utilizzati per indicare qualsiasi tipo di inviluppo e break point function.

image not found

Filtri

I seguenti simboli possono essere utilizzati per indicare qualsiasi tipo di filtro ed equalizzatore, nonchè transfert function.

image not found

Moduli generici

I seguenti simboli possono essere utilizzati per indicare qualsiasi tipo di modulo generico impiegato per l'elaborazione del segnale come delay, pan, etc.

image not found

Il percorso dei segnali può andare sia dall'alto verso il basso:

image not found

Sia da sinistra a destra:

image not found

in questo caso i simboli mantengono l'aspetto orizzontale ma cambia il lato di ingresso dei parametri di controllo.

Schemi a blocchi di questo tipo sono tipicamente utilizzati anche nella rappresentazione delle caratteristiche di una scheda audio.

image not found

Oppure di catene elettroacustiche dedicate all'elaborazione di strumenti acustici in tempo reale:

image not found

Disposizioni e routing

Questo tipo di diagrammi serve a indicare tutte le informazioni necessarie alla corretta messa in scena di un lavoro e prevede sia la collocazione del pubblico e di eventuali esecutori che di tutta la strumentazione elettroacustica necessaria all'acquisizione, trasmissione e diffusione dei segnali audio. Le immagini seguenti illustrano tre schemi di questo tipo in ordine crescente di complessità e detttaglio nelle indicazioni.

image not found

image not found

image not found