Sound Analysis

Riccardo Bazzoni - 16/04/2020
Sound Analysis Cover 1920

La sinergia tra suono e immagine è da sempre una componente fondamentale nei nostri progetti e per questo approfondiamo costantemente le molteplici possibilità di estrazione dati nel campo sonoro. Sound Analysis è una ricerca volta allo studio e alla sperimentazione di alcune tecniche di analisi audio mirata al controllo e alla generazione di grafiche in tempo reale attraverso lo sviluppo di patch personalizzate per meglio comprendere il potenziale delle tecniche e adattarle alle nostre necessità. Per manipolare e tradurre i dati estrapolati dal suono abbiamo utilizzato l’ambiente di sviluppo Max/MSP by Cycling ’74.


 

DIGITALIZZAZIONE AUDIO
La digitalizzazione è il procedimento che converte un segnale analogico in segnale digitale. In ambito sonoro questo processo avviene attraverso il campionamento, un’operazione che consiste nel prelevare ogni secondo con una frequenza costante (frequenza di campionamento) dei campioni dal segnale originale. Maggiore è la frequenza e più alta sarà la qualità di ricostruzione del suono. Quando il suono viene campionato, ad ogni campione viene assegnato il valore di ampiezza più vicino all’ampiezza dell’onda originale. Le prime installazioni realizzato dallo studio utilizzavano l’analisi dello spettro, ricavando unicamente ampiezze e frequenze del segnale sonoro. Grazie al campionamento è stato possibile raggiungere un livello di precisione e sincronizzazione maggiore analizzando anche piccoli eventi e dettagli sonori che venivano persi nell’analisi dello spettro.


Nel video viene mostrato un esempio di come può essere utilizzata la lista che contiene le informazioni del campionamento, traducendo il valore di ogni campione in pixel.

SOUND TEXTURE 1D to 2D

Uno degli obiettivi di questa ricerca era trovare nuove modalità per estrapolare dati attraverso la tecnica del campionamento diverse da quelle già sperimentate. Di base nelle nelle nostre installazioni utilizziamo la media dei campioni per controllare diversi parametri legati al movimento delle particelle. In questo caso abbiamo esplorato la possibilità di creare mappe a due dimensioni attraverso il suono e generare campi vettoriali per controllare posizioni, velocità, forze, etc.
Il primo ostacolo era capire come trasformare la lista che contiene le informazioni dei campioni a due dimensioni, per fare questo, il suono viene registrato all’interno di un buffer con una dimensione di 1024 campioni, campionando così 1024 valori ogni 23.22 millisecondi.
I dati all’interno del buffer vengono poi convertiti in scala di grigi e rappresentati come pixel in una texture 1D (1024x1 px). La distribuzione dei pixel sulla superficie 2D, avviene dividendo la texture iniziale in 32 parti (32x1 px), e incolonnando le nuove texture sull’asse Y. Come ultimo passaggio i pixel vengono interpolati per raggiungere una nuova Dimensione da 32x32 px a 512x512 px.

Sound Analysis Audio 1D to 2D 961Audio Particles

ANALISI FFT
Gli armonici naturali sono una successione di suoni puri le cui frequenze sono multipli di una nota di base chiamata nota fondamentale. Tramite la trasformata di Fourier possiamo scomporre un segnale in tutte le sue componenti sinusoidali e visualizzare la struttura armonica di un segnale sonoro.
Utilizzando l'algoritmo FFT (ottimizzato per calcolare la trasformata discreta di Fourier) abbiamo realizzato un analizzatore di spettro che visualizza sull'asse Y i valori della frequenza e sull'asse X l’evoluzione del suono nel tempo.

ANALISI CEPSTRALE
In teoria dei segnali, il cepstrum è il risultato della trasformata di Fourier applicata allo spettro di un segnale. Tramite l’analisi cepstrale è stato possibile realizzare una patch che permette di tracciare la nota fondamentale di un segnale. Se la frequenza di campionamento è di 44100 e c'è un alto picco nel cepstrum la cui quefrenza è di 100 campioni, il picco indica la presenza di un pitch alla frequenza di 441Hz (44100/100 = 441 Hz).

inlets = 1;
outlets = 5;
function list()
{
var a = arrayfromargs(arguments);
ListAmp = a;
SpectrumSize = a.length;
outlet(0,ListAmp);
outlet(1,SpectrumSize);
}
function bang(){
var maxValueIndex = 0;
var freq = 440;
for(var i = 0; i < SpectrumSize; i++)
{
if (ListAmp[i] > ListAmp[maxValueIndex])
{
maxValueIndex = i;
}
freq = (44100 / (maxValueIndex + 1));
outlet(2,maxValueIndex);
outlet(3,freq);
}
ampiezzaMax = ListAmp[maxValueIndex]
outlet(4,ampiezzaMax);
} 

SCALA DI BARK 
La scala di Bark è una scala psicoacustica teorizzata da Eberhard Zwicker nel 1961 e prende il nome di Heinrich Barkhausen che propose le prime misurazioni soggettive del volume (loudness). La scala corrisponde alle prime 24 bande critiche dell'udito. Abbiamo ricreato e visualizzato questa scala implementando l’algoritmo Bark = [(26.81f) / (1960+f)]-0.53 applicato alle bande di frequenza estratte dall’analisi FFT tramite l’oggetto Max pfft~.

CROMOGRAMMA
Nella musica, il termine cromogramma si riferisce alle dodici diverse tonalità e serve per analizzare e cattura le caratteristiche armoniche, melodiche della musica. Per questa analisi abbiamo utilizzato Chromagram, un’oggetto esterno sviluppato in Max che genera una lista contenente i valori cromatici dei 12 toni.
Su questi dati applichiamo una soglia, ricavando una lista binaria che viene convertita in valori decimali ottenendo un ID, tramite un’oggetto custom realizzato in java script. L’ID seleziona da una lista l’accordo corrispondente, momentaneamente limitati a triadi maggiori e minori.

CODE 

inlets = 1;
outlets = 2;
var a,b,c,d,e,f,g,h,i,l,m,n;
var id;
function list(){
var myArray = arrayfromargs(arguments);
a = myArray[0] * 2048 ; 
b = myArray[1] * 1024 ; 
c = myArray[2] * 512 ; 
d = myArray[3] * 256 ; 
e = myArray[4] * 128 ;
f = myArray[5] * 64 ;
g = myArray[6] * 32 ;
h = myArray[7] * 16 ; 
i = myArray[8] * 8 ; 
l = myArray[9] * 4 ;
m = myArray[10] * 2 ; 
n = myArray[11] * 0 ; 
id = a+b+c+d+e+f+g+h+i+l+m+n ;
outlet(0, id);
}

CHORD LIST

2192, C_Major;
2320, C_Minor;
1096, Db_Major;
1160, Db_Minor;
548, D_Major;
580, D_Minor;
274, Eb_Major;
290, Eb_Minor;
137, E_major;
145, E_minor;
2116, F_Major;
2120, F_Minor;
1060, Gb_Major;
1058, Gb_Minor;
529, G_Major;
530, G_Minor;
2312, Ab_Major;
265, Ab_Minor;
1156, A_Major;
2180, A_Minor;
578, Bb_Major;
1090, Bb_Minor;
289, B_Major;
545, B_Minor;