Hacker News new | ask | show | jobs
by ptmx 5361 days ago
That was quite an interesting read. I felt somewhat vindicated at the end of the article when the author mentioned that audio fingerprinting is a potential solution to this problem. While reading about the various issues created by matching songs based on names and artists, I immediately started thinking about how one might instead identify songs based on their acoustic properties.

Having looked into it a little bit (i.e., having read the wikipedia page about acoustic fingerprinting) I see that there are quite a few implementations in existence and that they appear to be fairly reliable at identifying songs based on the fingerprints -- which is really cool, first of all. Taking that for granted, it seems like facebook could solve its problem by creating a comprehensive database of songs which its music content partners offer.

In particular, I'm thinking of a database with entries containing an audio fingerprint, data about the artist, song, album, and so on, and links to the song on each of the partners' services. Then it would be possible to initially loop through each song offered by the partners, generate an acoustic fingerprint, check if it exists in the database[1], and then add a new record or add a link to an existing record as appropriate. This would be a huge process, of course, but afterwards you'd only have to perform this step for new songs, and you'd ultimately end up with a very impressive database of music IDs.

Anyway, that's undoubtedly a simplistic idea of what could be done and I'm surely glossing over some major obstacles, but I enjoyed indulging in some wishful thinking about it all the same.

[1] As I mentioned, I don't know anything about acoustic fingerprinting, but intuitively I can imagine it's probably not as easy checking if that fingerprint "exists" in the database. More likely, you'd have to check how similar it is to existing fingerprint and choose some threshold above which it's sufficiently likely to be the same song.

1 comments

This is almost exactly the technology behind Shazam, which has a fairly extensive catalog. Shazam 'listens' to a song when you hit a button and captures microphone data from your phone. It then takes that recorded data and listens for 'key points', which it hashes and uses to compare against its catalog.

If you want to know more about how to implement it on your own, you could use this as a resource: http://www.redcode.nl/blog/2010/06/creating-shazam-in-java/

I assume the biggest drawback to be that Shazam uses a microphone, which is obviously subject to ambient noise. Shazam doesn't actually seem to have much of a problem with this, but I'm guessing a passive listener that sampled the audio output device instead of a noisy ambient microphone would work much more reliably.