Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Matteo Spanio
Agosto — Settembre 2020
Introduzione
I want to make one minor quibble about the idea that there’s
Mathematics behind anything: there is no math behind anything.
Math is one of the languages that we use to describe the world,
computational languages are also languages that we use to describe
the world.
Allen Downey, Scipy Conference, 2015
I generi musicali sono etichette create e utilizzate dagli esseri umani per clas-
sificare e descrivere il vasto universo della musica; non hanno definizioni e confini
rigidi poiché sorgono attraverso una complessa interazione tra fattori pubblici,
economici, storici e culturali.
L’estrazione automatica delle informazioni musicali sta acquisendo importanza
come un modo per strutturare e organizzare il numero sempre più elevato di file
musicali disponibili digitalmente sul Web. È molto probabile che nel prossimo
futuro tutta la musica registrata nella storia umana sarà disponibile sul Web e
l’analisi automatica della musica sarà uno dei servizi che i fornitori di distribuzione
di contenuti musicali utilizzeranno per attirare i clienti.
Le gerarchie di genere, che in passato venivano create manualmente da esper-
ti umani, sono attualmente uno dei modi utilizzati per strutturare i contenuti
musicali sul Web. La classificazione automatica del genere musicale riesce ad
automatizzare questo processo e fornire una componente importante per un siste-
ma completo di recupero delle informazioni musicali per i segnali audio. Inoltre
fornisce una struttura per lo sviluppo e la valutazione delle funzionalità per la
descrizione del contenuto musicale.
Indice
1 Il suono digitale 1
1.1 Il Campionamento . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2 La Quantizzazione . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.3 La Trasformata Discreta di Fourier . . . . . . . . . . . . . . . . . . 3
1.4 Pulse Code Modulation . . . . . . . . . . . . . . . . . . . . . . . . . 5
Convenzioni usate Nel testo sono presenti numerosi riferimenti alla bibliografia
Il suono digitale
Secondo la fisica, il suono è una vibrazione itinerante, cioè un’onda che si muove
attraverso un mezzo come l’aria. L’onda sonora trasferisce energia da particella
a particella fino a quando non viene finalmente “ricevuta” dalle nostre orecchie
e percepita dal nostro cervello. I due parametri fondamentali per descrivere un
suono sono l’ampiezza (ciò che chiamiamo anche volume) e l’altezza (o frequenza,
la misura delle oscillazioni dell’onda per unità di tempo).1
La recente crescita tecnologica ha comportato un deciso miglioramento delle
performance di velocità e di densità di circuiti e memorie, rendendo possibile la
rappresentazione digitale di grandi quantità di dati, compresi i segnali acustici.
Nello specifico la digitalizzazione del suono ha comportato una serie di trasforma-
zioni a partire dagli anni ’80, che hanno interessato sia i professionisti che i fruitori
di musica. Dall’introduzione sul mercato del primo CD per uso commerciale nel
1982 ad oggi si è assistito alla nascita (e fine) di numerosi supporti digitali (Digital
Audio Tape, MiniDisc, USB, DVD, HDD, SSD, Cloud).2
Ciò ha permesso che il trattamento e il processo numerico dei segnali digitali
(DSP3 ) assumesse una netta preponderanza rispetto a quello analogico: una suc-
cessione di numeri che rappresentano l’ampiezza del segnale in precisi e ravvicinati
istanti di tempo4 è molto più precisa e affidabile di un’approssimazione non di-
screta acquisita su un nastro magnetico. Quindi si è dovuto progettare dei sistemi
in grado di convertire il suono analogico in una successione di valori che vadano
a descrivere i vari parametri del suono (altezza, intensità, timbro). Osservando
la rappresentazione cartesiana di un’onda sonora nel dominio del tempo si nota
come l’asse delle ordinate descriva l’ampiezza e l’asse delle ascisse metta in evi-
denza la frequenza a cui si muove l’onda. La conversione del suono da analogico
a digitale avviene quindi sui due livelli suddetti: si parlerà di campionamento per
la frequenza e quantizzazione per l’ampiezza.
1.1 Il Campionamento
Il campionamento è la discretizzazione del segnale analogico nel tempo.5
In altre parole, il campionamento viene utilizzato per convertire il segnale con-
tinuo variabile nel tempo in una sequenza discreta di numeri reali.6 L’intervallo
tra due successivi campioni discreti è il periodo di campionamento (T c). Si parlerà
1
Righini 2009
2
Cipriani e Giri 2013
3
acronimo inglese: Digital Signal Processing (Downey 2014)
4
Lombardo e Valle 2008, p. 44
5
ivi, p. 47
6
Giannakopoulos 2020
1
di frequenza di campionamento7 (f c = T1c ) come attributo che descrive il processo
di campionamento.
Dal momento che la rappresentazione del segnale è data dalla variazione del-
l’ampiezza nel tempo, il campionamento corrisponde all’individuazione periodica
della presenza di segnale sull’asse delle ascisse. Nel dettaglio, per poter descrivere
correttamente un segnale, occorre campionarne almeno un punto nella fase positi-
va e uno nella fase negativa, se non si facesse cosı̀ si incorrerebbe nella perdita di
valori essenziali per ricreare l’onda, e in fase di interpolazione si creerebbero dei
segnali non presenti originariamente o se ne perderebbero degli altri.8 Ovviamen-
te più brevi saranno gli intervalli di tempo tra un campione e l’altro, più simile
all’originale analogico sarà il suono campionato. Al limite, per intervalli di tempo
infinitamente brevi, il segnale digitale corrisponderà a quello reale. Generalizzando
si è osservato che per ovviare alla perdita di informazioni, occorre che il campiona-
mento prelevi almeno due campioni per la parziale di frequenza massima persente
nel segnale (f c = 2 × f reqmax ).9
1.2 La Quantizzazione
La quantizzazione è il processo di sostituzione di ogni numero reale della sequenza
di campioni con un’approssimazione da un insieme finito di valori discreti. In altre
parole, la quantizzazione è il processo di riduzione della precisione del numero
infinito di un campione audio a una precisione finita definita da un particolare
numero di bit.10
Nella maggior parte dei casi, vengono utilizzati 16 bit per punto per rappre-
sentare ciascun campione quantizzato, il che significa che ci sono 216 livelli per il
segnale quantizzato. Per questo motivo, i valori audio grezzi di solito variano da
−215 a 215 (1 bit usato per il segno), tuttavia questo è solitamente normalizzato
nell’intervallo (-1, 1) per semplicità.11
7
Alcuni testi si riferiscono a questo valore con tasso di campionamento per distinguerlo dalla
frequenza nel senso di cicli al secondo per un segnale, rispecchiando la differenziazione linguistica
che avviene in inglese tra frequency per frequenza e sample rate per frequenza di campionamento.
8
Il cosiddetto fenomeno dell’aliasing o sottocampionamento.
9
Questa regola è stata definita dal teorema del campionamento di Nyquist-Shannon nel 1949,
anche se sarebbe più corretto chiamarlo teorema di Whittaker-Nyquist-Kotelnikov-Shannon
(WNKS), secondo l’ordine cronologico di chi ne ha dimostrato versioni via via più generaliz-
zate. Ad ogni modo ne deriva che la frequenza di campionamento standard è di 44100 Hz, ossia
il doppio di 22050 Hz, che è la massima frequenza udibile dall’orecchio umano (Lombardo e Valle
2008, p. 54 eDonati 2018, p. 92)
10
Giannakopoulos 2020
11
Di solito questa proprietà di risoluzione in bit della procedura di quantizzazione è detta
risoluzione del campione e viene misurata in bit per campione. Fayek 2016
2
Figura 1: (a) segnale analogico, (b) quantizzato, (c) campionato, (d) quantizzato e campionato
3
X0 , X1 , ..., XN −1 è descritta dalla formula:
N −1
2π
xn e−ik N n
X
Xk = k = 0, ..., N − 1
n=0
2π
dove i è l’unità immaginaria e e N è una radice dell’unità primitiva N -esima.13
In sostanza si ha che i numeri complessi Xk rappresentano l’ampiezza e la fase
di diverse componenti sinusoidali del segnale in ingresso xn . Il calcolo della somma
richiede O(N 2 ) operaioni aritmetiche, per ottimizzare le prestazioni dell’algoritmo
è stata ideata la trasformata veloce di Fourier (FFT) che calcola lo stesso risultato
con un numero di operazioni O(N log(N )). Nel caso in cui N sia una potenza
di 2 le operazioni diventano O(N log2 (N )) rendendo molto più veloce il calcolo
risolutivo della sommatoria da parte del computer. Infatti gli algoritmi DFT e
FFT sono un elemento essenziane nell’analisi digitale dei segnali.14 15
13
Wikipedia n.d.
14
Si vedrà poi nella sezione 2.2 come la DFT funga da base per altri processi fondamentali
come la STFT (Short Time Fourier Transform) e tutti quei procedimenti di analisi spettrale del
segnale.
15
Lombardo e Valle 2008, p. 78-79
4
1.4 Pulse Code Modulation
Il passo finale della digitalizzazione, che ingloba i processi di quantizzazione e
campionamento, è la generazione del codice associato al campione.
Esistono molti modi di codificare un segnale. Il modo di cui ci siamo con-
cettualmente serviti senza saperlo è il Pulse Amplitude Modulation (PAM), per il
quale un impulso occorre a ogni intervallo di campionamento, e l’ampiezza della
forma d’onda è un valore digitale che corrisponde all’ampiezza analogica (figura
2a). Ma il modello considerato standard per la codifica digitale è il cosiddetto
Pulse Code Modulation (PCM): l’informarmazione viene racchiusa in gruppi di bit
che rappresentano il variare dell’ampiezza nel tempo, l’uno corrsiponde a presen-
za di segnale, mentro lo 0 ne descrive l’assenza. Nella figura 2b si può vedere
la rappresentazione grafica della PCM: i numeri romani indicano la successione
dei campioni, e per ogni campione (di 3 bit) si trova un numero binario che ne
rappresenta l’ampiezza.
La codifica PCM è usata in tutti i settori dell’archiviazione e della trasmis-
sione digitale dei dati. La comodità di questa rappresentazione è che si possono
facilmente operare controlli o modifiche sui bit senza perdere il segnale originale,
inoltre è molto meno sensibile al rumore delle altre codificazioni.16
16
Cipriani e Giri 2013
5
Algoritmi di riconoscimento musicale
Gli algoritmi di elaborazione del segnale audio generalmente coinvolgono l’anali-
si del segnale, l’estrazione delle sue proprietà, la previsione del suo andamento,
il riconoscimento della presenza di uno schema nel segnale e il modo in cui un
particolare segnale è correlato ad altri segnali simili. Negli ultimi decenni l’elabo-
razione del segnale audio è cresciuta in modo significativo in termini di analisi e
classificazione del segnale. Ed è stato dimostrato che le soluzioni di molti problemi
esistenti possono essere risolte integrando i moderni algoritmi di machine learning
(ML) con le tecniche di DSP.17
Gli esseri umani possono facilmente distinguere tra vari suoni senza compiere
alcuno sforzo, ad esempio possiamo facilmente cogliere la differenza tra parlato
e musica, suoni di auto e camion, qualità del parlato di bambini e adulti, vari
altoparlanti, rumori e suoni utili, ecc. Lo scopo degli studi sugli algoritmi di
riconoscimento del segnale audio è quello di far si che anche i computer siano in
grado di cogliere la differenza tra i vari suoni. Le modalità di riconoscimento dei
segnali acustici avvengono principalmente in due maniere nella mente umana cosı̀
come per le macchine:
6
faccende che gli impediscano di selezionare autonomamente i brani musicali da
riprodurre (in particolar modo alla guida di un’autovettura).19
2.1 Shazam
Tra le varie tecnologie in grado di trasdurre un file musicale nei metadati che
lo descrivono quella che ha avuto maggior successo è Shazam.20 L’applicazione,
nata nel 2000, consta di un database ricchissimo, che permette al programma
di riconoscere correttamente moltissimi brani musicali sfruttando un ingegnoso
sistema di riconoscimento basato su una mappatura dell’audio detta fingerprint.21
Una delle particolarità di Shazam è che è in grado di riconoscere il brano
musicale anche in presenza di forti interferenze di rumore (fintanto che il segnale
che si desidera registrare sia udibile o non sia oggetto di marcheramento).
L’algoritmo, a grandi linee, consiste nell’acquisizione di un input audio, la
conversione di questo in svariate stringhe digitali (hashes token) e il confronto
di quest’ultima con un database di milioni di brani che hanno subito lo stesso
processo di riduzione, per poi essere collegati a un altro database contenente i
metatadi dell’audio trovato.22
2.1.1 Fingerprinting
Ogni file audio, che sia acquisito al momento o immagazzinato nel database, è sog-
getto all’operazione di fingerprint 23 , un processo attraverso il quale viene estratto
un hash 24 dalla traccia originale. Di fatto Shazam cerca di estrarre dai file i punti
più caratterizzanti, in quanto la fingerprint di ogni brano deve essere diversa dagli
altri. Il processo avviene attraverso l’analisi dello spettrogramma dell’audio dal
quale vengono selezionati i punti di inizio delle frequenze con maggiore energia
a determinati intervalli di tempo. Cosı̀ facendo si ottiene quella che viene det-
ta una costellation map, nome dovuto alla sua natura puntiforme, simile a una
costellazione. Si è scelto di lavorare sui punti di maggiore intensità dello spettro-
gramma perchè sono evidenti anche in presenza di rumore nel segnale e per la loro
sovrapponibilità lineare.25
19
Jakubec e Chmulik 2019
20
https://www.shazam.com
21
Wang e F 2003, Kalenzaga 2015
22
Krishna e Moukthika 2008
23
lett. impronta digitale
24
L’hash è una funzione non invertibile che mappa una stringa di lunghezza arbitraria in una
stringa di lunghezza predefinita.
25
I punti della costellation map sono distribuiti omogeneamente per tutto il brano, in maniera
che se dovessero essere confrontati con un piccolo estratto di esso l’algoritmo possa restituire
comunque un risultato soddisfacente.Wang e F 2003
7
(a) spettrogramma (b) costellation map
Uno spettrogramma molto ricco come quello di figura 3a può essere ridotto a
un semplice gruppo di coordinate, si veda fig. 3b. Questa operazione porta non
pochi vantaggi: la mappa ottenuta rimane molto simile all’originale, ma rende di
gran lunga più riconoscibili i punti caratteristici del segnale di partenza, in quanto
priva di “aloni” e, come si sa, i tratti evidenti sono più semplici da riconoscere di
quelli meno marcati.26
Una volta ottenuta la nuova fingerprint si va a cercarne una corrispondente nel
database. Idealmente, si può pensare a “far scorrere” la costellation map su tutte
le fingerprint dell’archivio digitale, in quanto, probabilmente, l’input dura solo
una piccola parte dell’intero brano, ed è necessario trovare esattemente i punti
combacianti per avere un risultato. Un po’ come quanto si fanno scorrere due
fogli trasparenti uno sopra l’altro cercando di far combaciare dei punti disegnati
in mezzo.
In questa maniera la ricerca potrebbe durare molto a lungo, dal momento che
più sarà grande il database, più operazioni di confronto punto per punto saranno
necessarie. Ecco allora che entrano in gioco i cosiddetti anchor points (lett. punti
26
In presenza di rapidi cambi di frequenza la costellation map risulta un po’ spostata rispetto
al segnale di partenza.
8
di ancoraggio): sono punti posti a una certa distanza uno dall’altro e dividono la
costellation map in regioni. Nello specifico ogni punto di ancoraggio è accoppiato
in maniera sequenziale con i punti nella sua zona di competenza e di ogni coppia di
punti viene calcolata la distanza temporale ∆t (figure 3c e 3d). I nuovi hash con-
terranno le informazioni della distanza tra l’anchor point e ogni punto della regione
relativa di modo che le fingerprint di un intero pezzo musicale vengano spezzetta-
te in tanti hash quanti i collegamenti tra anchor point e punti della costellation
map, in ogni integrando nelle informazioni la distanza temporale dell’anchor point
dall’inizio del pezzo, perdendo l’informazione della durata totale del brano.27
Questa operazione complessa rende la ricerca più veloce e precisa, infatti non
avverranno più confronti per singoli punti, ma per coppie e, se ogni punto è descrit-
to da 10 bit, e ∆t è contenuto in altri 10 bit, le operazioni di confronto avverranno
di 30 in 30 bit, aumentando di 20 bit la precisione del confronto.28
9
Indipendentemente da qualsiasi obiettivo particolare, un sistema di ML richiede
funzionalità robuste e discriminatorie che aiutino una macchina ad apprendere in
modo accurato e rapido. L’intelligenza di una macchina è definita dalla quantità di
training che le viene impartito. Normalmente l’intero set di dati non viene inserito
nel computer durante la fase di apprendimento, ma ne viene utilizzata solo una
parte. La difficoltà sta nel riuscire a fornire alla macchina una sufficiente quantità
di dati per poterne estrapolare i pattern caratteristici e riconoscerle.30 Occorre
quindi individuare dei nuovi attributi tra i quali discriminare i brani, in quanto il
metodo di fingerprint non si adatta al nuovo scenario.
È qui che entra in gioco la cosiddetta feature extraction che consente di estrapolare
dati dai segnali. La progettazione di caratteristiche descrittive per un’applicazione
specifica è la sfida principale nella costruzione di sistemi di riconoscimento dei
modelli. Una volta estratti i dati, è possibile utilizzare tecniche di apprendimento
automatico standard indipendenti dall’area di applicazione specifica. Per quanto
riguarda la musica sono stati sviluppati dei procedimenti di analisi in cui lo studio
può passare dalla rappresentazione del segnale nel dominio del tempo, a quella nel
dominio della frequenza. Qui di seguito sono riportate solo alcune tra le feature
extraction più usate31 :
1. zero crossing rate (ZCR), ossia quante volte il segnale cambia di segno in
un determinato intervallo di tempo (solitamente un secondo). Lo ZCR per
l’i-esimo istante di lunghezza N è definito dalla seguente equazione:
N
1 X
Z(i) = |sgn[xi (n)] − sgn[xi (n − 1)]|
2N n=1
10
2. spectral centroid è la frequenza centrale attorno alla quale gravita la STFT32 ,
e può essere calcolato attraverso la seguente formula:
N
Mt [n] × n
P
n=1
Ct = N
P
Mt [n]
n=1
11
(a) Forma d’onda con ZCR, Spectral centroid e Spectral rolloff
2.2.2 Riconoscimento
Una volta stabiliti i metodi di analisi dei segnali si può applicarli a un dataset
per ottenere dei dati che andranno a costituire l’elemento su cui verrà effettuato
il training del modello.
Per la classificazione si fa uso di quella che viene detta statistical patter reco-
gnition (SPR), ossia si valuta per ogni classe la funzione di densità di probabilità
(PDF dall’inglese probability density function) dei feature. In altre parole il mo-
dello cerca di definire uno standard per le varie categorie, per esempio, nella misica
hip-hop lo zero crossing rate è mediamente più elevato rispetto a quello di pezzi
di musica classica. Una volta che il dataset viene riorganizzato secondo la PDF si
applica quello che viene definito k-nearest neighbors (KNN), cioè il dataset viene
rielaborato in maniera da raggruppare gli elementi con feature simili. Ovviamente
ciò non tiene conto di possibili eccezioni e genera degli errori, intuitivamente, mag-
giore sarà la quantità di feature e la loro significatività, maggiore sarà la qualità
della categorizzazione.
È stato studiato che la capacità degli umani di classificazione corretta del genere
musicale è corretta nel 70% dei casi, mentre nelle macchine la stessa capacità si
12
aggira intorno al 60%, e in alcuni casi è maggiore, in base all’algoritmo e la quantità
di training usati.35 Da ciò se ne deducono due cose: la natura confusa dei confini
tra generi musicali e l’alta capacità delle macchine di riconoscere la musica per
categorie.
13
machine learning come quello descritto nella sezione 2.2. L’intento del programma
è quello di dimostrare la semplicità con cui è possibile creare un modello basandosi
su poche righe di codice.
Python è il linguaggio di programmazione che negli ultimi anni ha visto più
supporto per quanto riguarda il campo dell’A.I. ed è diventato uno standard nel
settore. È semplice da leggere e da imparare, dando quindi la possibilità al pro-
grammatore di concentrarsi sul problema da risolvere e non sulla difficoltà del
linguaggio.36
3.1 Codice
Prima di tutto bisogna importare tutte le librerie che serviranno per la corret-
ta esecuzione del programma: librosa è la libreria che permette l’estrazione dei
feature dal dataset, pandas è una libreria contenente operazioni per l’analisi dei
dati, numpy è adatto a situazioni in cui serve effettuare velocemente dei calcoli
complessi, matplotlib consente di disegnare grafici, os è la libreria che comunica
col sistema operativo, csv serve per leggere e scrivere file in formato csv, sklearn e
keras riguardano il machine learning.
# importazione delle librerie necessarie
import librosa
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
import os
import csv
import keras
from keras import models
from keras import layers
14
l’uno divisi in dieci categorie da cento brani ciascuna (blues, classical country,
disco, hiphop, jazz, metal, pop, reggae, rock).37
Attraverso alcuni semplici passaggi si estrapolano i feature (quelli trattati nella
sezione 2.2.1) dai file audio e vengono salvati ordinatamente in un file CSV (Comma
Separated Values). Per dettagli sul processo di estrazione dei feature si rimanda
alla documentazione ufficiale della libreria librosa.38
# creazione del dataset
# intestazione
header = ’filename chroma spectral_centroid spectral_rolloff zcr’
for i in range(1, 21):
header += f’ mfcc{i}’
header +=’ label’
header = header.split()
with file:
writer = csv.writer(file)
writer.writerow(header)
15
zcr = librosa.feature.zero_crossing_rate(y)
mfcc = librosa.feature.mfcc(y=y, sr=sr)
Una volta che è stato calcolato il file csv si può “ripulirlo” delle righe non utili
(l’intestazione) e creare un modello effettuando il training sui dati ottenuti. Il
dataset viene diviso in due parti: l’80% verrà usato per la fase di addestramento,
mentre il restante 20% servirà per proporre al modello dei test di casi “nuovi” da
analizzare.39
# apertura del file csv
data = pd.read_csv(’data.csv’)
data.head()
16
X_train, X_test, y_train, y_test = train_test_split(X, y,
test_size=0.2)
model.add(layers.Dense(128, activation=’relu’))
model.add(layers.Dense(64, activation=’relu’))
model.add(layers.Dense(10, activation=’softmax’))
model.compile(optimizer=’adam’,
loss=’sparse_categorical_crossentropy’,
metrics=[’accuracy’])
history = model.fit(X_train,
y_train,
epochs=20,
batch_size=128)
# predizioni
predictions = model.predict(X_test)
np.argmax(predictions[0])
Riferimenti bibliografici
B. P. Bogert, M. J. R. Healy e J. W. Turkey (1963). The quefrency alanysis of
time series for echoes: cepstrum, pseudo-autocovariance, cross-cepstrum, and
17
saphe cracking. In: Proceedings of the Symposium on Time Series Analysis,
pp. 209–243.
Chinchalikar, Saket et al. (2017). Application of Genetic Algorithm for Audio
Search with Recommender System. In: International Journal of Engeneering
Research & Technology 5.1.
Cipriani, Alessandro e Maurizio Giri (2013). Musica elettronica e sound Design.
Roma: ConTempoNet.
Donati, Marcello (2018). Fisica e Matematica elle Note Musicali e la loro conver-
sione in segnali digitali. Bergamo: Sandit.
Downey, Allen B. (2014). Think DPS, Digital signal processing in Python. Need-
ham (MA): Green Tea Press.
Fayek, Haytham M. (2016). Speech Processing for Machine Learning: Filter banks,
Mel-Frequency Cepstral Coefficients (MFCCs) and What’s In-Between. url:
https : / / haythamfayek . com / 2016 / 04 / 21 / speech - processing - for -
machine-learning.html.
Garima Sharma, Kartikeyan Umapathy e Sridhar Krishnan (2019). Trends in
audio signal feature extraction methods. In: Applied Acoustics 158. doi: 10.
1016 / j . apacoust . 2019 . 107020. url: http : / / doi . org / 10 . 1016 / j .
apacoust.2019.107020.
Giannakopoulos, Theodoros (2015). pyAudioAnalysis: An Open-Source Python
Library for Audio Signal Analysis. In: PloS one 10.12.
— (2020). Audio Handling Basics: Process Audio Files In Command-Line or Py-
thon. url: https://hackernoon.com/audio- handling- basics- how- to-
process-audio-files-using-python-cli-jo283u3y.
Jakubec, Maros e Michal Chmulik (2019). Automatic music genre recognition
for in-car infotainment. In: 13th International Scientific Conference on Su-
stainable, Modern and Safe Transport (TRANSCOM), pp. 1364–1371. doi:
10.1016/j.trpro.2019.07.189.
Kalenzaga, Christophe (2015). How does Shazam work? url: http://coding-
geek.com/how-shazam-works/.
Krishna, Mandla Vamshi e Dasika Moukthika (2008). Study on framework of au-
dio fingerprinting and Shazam’s working algorithm. In: International Journal
of Advanced Research (IJAR) 12, pp. 690–702. doi: 10.21474/IJAR01/8189.
url: http://dx.doi.org/10.21474/IJAR01/8189.
Lombardo, Vincenzo e Andrea Valle (2008). Audio e multimedia. Milano: Apogeo.
Nordby, Jon (mag. 2019). Environmental Sound Classification on Microcontrol-
lers using Convolutional Neural Networks. Tesi di laurea mag. Norwegian
University of Life Sciences. url: http://hdl.handle.net/11250/2611624.
18
Pandey, Parul (2018). Music Genre Classification with Python, A Guide to ana-
lysing Audio/Music signals in Python. url: https://towardsdatascience.
com/music-genre-classification-with-python-c714d032f0d8.
Righini, Pietro (2009). L’acustica per il musicista: Fondamenti fisici della musica.
Milano: Ricordi.
Tzanetakis, G. e P. Cook (2002). Musical genre classification of audio signals.
In: IEEE Transactions on Speech and Audio Processing 10.5, pp. 293–302.
Wang, Avery Li-chun e Th Floor Block F (2003). An industrial-strength audio
search algorithm. In: Proceedings of the 4 th International Conference on
Music Information Retrieval.
Wikipedia (n.d.). Trasformata discreta di Fourier. url: https://it.wikipedia.
org/wiki/Trasformata_discreta_di_Fourier.
19