[Pubblichiamo la seconda parte dell’articolo di Andrea Valle “Spettri: Fourier e il geco’”. Per la prima parte, cliccare qui]
L’algoritmo della FFT (Fast Fourier Transform) è talmente importante da essersi guadagnato un posto tra i primi 10 algoritmi più influenti per lo sviluppo e la pratica della scienza e dell’ingegneria secondo i curatori di Computing in Science & Engineering (2:1, 2000, lo segnala Wikipedia). L’FFT è alla base delle virtualmente infinite possibilità di manipolazione del dominio della frequenza disponibili in, virtualmente, ogni software audio, dove l’estrazione di informazione spettrale permette molte tipologie di elaborazione (basti pensare agli usi del Phase Vocoder o, in ambito pop, all’Autotuner), così come la conversione verso altri tipi di informazione, ad esempio verso la notazione musicale.
L’efficienza (in termini computazionali) e l’efficacia (in termini di risultati) dell’FFT sono fuori discussione. È però più interessante ragionare sulla relazione tra l’informazione numerica e quella percettiva. Se si vuole passare dalla teoria dei segnali digitali a una teoria dell’oggetto sonoro, si tratta di risolvere a tutti gli effetti due problemi di conversione: rispetto alla dimensione temporale, la risoluzione audio (come descritta dall’FFT) è definita dalla frequenza di campionamento (anche se poi dipende dalla funzione di finestrazione), quella fenomenologica invece si concentra su una (vaga) nozione fenomenologica di evento sonoro. Rispetto alla frequenza, si tratta poi di convertire gli Hertz in altezze. Questo è un punto tecnologico interessante: infatti, per costruzione dalla DTFT (Discrete-time Fourier Transform), nell’FFT le frequenze sono campionate linearmente, a un certo intervallo in Hertz corrisponde sempre una certa quantità di informazione. Il ché vuol dire che metà dell’informazione in uscita da un FFT concerne, in termini percettivi, l’ottava più acuta, un quarto la seconda ottava a scendere, e così via. In sostanza, l’acuto è sovrarappresentato e/o il grave sottorapresentato. Tornando al sonogramma e alla sua adeguatezza percettiva, la faccenda non è accessoria, poiché la visualizzazione dell’informazione non può che dipendere da quest’ultima. La metà verticale di un sonogramma basato su FFT, che disegna frequenze fino a n, è così occupato da n/2 frequenze (da n/2 a n), cioè una sola ottava, e così via.
A questo problema, in teoria chiaramente ben conosciuto, spesso si ovvia disegnando logaritmicamente le frequenze, ma poiché l’informazione di partenza è quella lineare, il risultato è di solito uno strano sonogramma che sembra deformato/sfocato (con un effetto di pixellatura) nel registro grave per poi diventare iperpreciso all’acuto. Questo getta una certa ombra (con grande dispiacere dei fan come me) sul sonogramma come strumento d’elezione per l’annotazione visiva di fenomeni, non tanto acustici, ma “aculogici”, per dirla alla Schaeffer. Anche se, come ha scoperto Manley, quel radicale del geco ha la membrana basilare che funziona al contrario, pure l’organizzazione di quest’ultima resta tonotopica.
A tal proposito, mi sono dunque posto un problema – ça va sans dire – brillantemente risolto nei fatti molte altre volte, ad esempio in Open Music o in Bach, cioè come estrarre informazione “musicale” da uno spettro. Un altro stimolo originava banalmente dall’assenza di soluzioni in SuperCollider, che pure implementa una larga collezione di algoritmi di Phase Vocoding basati su FFT. Un vincolo importante consisteva infine (detta eufemisticamente) nella mia scarsa propensione ai metodi numerici alla base della rappresentazione FFT. Armeggiando con il formato dati disponibile in SuperCollider, e non venendone molto a capo, ho perciò riconsiderato la questione ab initio (mio) e il progetto ha assunto una valenza pratica ma anche teorica, stante il sempre valido principio experimental cageano del “Che succede se…?”
Il Sonagraph era implementato in analogico attraverso un banco di filtri a eterodina che effettuavano una scansione in più passi dello spettro (infatti era pensato per il tempo differito), collegati a uno stilo che bruciava progressivamente (frequenza per frequenza) una carta speciale.[1] La risoluzione temporale dipendeva dalla velocità di rotazione del cilindro (regolabile) su cui era avvolta la carta. Ho allora pensato di implementare in SuperCollider un modello “cartonificato” (cioè, semplificato ma coerente con i principi generali, come proposto da Rocchesso e Fontana [2]) di Sonagraph su base logaritmica, per verificare se l’informazione ottenuta sarebbe stata percettivamente sufficiente, sensata e musicalmente utile. L’idea di un banco di filtri che estraggano informazione nell’ottica della risintesi è in realtà alla base della veneranda tecnica del Vocoder, proposto ai Bell Laboratories da Homer Dudley sul finire degli anni ’20 come dispositivo di codifica del segnale vocale (encoder) e poi di risintesi (decoder). E a tutti gli effetti la mia implementazione è una forma di encoder del Vocoder. Uno dei problemi della tecnica a banco di filtri è che non rispetta la fase, importante nella ricostruzione del segnale. Di qui l’algoritmo digitale del sopraccitato Phase Vocoder che, come indica il nome, invece recupera proprio la fase. Ma a fini experimental/analitici si può soprassedere. Come si vede in Figura 2, ho quindi deciso di utilizzare in fase di analisi un banco di filtri passabanda equispaziati in altezza, e non in frequenza (Log filter).
[fig. 2]
I filtri sono intonati sugli 88 tasti del pianoforte, una scelta “musicale” che però realizza un buon compromesso tra risoluzione in altezza e dimensione del banco, e copre l’escursione 27.5-4186 Hz. Il banco di filtri ha una fattore di risonanza complessivo (quindi a banda variabile in funzione della frequenza centrale) ma regolabile (Q), sul modello della distinzione banda stretta/larga del Sonagraph (ma più generale). Ogni filtro è collegato a un inseguitore di inviluppo di ampiezza (Amp follower), esattamente come nell’encoder di Dudley. Il segnale in uscita è leggermente integrato (Smoother: di fatto una sorta di filtraggio) per eliminare variazioni troppo rapide (e questo ovviamente compromette definitivamente l’informazione di fase). Il segnale di analisi viene quindi convertito da ampiezza lineare a deciBel (Converter) e campionato a un tasso regolare (Sampler) ma impostabile (sr, per sampling rate), che modella la velocità variabile del tamburo metallico nel Sonagraph. Qual è un buon valore per sr? Dipende dagli intenti e dalla variazione spettrale del segnale che si sta considerando: empiricamente, tra 10 e 50 (in quest’ultimo caso siamo già a tasso audio).
Il modulo Sampler restituisce per ogni campione un vettore di 88 valori stimati in dB (chiamato bin), che viene stoccato come una colonna in una matrice. In quest’ultima, intuibilmente, le righe costituiscono viceversa il dominio del tempo, ognuna contenendo i valori del segnale campionato per un singolo filtro a tasso sr. Il segnale bidimensionale così ottenuto può essere archiviato e importato (Archivist) nel modulo di analisi (Analyzer). Quest’ultimo prende così in considerazione un dato estremamente ridotto rispetto al segnale audio (e a quello FFT), rendendo assai semplice e computazionalmente poco costosa l’implementazione di un insieme interessante di operazioni sul singolo bin, o su sottoinsiemi della matrice. Ad esempio, si possono indagare massimi e minimi in regioni spettrali (si selezionano certe righe), o ottenere informazioni relativi ai picchi spettrali, per numero (i primi n) o rispetto a una soglia (quelli superiori a x). Ovviamente la risoluzione frequenziale è tarata sul sistema temperato: la cui uniformità è un vantaggio (campionamento in altezza uniforme) ma la cui densità è discutibile. Però la faccenda è interessante in fase di analisi perché in qualche modo il temperamento equabile è pur sempre una griglia di riferimento standard. Dati i dati, da cosa nasce cosa. Ad esempio, si può costruire una interfaccia grafica interattiva come quella in Figura 3, a sinistra, largamente indebitata a quella di Praat (a destra, che è il mio software di adozione per l’analisi).
[fig. 3]
La GUI [Graphical User Interface] mette in parallelo spettro per altezze (in alto) e forma d’onda (in basso). Ci si può posizionare in un punto (che seleziona un bin) ed eseguire il playback. Il posizionamento del cursore lungo l’asse y (barra rossa orizzontale) è accompagnato da un breve impulso sinusoidale che fornisce un riferimento rispetto all’altezza selezionata, mentre in basso vengono indicati i secondi (a sinistra della barra rossa verticale) e la notazione MIDI (52), notale (E4) e in Hertz (164.81). La riga punteggiata rossa indica invece un dato in più, cioè una stima della frequenza fondamentale. Essendo la visualizzazione logaritmica, i due tracciati (spettro e fondamentale) sono coerenti rispetto alla metrica (in Praat, lo stesso dato è fornito dalla riga blu, che si muove linearmente ma in un escursione ridotta rispetto al sonogramma, come si vede confrontando l’asse y sui due lati). Le indicazioni audiovisive interattive mi hanno confortato sulla salienza percettiva del mio dato sonografico. Sempre rispetto a Figura 2, il modulo Plotter esporta un file PostScript in formato PDF. Questo permette di confrontare agevolmente il risultato con un sonogramma standard. In Figura 4 si vede lo stesso segnale (la mia voce che dice “audio digitale”) nel sonogramma esportato da Praat (sinistra) e in quello da SonaGraph (destra), a parità di escursione di frequenza (Praat parte da 0, ma 20 Hz su 4186 sono meno dello 0.5%) e con tasso di campionamento confrontabile (più o meno, perché non sono la stessa cosa: in ogni caso, qui la funzione di finestrazione in Praat è 0.02 e il valore di sr è 50).
[fig. 4]
È interessante osservare come le due rappresentazioni visive siano, per così dire, due gemelli molto eterozigoti, e questo al di là del fatto che Praat tracci un grafico continuo e quasi fotografico (bello) mentre SonaGraph illustri visivamente in maniera brutale la matrice da cui origina (bruttarello). In Praat emergono chiarissimamente le formanti, che spariscono in SonaGraph, accartocciate alle due ottave superiori (basta considerare la linea dei 900 Hz come riferimento comune). Invece la struttura armonica è quella che domina il sonogramma da SonaGraph. Una simile differenza rende sospetta l’adeguatezza percettiva del modello di analisi del SonaGraph, ben oltre la cartonificazione. Ma si può pensare come controprova di sonificare i dati ottenuti da Analyzer attraverso un banco di oscillatori sinusoidali (Synthesizer): si può impostare una soglia per il banco, che determina l’ampiezza sopra la quale si ha risintesi, sotto la quale no. Nell’esempio 1 la soglia è -35 dB. Il risultato non è certo una risintesi del segnale à la FFT (ma questo non era l’obiettivo), tuttavia quanto risulta è quantomeno un suono “ben cartonificato”, cioè una schematizzazione sonora che rispetta la sorgente, tant’è che il parlato è riconoscibile. Estendendo l’analisi, si può pensare di visualizzare il dato in notazione tradizionale: la struttura dell’informazione è già predisposta per le altezze, perché di fatto la matrice è il classico rullo del piano (e infatti è semplice esportare in MIDI). Resta da risolvere il problema temporale. L’opzione più semplice consiste nell’assumere che ogni bin sia descritto in durata da una semicroma, con un tempo di metronomo che dipende allora da sr. Convertire in notazione indica però anche garantire una leggibilità storicamente assennata della stessa. Quindi, nel generare e compilare un file LilyPond, il Music notation generator adotta una strategia di raggruppamento per cui, data una certa altezza, tutti i bin consecutivi superiori alla soglia vengono legati in un’unica nota di durata complessiva. L’immagine contenente notazione può così essere importata in una interfaccia interattiva come quella di Figura 5, che permette ulteriori investigazioni.
Come si nota, il risultato notazionale a partire dal segnale precedente è abbastanza estremo (basta considerare il tempo di metronomo) ma comunque leggibile. Questo dipende però dalle impostazioni di analisi: un sr pari a 50 è già a tasso audio, e -35 dB è una soglia che lascia passare molti bin. In Figura il cursore regola il mix tra i due suoni spec (spettro risintetizzato) e snd (il segnale originale) per agevolare il confronto. In realtà, spec è una risintesi ottenuta via pianoforte sintetico, per spingere ulteriormente l’astrazione dei dati e vedere cosa rimane dell’informazione audio orginale. A ulteriore semplificazione, i bin/semicrome legati ricevono un unico valore dinamico, quello del primo. Ciò che viene fuori (originale più piano) può essere ascoltato nell’esempio 2.
[es. 2]
Il Sonagraph cartonificato fornisce dunque un insieme di strumenti che legano segnale audio e informazione percettiva/musicale di alto livello, utili in fase di analisi e di composizione, e che possono essere esportate. Ci si potrebbe chiedere quale possa essere il senso di reimplementare funzioni in vario modo già disponibili altrove, ottimizzate da sviluppatori abili, stabilizzate dall’uso. In italiano, un simile quadro epistemologico viene descritto come scoperta dell’acqua calda, l’inglese preferisce il modello della reinvenzione della ruota. Quest’ultima accezione è decisamente più interessante. Infatti, la reinvenzione dell’oggetto obbliga a risolvere di nuovo il problema, a riconsiderare non solo le soluzioni, ma a ristrutturare il quadro. Un sonogramma è adeguato alla percezione? Qual è l’informazione significativa? Significativa rispetto a cosa? Come è fatto un Sonagraph? Che succede a ridurre drasticamente e filtrare i dati? Insomma, alla peggio, si imparano comunque cose nuove. Ad esempio, sul curioso caso del geco.[3]
[1] Cfr. http://www.jproc.ca/rrp/sonagraph_dsp5500.html e P. Lehner, Handbook of Ethological Methods, Cambridge UP, 1979 (2ed 1996).
[2] D. Rocchesso e F. Fontana (eds.), The Sounding Object, Edizioni di Mondo Estremo, 2003. http://www.soundobject.org/SObBook/SObBook_JUL03.pdf
[3] Il codice in SuperCollider, in stato abbondantemente alpha, è disponibile su GitHub: https://github.com/vanderaalle/vanderaalleSC/tree/master/sonaGraph
Lascia una risposta