Come trasformare dati in musica: la “sonificazione”

La cosiddetta “sonificazione” è il processo di trasformazione delle informazioni non uditive in suono. Essa ci permette di catturare e di avere una migliore esperienza di fenomeni che sono fuori del nostro range sensoriale mappando i valori entro strutture sonore che possiamo percepire ascoltandole. I dati utilizzabili per la sonificazione possono venire da una varietà di fenomeni naturali e non: in pratica, ogni vibrazione o fluttuazione misurabile, come le orbite planetarie, l’intensità dei terremoti, la posizione dei rami su un albero, la lunghezza delle parole in questo articolo, e così via. Ecco come si fa in pratica.

Come si può prendere un processo naturale, un insieme di dati, qualsiasi tipo di segnale non sonoro e convertirlo percettivamente in suono? Inoltre, è possibile che ascoltando una riproduzione veloce dei valori numerici che lo rappresentano sia possibile percepire un modello, ancora da scoprire, che dia una personalità unica a questi numeri? Ingegneri e accademici che studiano questa idea la chiamano “visualizzazione uditiva”, che è anche – ma non solo – artisticamente interessante.

La disciplina accademica della visualizzazione uditiva tende a dividere questo nuovo campo, al confine fra scienza, musica ed arte, in due grandi categorie:

  • Auditing: il rendering diretto di dati digitali in (solitamente) frequenze sub-audio nella gamma udibile, usando il ricampionamento. Esempio: velocizzare un’ora di dati sismologici per riprodurli in un secondo (ne abbiamo parlato in un altro articolo, vedi qui).
  • Sonificazione: mappatura in suono dei dati con qualche altro significato.

Le due figure mostrano una forma d’onda (in alto), dopo un’accelerazione (pitch shift) di 200x, e il sonogramma associato (in basso) per l’inizio di un fenomeno di eruzione sul monte Etna. Puoi scaricare un esempio di sismogramma sonificato da qui. (cortesia INFN)

Oltre al facilitare la comprensione e l’analisi dei dati, la sonificazione può essere usata anche per creare suoni e musica interessanti, come la semplice visualizzazione dei dati può produrre immagini interessanti, insomma ha anche una valenza “estetica” e/o artistica, ed è potenzialmente in grado di suscitare emozioni. Se la musica può essere coinvolta nell’imitazione della natura, allora la sonificazione diventa uno strumento apprezzabile nella moderna tecnica di creazione della musica.

La percezione uditiva presenta vantaggi nella risoluzione temporale, spaziale, di ampiezza e frequenza che aprono possibilità come alternativa o complemento alle tecniche di visualizzazione. La sonificazione deve affrontare molte sfide per un uso diffuso per la presentazione e l’analisi dei dati (molti tentativi di sonificazione sono codificati da zero). Ad esempio, gli studi dimostrano che è difficile, ma essenziale, fornire un contesto adeguato per l’interpretazione delle sonificazioni dei dati

La storia della rappresentazione dei dati in suoni

L’idea di rappresentare i dati in suoni è in realtà molto antica. Per gli antichi Greci, la musica non era un’arte fine a se stessa, praticata nel vuoto, bensì la manifestazione degli stessi rapporti e relazioni trovati nella geometria o nelle posizioni e comportamenti dei pianeti. Pitagora, Platone e Aristotele lavorarono su espressioni quantitative di proporzione e bellezza, come il rapporto aureo. I Pitagorici quantificarono gli intervalli musicali armoniosi in termini di proporzioni (rapporti) dei numeri 1, 2, 3, 4 e 5. Ciò costituì la base per le scale, i modi ed i sistemi di accordi usati nella musica occidentale.

Gli intervalli armonici pitagorici (a sinistra) e le armoniche di una corda vibrante (a destra).

