X

Come funziona un software di riconoscimento vocale come Shazam?

Pubblicato da il giorno 3 febbraio 2012

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

La prima cosa interessante da sapere è che questa tecnologia è molto più complessa di quanto si crede, è molto difficile trovare documenti che spiegano semplicemente la procedura, e in pochissimi sapevano qualcosa fino alla pubblicazione di questo documento, scritto dallo scienziato Avery Li-Chun Wang. Chi è costui? Il co-fondatore di Shazam! Per poter leggere e capire il documento ho dovuto attenermi a diverse fonti, tra cui Wikipedia e questo blog inglese che ne ha parlato. Ora cerchiamo di spiegare…

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. Per qualsiasi dubbio o errore non esitare a commentare! Un ringraziamento a Wikipedia ed a SoYouCode per le spiegazioni.

, 872 articoli pubblicati

Fin da quando ho 7 anni sviluppo siti web, amo l'informatica, la fotografia, la scienza e l'economia. Credo che il segreto del successo stia nel fare cose che altri non fanno. Nel 2008 ho fondato Skimbu, a cui ho voluto fin da subito dare una precisa immagine attraverso una grafica semplice, bella e unica e attraverso articoli di qualità e anch'essi unici. Continuerò Skimbu fino a che avrò voglia, con la passione e la voglia di far apprendere alla gente che esiste qualcosa di più meraviglioso che la televisione o che le solite dichiarazioni dei politici.

Visita il sito web di questo autore

Condividi l'articolo!

  • Mattia

    Tanta roba Shazam!!!

  • Matteo

    Decisamente interessante, mi hai dato un grande aiuto anche per un progetto che sto sviluppando.

    Grazie mille, ottimo articolo

  • Mario

    Nulla di nuovo per me ma ottimo lavoro….complimenti!

  • Dima9_3

    Sto portando avanti un progetto simile a shazam e lo scoglio che non riesco a superare è il campionamento degli spettrogrammi di tutte le canzoni…come posso fare?