Indice
Tutti conosciamo Shazam e SoundHound. Sono due software che riconoscono la musica che stai sentendo (alla radio o chissà dove) e ne riconoscono il titolo. Come fanno a cercare in pochi secondi tra le migliaia di canzoni del database e restituire il titolo? È una domanda a cui è difficile dare una risposta semplice, perché viene utilizzata una particolare tecnologia di riconoscimento audio che nemmeno Wikipedia in italiano descrive. Dopo varie ricerche su Query by humming, Spettrogramma e Actoustic Fingerprint proviamo a dare delle risposte.
Introduzione
Per effettuare questa ricerca sono partito dalla pagina Shazam di Wikipedia in inglese. Attraverso una catena di link sono più o meno riuscito a capire come Shazam e SoundHound lavorano. Nonostante molti preferiscano il primo al secondo, ricordiamo che il vero inventore della tecnologia è proprio Shazam, fondato addirittura nel lontano 1999.
Partiamo dall’inizio, cosa fanno questi software? Sei in un bar e viene fatta ascoltare una musica che ti piace molto ma non ne conosci il titolo, tiri fuori lo smartphone, apri il software, registri (tagghi) quello che stai ascoltando, aspetti circa un massimo di 20 secondi e il software ti restituisce il titolo, l’autore, l’album ed altre informazioni. Se l’audio è registrato bene (senza rumore) le probabilità che il software azzecchi la musica sono altissime, personalmente a me ha sempre azzeccato tutte le musiche. Dunque, come funzionano questi software? Come fanno a scoprire in pochi secondi quale musica state ascoltando? Cerchiamo di scoprirlo…
Il funzionamento
Il primo passo è avere un database con tutte le impronte acustiche (Acoustic Fingerprints) di tutte le musiche del mondo, immaginate che investimento e che lavoro ha dovuto fare Shazam per catalogare tutte le musiche! Cosa sono le impronte acustiche? Sono un riassunto digitale dell’intensità, del tempo e della frequenza dei suoni di una musica. Essere possono essere generate solo da un input audio e vengono rappresentatate sullo spettogramma, che possiamo definirlo il “diagramma cartesiano musicale”. Lo spettrogramma (immagine sopra) è dunque la rappresentazione grafica dell’intensità di un suono in funzione del tempo e della frequenza. Nell’immagine sopra puoi vedere lo spettrogramma a colori della parola mano pronunciata da un italiano.
Quando registrerai un pezzo di musica il software genererà automaticamente uno spettrogramma per il pezzo da te registrato e lo comparerà con tutte le impronte acustiche nel database, che sono circa 8 milioni. È questo il processo più complesso del programma, cerchiamo di spiegarlo. Il nostro spezzo registrato sarà disegnato su uno spettrogramma con frequenza (asse Y), tempo (asse X) e una terza dimensione che riguarda il volume della musica, rappresentato sullo spettogramma da un colore più o meno scuro. Ecco uno spettrogramma di esempio di un pezzo registrato
Come notiamo ci sono dei puntini più scuri che rappresentano un volume più alto rispetto ai puntini chiari ad un determinato tempo e frequenza. Per velocizzare e semplificare il processo, il software terrà conto solo delle parti in cui la musica è più forte, quindi con un volume più alto, lo spettrogramma semplificato sarà così
Ancora una volta per semplificare e velocizzare il processo, il software sceglie un gruppo di punti, chiamato Target Zone, e prendono un punto vicino al target zone, chiamato Anchor Point
Viene quindi creato un hash per ogni punto della target zone che sarà (f1+f2+(t2-t1))+t1 dove
f1 sta per la frequenza dell’anchor point
f2 sta per il punto della target zone
t2 sta per il tempo del punto della target zone
t1 sta per il tempo dell’anchor point
Questo hash, che si tratta essenzialmente di un semplice algoritmo ripetuto per ogni punto del target zone, sarà salvato nel database. Ora che si ha l’hash può essere cercata la musica nel database, pare che il procedimento sia più veloce di quanto noi possiamo immaginare. Se un risultato presunto viene trovato, allora verranno messi in un grafico th1 e th2 che sono rispettivamente i tempi dell’hash e del risultato del database. I due tempi verranno comparati, i puntini nel grafico rappresentano sempre il volume della musica più alto:
Come forse avrai già capito, le due musiche del grafico sopra non sono uguali! Infatti questo grafico sotto rappresenta due musiche che presentano più punti che si intersecano e ci troviamo di fronte a due musiche molto probabilmente uguali.
Un ultimo controllo verrà effettuato mediante un istogramma che compara i picchi di volume tra i due risultati, se ad un certo tempo troveremo una barra dell’istogramma molto alta, sarà confermata un uguaglianza delle due impronte acustiche.
Conclusioni
Abbiamo dunque scoperto, più o meno, come funziona il riconoscimento delle musiche su Shazam e sugli altri software di riconoscimento audio. In sintesi il trucco sta nel comparare e analizzare i picchi di volume delle musiche e il loro tempo.