Come osservò Giovanni Keplero, l’universo fluttua a differenti scale di tempo e di dimensioni. Noi possiamo udire solo un piccolo range di queste fluttuazioni come suoni, e cioè quando vibrano a frequenze comprese fra 20 e 20.000 volte al secondo (Hertz, o Hz). Analogamente, possiamo vedere solo un piccolo range (differente) come luce visibile che va dal rosso al violetto. I limiti dei nostri sensi rendono difficile per noi apprezzare pienamente come il nostro cosmo sia strutturato in modi sensati dal punto di vista armonico e delle proporzioni (e quindi potenzialmente traducibili in musica).

Keplero cercò di studiare questa armonia e la comunicò attraverso le sue tre famosissime leggi del moto planetario. Egli cercò anche di mappare in suoni l’armonia che osservava nei dati astronomici disponibili all’epoca, cioè di “sonificarli”. Nel 1619, pubblicò il suo libro Harmonices mundi, “armonie del mondo”. Come risultato, Keplero divenne una figura chiave nello sviluppo dell’astronomia e della fisica moderna. Ma in realtà, quello fu soltanto l’inizio, ad esempio nell’astronomia.

Seguendo gli studi di Keplero, alla fine del Settecento Johannes Titius e Johannes Bode contribuirono in modo indipendente a un modello delle simmetrie e delle proporzioni del nostro Sistema Solare. La loro formula, nota oggi come “Legge di Titius-Bode”, predice le posizioni dei pianeti in termini di distanza dal Sole. Di fatto, predisse anche la presenza della fascia degli asteroidi (risultato di un pianeta “mancato”) fra Marte e Giove ben prima che questa venisse effettivamente scoperta dagli astronomi.

La legge di Titius-Bode per il Sistema Solare.

Sebbene i compositori abbiano esplorato le possibilità timbriche per secoli, la manipolazione del timbro era vincolata alle interazioni con strumenti acustici o con la voce. Nel secolo scorso, l’avvento della registrazione e della sintesi ha portato a nuove possibilità di manipolazione sonora, il che ha portato a sua volta a delle nuove tecniche compositive. Naturalmente, si può discutere se la “sonificazione” che è stata così resa possibile appartenga al regno della musica, dell’arte, della scienza o di tutti e tre.

Nel regno della musica ma al confine con la scienza, alla fine degli anni ’50, compositori come Xenakis sperimentarono applicando le tabelle di probabilità matematica alla musica nel pezzo Achorripsis, che ha applicato quelle tabelle di probabilità a diversi parametri musicali. Xenakis rappresentò anche la meccanica statistica dei gas nel suo pezzo Pithoprakta (1955-56), in cui ogni molecola che si muove nello spazio si lega a uno strumento a corda e ad un tono. Egli creò la sua simulazione di temperature e pressioni e creò i suoi grafici di queste simulazioni per aiutarsi nella composizione.

Oggi esistono diverse tecniche per il rendering uditivo dei dati, come questi della legge di Titius-Bode o altri. Molti studi sono stati intrapresi per cercare di trovare le migliori tecniche per i vari tipi di informazioni da presentare, e finora non è stato formulato alcun insieme conclusivo di tecniche da utilizzare. Poiché l’area della sonificazione è ancora considerata nella sua infanzia, gli studi attuali stanno lavorando per determinare il miglior set di componenti audio da variare in diverse situazioni.

Oggi esistono già alcuni software per facilitare la sonificazione dei dati.

La sonificazione: cosa è ed alcuni esempi noti

La sonificazione è il processo di trasformazione delle informazioni non uditive in suono. Ci sono molti fenomeni rappresentabili in termini quantitativi – ad esempio tramite apposite misurazioni o acquisizione di dati – che si verificano in natura (e nel mondo umano), e una cosa che i compositori hanno spesso sperimentato è una sonificazione dei dati numerici sottostanti. Come suonano le stelle nel cielo? O le fluttuazioni del mercato azionario? Cosa significherebbe “ascoltare” queste cose?

