Sentire il suono di un algoritmo è un concetto affascinante e rientra nell’ambito della sonificazione, ovvero la trasformazione di dati in suono. Questo può essere fatto per vari scopi, tra cui l’arte, la scienza, e l’analisi dei dati.
Come far suonare un algoritmo? Operativamente, ecco un processo di base per creare un’esperienza sonora di un algoritmo:
- Seleziona l’algoritmo: Scegliere l’algoritmo che desideri trasformare in suono. Potrebbe essere un algoritmo di ordinamento, un generatore di numeri casuali, una rete neurale, ecc.
- Raccogli i dati: Eseguire l’algoritmo e raccogli i dati di interesse durante la sua esecuzione. Ad esempio, per un algoritmo di ordinamento, potresti raccogliere lo stato dell’array a ogni passo.
- Mappa i dati a parametri sonori: Decidere come i dati verranno mappati a parametri sonori. I parametri possono includere:
- Frequenza: La frequenza delle note può essere mappata ai valori numerici dei dati.
- Durata: La durata delle note può essere basata sul tempo o su certi eventi nell’algoritmo.
- Volume: Il volume può variare in base all’importanza dei dati o a certi limiti.
- Timbro: Diversi timbri o strumenti possono rappresentare differenti tipi di dati o stati.
- Genera il suono: Usare un software di sintesi sonora o programmazione musicale per generare il suono. Linguaggi e strumenti popolari includono:
- Python con librerie come
pydub
,scipy
, omusic21
. - Max/MSP: Un ambiente grafico per musica e multimedia.
- SuperCollider: Un linguaggio per la sintesi audio in tempo reale.
- Sonic Pi: Un ambiente di live coding per la creazione di musica.
- Python con librerie come
L’algoritmo di cui vi mostriamo la sonorizzazione è la Depth-First Search (DFS), un metodo di ricerca utilizzato per esplorare i nodi e i bordi di un grafo, ovvero l’insieme di nodi che compone una rete. La DFS inizia da un nodo di partenza e procede il più possibile lungo ciascun ramo, prima di tornare indietro e proseguire in altra direzione. Questo significa in altri termini che l’algoritmo esplora un percorso completo fino a un nodo terminale prima di retrocedere e provare un percorso alternativo. DFS è utilizzato per risolvere vari problemi di ricerca, come il labirinto (per trovare un percorso da un punto all’altro), il problema del percorso (per trovare un percorso che soddisfi determinate condizioni), ma si rivela utile anche per generare alberi di ricerca in algoritmi di backtracking, come quelli usati nella risoluzione di puzzle o problemi combinatori.
Nel nostro esempio, il processo inizia con un nodo di partenza. Utilizziamo uno stack per tenere traccia dei nodi in attesa di essere visitati. All’inizio, lo stack contiene solo il nodo di partenza. Mentre l’algoritmo procede, ogni nodo viene estratto dallo stack, segnato come visitato, e i suoi vicini non visitati vengono aggiunti allo stack. Questo continua finché lo stack non è vuoto, il che indica che tutti i nodi raggiungibili sono stati esplorati. Per visualizzare il processo, abbiamo utilizzato una libreria di plotting, NetworkX, per disegnare il grafo. I nodi sono inizialmente colorati di blu, e quando un nodo viene visitato, il suo colore cambia in verde. Questo fornisce una rappresentazione visiva chiara di come l’algoritmo esplora il grafo passo dopo passo. Per rendere l’algoritmo non solo visibile ma anche udibile, abbiamo sonorizzato il processo: ogni volta che un nodo viene visitato, viene generato e riprodotto un tono sonoro specifico. La frequenza del tono è determinata dal numero del nodo, usando la formula frequency = 200 + node * 20
. Questo significa che nodi diversi producono toni a frequenze diverse, con nodi numericamente più alti che producono toni a frequenze più alte. La durata di ogni tono è breve, solo 0.1 secondi, per garantire una transizione fluida tra i toni mentre l’algoritmo procede. Il volume del tono è mantenuto costante al 50%, per evitare variazioni di intensità che potrebbero essere fastidiose. Durante l’esecuzione dell’algoritmo, ogni volta che un nodo viene visitato, il disegno viene aggiornato per riflettere il cambiamento di colore del nodo, e un tono viene riprodotto per rappresentare auditivamente la visita del nodo.
Questo approccio non solo visualizza il comportamento della DFS, ma lo rende anche percepibile uditivamente, trasformando il processo di esplorazione del grafo in un’esperienza multisensoriale. E non finisce qui, naturalmente: programmatori come Timo Bingmann si sono spinti a sonorizzare algoritmi di ordinamento di vario tipo, osservando come ognuno di essi produca un tipo di suono e di “mood” musicale diverso dagli altri. Questo potrebbe spingere alcuni produttori musicali a ideare musica algoritmica nel senso stretto del termine, abituandoci all’idea che l’arte possa essere prodotto anche da una macchina, sulla base del concetto di imitazione espresso per primo da Alan Turing.
Ingegnere per passione, consulente per necessità; ho creato Lipercubo.it. – Mastodon