skip to content

Shazam

by ViTo • July 26, 2008 1 comment

Anant força en contra de la corrent, he d’admetre que no sóc pas un fan del iPhone. S’ha de reconeixer però que té estil, incorpora nombroses funcionalitats i… perquè no dir-ho, mola; tot i això, no estic pas disposat a pagar el preu que Apple li ha posat (i creieu-me, tampoc em veig comprant un iPod o MacBook d’aquí poc 😉 ).

En qualsevol cas, vaig poder jugar una bona estona amb el de l’Alfred i el què em va sorprendre més va ser una petita aplicació que es diu Shazam. Què té d’especial? Bàsicament, pots reproduir qualsevol cançó i deixar que Shazam l’escolti aproximadament entre uns 5-10 segons i immeditament et dirà el títol, autor, àlbum, etc.

Aquí teniu un video que he trobat que mostra l’aplicació en acció (en anglès):

(comparativa més detallada en video)

No vull pas entrar en si l’aplicació és realment útil o no, tot i que crec que podria ser força beneficial per les botigues de música online; fàcilment podrien utilitzar aquesta tecnologia per incrementar les vendes. Pel què he vist, la implementació actual per l’iPhone és gratuïta, però la seva pàgina web fa referència a una versió prèvia del servei que funcionava basada en la taxa de reconeixement. Si no s’identifica la cançó no et cobren. Per tant, han d’estar bastant segur de les seves habilitats per identificar cançons…

El més sorprenent però, és el fet que l’aplicació sigui capaç de reconeixer les cançons correctament cada vegada simplement escoltant uns 8 segons. No importa quina part de la cançó senti, com de repetitiva sigui o si aquell segment en particular és oposat a la resta de la cançó, la identificarà correctament! És clar que vaig ser capaç de trobar algunes cançons que no va poder identificar. Unes quantes cançons tradicionals catalanes va fer el fet; però en aquest cas, estic gairebé segur que va fallar, no pas per culpa de l’algorisme sinó perque no tenia aquella cançó en concret a la base de dades.

Sent enginyer de telecomunicacions, tinc certs coneixements de processat digital de senyal, filtrat, etc., i he trobat aquest producte impressionant. He buscat pel google més detalls (ni que siguin d’alt nivell) sobre l’algorisme en que el sistema està basat sense trobar res concret.

Òbviament, el procedimant ha d’anar de la següent forma:

escoltar fragment –> processat digital –> signatura de la cançó –> búsqueda a la base de dades

Donada la qualitat relativament baixa de recepció de la cançó, hauran de ser capaços de treballar amb cert nivell de soroll, però al mateix temps extreure paràmetres fonamentals de l’audio que es mantinguin constants. En el cas de la veu, serien paràmetres com el to, timbre, etc. els paràmetres que fan que la veu sigui única. Si més no, així és com funciona el reconeixement de veu.

En el cas d’una cançó sencera, això no és pas tan fàcil ja que conté molta variança: El principi pot ser completament diferent del final, així si s’extreu una signatura d’una cançó, aquesta serà diferent depenent del segment en concret que s’escolti. La única manera en què ho poden fer és extraient signatures d’àudio molt més curtes, potser inclús d’un segon de durada. En aquest cas, crec que es podria assumir que la signatura si que seria constant.

És clar que, amb signatures tan curtes no han de ser necessàriament úniques i fàcilment hi podria haver més d’una cançó que respongui a la mateixa signatura. Tot i això, es poden sobreposar tots els resultats fins a obtenir una identificació satisfactòria.

Segons el què he llegit a la seva pàgina web la seva base de dades conté uns 4 mil·lions de cançons; assumint que la durada mitjana d’una cançó és de 4 minuts, o sigui, 240 segons; i que les signatures són d’un segon, estaríem parlant d’una base de dades amb 1000 mil·lions (10^9) d’entrades. Afortunadament, les signatures ocupen molt poc espai, semblant a un valor hash.

Arribats a aquest punt, el problema passa a ser de recursos hardware i escalabilitat, però donada la tecnologia actual, amb discs durs del tamany d’un terabyte i microprocessadors amb diversos nuclis, el procés que he descrit és perfectament viable. No ho trobeu fascinant? Potser no, però a mi em fa preguntar-me on és el límit i on podem estar d’aquí ben pocs anys. Veurem dispositius capaços de reconeixer una veu simplement a partir d’una mostra d’un segon? o qui sap, potser una tecnologia així ja existeix…

Per cert, algú de vosaltres té detalls de la implementació real d’aquest algorisme?

Comments RSS

  1. Sergio

    Well, when I was working in Germany 😉 I used to do that in a much easier way, without any processing whatsoever. All you need is an internet connection and the song’s metadata to be stored in the database (to have been previously done by someone with too much free time). It does not matter whether the song’s being played or not, the metadata (i.e., song’s name, album, etc.) can be retrieved anyway. The thing is, each song has a fingerprint that is sent to the database, then a match is found (hopefully the right one), and then you get back the name artist, album, song name, etc (these metadata are called ID3 tags in MP3, for instance, I don’t know for apple’s proprietary formats).

    In the case of the iPhone, I don’t know whether the database is stored in the phone, accessed via a mobile comms. link or whatever, but the principle is the same

    connect to remote database –> send song’s fingerprint –> search match in database –> get metadata back to your program and show it on the screen to make the user go crazy!!

    Examples of databases are freedb (http://en.wikipedia.org/wiki/Freedb)
    or CDDB (http://en.wikipedia.org/wiki/CDDB). Check them out and their links and everything if you want to learn more.

    It is not really difficult to get it done, but cool nonetheless!

    Cheers!

    Sergio