La questione di come sonificare dei dati è un problema di mappatura, poiché la prima cosa che deve essere fatta è capire come mappare o correlare le informazioni originali a parametri sonori come intonazione, ampiezza, e timbro. In pratica, la sonificazione non è altro che un processo che consiste nel mappare i numeri in parametri musicali: intonazione, durata, volume, posizione del “pan” e timbro, per percepire meglio gli schemi presenti nei dati ed apprezzarne le loro caratteristiche.

Infatti, quando si ha a che fare con “big data” (cioè con grandi quantità di dati), talvolta è più facile riconoscere gli schemi sottostanti trasformando i dati in suono, anziché guardare a migliaia di milioni di numeri. Un chiaro e semplice esempio di sonificazione è costituito dal contatore Geiger, un dispositivo che misura la radiazione ionizzante e la trasforma in “clic” udibili. Il numero (frequenza) di clic è in questo caso direttamente proporzionale al livello della radiazione nelle vicinanze del contatore.

Tracce audio registrate da un contatore Geiger in azione. Puoi ascoltarle qui.

Un altro esempio di sonificazione, ben noto a tutti soprattutto grazie a film e telefilm, è il biosegnale che vediamo nelle terapie intensive degli ospedali. Esso è mostrato dai monitor multiparametrici, che monitorano i segnali vitali misurati nel corpo umano, come ad esempio il battito cardiaco. Questi monitor, in modo simile a quanto fa il contatore Geiger, forniscono un costante feedback sonoro, permettendo all’operatore sanitario di concentrarsi su altri compiti.

Negli anni ’80, i pulsossimetri entrarono in uso diffuso, e sono cruciali per chi ha problemi di respirazione e può necessitare di ossigenazione. I pulsossimetri possono sononizzare la concentrazione di ossigeno nel sangue emettendo tonalità più alte per concentrazioni più elevate. Tuttavia, in pratica questa particolare caratteristica dei pulsossimetri potrebbe non venire ampiamente utilizzata dai professionisti medici a causa del rischio di troppi stimoli audio in ambienti medici.

Anche mappare un valore da un intervallo a un altro è un altro modo assai comune e semplice di effettuare la sonificazione. Per esempio, potresti voler mappare una lista di numeri (diciamo da 20,0 a 110,0) a valori tono (diciamo da 30 a 90). Ciò diventa più realistico se sei interessato, ad esempio, al riscaldamento globale e vuoi esplorare come le temperature sono cambiate nel tempo. Convertendo i valori delle temperature in toni, puoi letteralmente ascoltare questi cambiamenti.

La sonificazione può essere applicata in qualsiasi campo della scienza. Qui sopra ne vediamo schematizzati un paio di esempi.

Come effettuare la mappatura dei dati in suoni   

Molti componenti diversi possono essere modificati per cambiare la percezione dell’utente del suono e, a sua volta, la sua percezione delle informazioni sottostanti rappresentate. Spesso, un aumento oppure una diminuzione di un certo livello in queste informazioni è indicato da un aumento o una diminuzione di intonazione, ampiezza o tempo, ma naturalmente potrebbe anche essere indicato variando altri componenti meno comunemente utilizzati.

Ad esempio, un prezzo del mercato azionario potrebbe essere rappresentato dall’aumento dell’intonazione quando il prezzo delle azioni è aumentato e dal calo dell’intonazione quando è sceso. Per consentire all’utente di determinare che più di un’azione è stata rappresentata, è possibile utilizzare timbri o livelli di armonicità diversi per le diverse azioni oppure possono essere riprodotti all’utente da punti diversi nello spazio, ad esempio attraverso diversi lati delle cuffie.

Sonificazione del prezzo di un’azione. Puoi ascoltarla qui.

L’approccio più comune alla sonificazione dei dati è la mappatura dei parametri, in cui una dimensione dei dati mappa su un parametro uditivo come durata, intonazione, intensità, posizione, luminosità, etc. La libreria musicale del noto linguaggio di programmazione Python fornisce una funzione chiamata “mapValue()” che è esattamente quella che che serve per effettuare la mappatura dei dati in suoni. La funzione accetta i seguenti argomenti:

  • value – il numero che deve essere mappato
  • minValue – il numero più basso possibile da mappare
  • maxValue – il numero più alto possibile da mappare
  • minResult – il valore più basso dell’intervallo di destinazione
  • maxResult – il valore più alto dell’intervallo di destinazione.

Per esempio, se scriviamo la seguente funzione:

mapValue(24, 0 , 100, 32, 212)

essa converte i gradi Celsius in Fahrenheit, ed in particolare fornisce 75, poiché converte 24° C in 75° F. Per verificare che questa conversione effettivamente funziona, possiamo convertire gli estremi:

mapValue(0, 0 , 100, 32, 212)

Ora che abbiamo inserito il valore più basso dell’intervallo di temperatura (cioè 0), la funzione ci fornisce il tono più basso nell’intervallo di destinazione (cioè 32). Se invece scriviamo:

mapValue(100, 0 , 100, 32, 212)

ora che abbiamo inserito il valore più alto dell’intervallo di temperatura (cioè 100), la funzione ci fornisce il tono più alto nell’intervallo di destinazione (cioè 212). Naturalmente, se usiamo dei numeri con valori decimali anziché interi come quelli usati ora, otterremo dei valori decimali. Avendo verificato ciò, possiamo assumere che il resto dei valori verranno mappati in modo lineare, come se prendessimo due colonne di numeri, una che va da 0 a 100 e un’altra che va da 32 a 212, e le sovrapponessimo.

Alcuni parametri del suono utilizzabili per la mappatura di dati in suoni.

Esiste, inoltre, un’altra funzione, chiamata “mapScale()”, che è simile alla funzione “mapValue()” ma ha un sesto argomento aggiuntivo: scala – la scala musicale da usare nell’intervallo di destinazione. Questa funzione quantizza il risultato numerico in modo da adattare i toni nella scala fornita. La chiave della scala è determinata da “minResult”. Per esempio, qualsiasi tono C – ad esempio C4 (60), C5 (72), etc. – corrisponde alla chiave di C, qualsiasi tono D corrisponde alla chiave di D, e così via.

Costringere i toni su una scala permette di generare sonificazioni esteticamente più piacevoli da ascoltare. La differenza fra le funzioni “mapValue()” e “mapScale()” è che la prima ci fornisce valori decimali accuratissimi, mentre la seconda ci fornisce dei valori interi. Naturalmente, la funzione “mapScale” restituisce valori interi poiché essi verranno usati quali toni. Tanto per fare un esempio, riceveremo come risultato il valore di 64 dalla funzione applicata ai seguenti valori:

mapScale(0.5, 0, 1, 0, 127, MAJOR_SCALE)

Due esempi concreti di mappatura con Python

Ma vediamo un esempio concreto. Ritornando alla citata Legge di Titius-Bode per il Sistema Solare, si può realizzare un programma – chiamato harmonicemundi.py – che sonifica questo aspetto dell’organizzazione celeste dei pianeti: in particolare, converte le velocità orbitali dei pianeti in note musicali. Le velocità medie orbitali dei pianeti (espresse in chilometri al secondo) sono le seguenti:

Possiamo mappare quest’intervallo di velocità in un intervallo di toni MIDI, diciamo da C1 a C6. Per fare questa mappatura, possiamo usare la funzione “mapScale()”, come mostrato dal listato del programma in Python – un linguaggio di programmazione orientato agli oggetti – riportato qui sotto (il listato può essere creato e modificato con un editor di testo, ma l’esecuzione richiede un interprete Python):

Si noti come siano state usate le funzioni “min()” e “max()” per trovare i valori di velocità minimo e massimo. In teoria, si sarebbe potuto fare a mano, ma è bene evitare di introdurre “numeri magici” (cioè di numeri piombati nel listato “dal nulla”) che non scaturiscano – cioè siano calcolati – direttamente dai dati forniti in ingresso, come ben sa qualsiasi sviluppatore di software esperto, giacché i numeri magici possono diventare in futuro (in caso di espansione della base di dati) fonte di errore.

Si noto come la funzione “mapScale” sia impiegata per sonificare le velocità orbitali. Il valore dei toni viene posizionato nell’intervallo da C1 a C6 in modo simile a come la velocità è posizionata nell’intervallo che va da “minVelocity” a “maxVelocity”. Inoltre, viene usato un loop “for” per mappare ciascuna velocità in “planetVelocities” al corrispondente tono (nell’intervallo da 24 a 84). Alla fine, viene creata una lista “planetPitches” e contiene un tono per ogni pianeta (ovvero per ogni velocità).

Vi sono vari modi per sonificare questi dati. Una possibilità è quella di suonare, semplicemente, la melodia generata dai toni. Un’altra possibilità è quella di creare un pezzo musicale usando la suddetta melodia come componente. Per esempio, potremmo usare la melodia originale come una linea di basso, aggiungere, strumenti a corda, una batteria e altro materiale musicale. Qui, nello spirito di Bach, costruiamo un “canone” dalle velocità orbitali sonificate.

Esistono numerosi modi per sonificare dei dati.

Per fare ciò, trattiamo la melodia come il tema ed usiamo i “dispositivi canonici” per creare un canone celeste. Scegliamo di suonare la melodia in modo concorrente, contro se stessa, usando diverse durate. Il codice mostrato in precedenza implementa questa struttura del canone. Si noti come abbiamo creato tre differenti melodie – melody1, melody2 e melody3 – per contenere la stessa lista di toni (quella sonificata in precedenza), ma con differenti durate, aggiungendo rispettivamente 5, 10 e 20 battiti.

Diagramma di una struttura a canone.

Dopodiché, aggiustiamo il tempo di partenza di ciascuna melodia (es. le facciamo partire a 0.0, 10.0 e 20.0), così che siano introdotte in modo incrementale ma finiscano tutte insieme. Naturalmente, è possibile modificare la precedente sonificazione ed usare una differente struttura musicale. L’obiettivo è di ottenere qualcosa di esteticamente piacevole. Ad esempio, si potrebbero usare delle scale differenti con la funzione “mapScale()”. Insomma, puoi davvero sbizzarrirti.

Naturalmente, è possibile ricavare della musica anche da un testo. Un modo semplice per ricavare per via algoritmica delle strutture musicali è quello di seguire alcuni schemi esistenti nei dati. Non sono infatti solo i dati astronomici ad essere una sorgente di dati: lo è anche il linguaggio naturale, ad es. nel caso dell’inglese. Poiché questi linguaggi hanno una loro struttura inerente, come descritto da Noam Chomsky, è ragionevole aspettarsi che la musica basata su un testo conservi l’espressività di tale struttura.

La sonificazione di un testo, in modo simile alle altre sonificazioni, usa mappature semplici o complesse fra testo e suono. In pratica, usando la funzione  “ord()” di Python, è possibile convertire i valori ASCII dei caratteri in toni MIDI. Per ottenere una varietà, però, la durata delle note può essere imposta casuale, mentre le altre proprietà delle note (volume, etc.) possono essere le stesse per tutte le note. Il programma qui sotto mostra un esempio di come fare ciò, con in cima la stringa per sonificare.

Se cambi questa stringa, otterrai una musica differente, sebbene similare. Questo perché la musica generata dipende dalle probabilità (frequenze) relative dei caratteri nella lingua inglese. I caratteri ASCII sono rappresentati da interi che vanno da 0 a 127, ed in un normale file di testo possono essere mappati direttamente in toni MIDI (da 0 a 127) con l’istruzione “pitch = ord(character)”. Qui però è stata scelta una mappatura più musicale, utilizzando la “scala pentatonica”.