Recent years have seen an increasing amount of interest in music recommendations. Music is being created and published at a rate that far outstrips the ability of any listener to keep up with. How then, if I'm an artist, can I get my awesome new song to the ears of listeners? Or, if I'm a music connoisseur, how can I sort through the thousands of songs to find the few I'll love?
The oldest recommendation system is still going strong: word of mouth. "Dude, you've got to hear this…" will always be a vector for music to spread. Another old-school system is one where I pick a bunch of songs I like and send them out over the airways to anyone who would like to hear. The internet is changing the ballgame, however. The advent of computers, in addition to fundamentally altering how people create and distribute music, also promises to change how they discover it.
Some of the earliest systems were what are known as "collaborative filters." A computer system, like Amazon, knows thousands of albums that various people have purchased. Assuming that people liked the albums they bought, if Bob and I both bought ten of the same albums, when Bob buys an 11th, there's a better than average chance that I'll like that album as well.
Systems like Pandora work in a similar way, but not only have they broken things down from albums to individual songs, they also look at specific characteristics of songs. So, now the system can say, not only, "people who liked the songs you like also liked…," but also, "you have liked 9 of 10 R&B songs I played for you with melodic tones and three male singers, here's another song that sounds like those."
Pandora's knowledge of music comes from the Music Genome Project. Human listeners have spent countless hours reviewing "tens of thousands of artists" and cataloging God-only-knows how many characteristics. That's cool, but not really an undertaking the average person has time for, so there's quite a bit of research into how to get computer programs to listen to the songs for us.
Systems employ a variety of different types of signal analyses, most taking into account human perceptive characteristics (we are more sensitive to high frequency noises than low ones). They not only attempt to determine traditional characteristics such as beats per minute, key, and timing; they also represent "timbral characteristics," like the signal strength 3-4kHz, that human listener would never use to describe music.
There's quite a bit of research in this area including the International Conferences on Music Information Retrieval and Related Activities, the Laboratory for the Recognition and Organization of Speech and Audio at Columbia, and the Music Technology Group at the Universitat Pompeu Fabra. Research is also driven by a growing rapidly group of private commercial interests too numerous to list.
The more interesting developments for me, a solo programmer and graduate student in an unrelated field, are open-source projects. These are areas where I can take part and help create something interesting. One of the more promising is Paul Lamere's Search Inside the Music project with Sun Microsystems.
Which brings us to a crucial issue for every computer program ever written: data. Systems like Last.fm will integrate with your music player so that every song you play goes toward helping the system build a profile of preferences. Accessing actual songs to play with spectral analysis on a large scale is a bit more complex. The options are fourfold:
- Make a deal with the record companies gaining some sort of license — Unlikely
- Buy tens of thousands of songs online — I'm poor
- Use creative commons sources such as Magnatune — Limits selection
- Steal as much music as the internet will allow — Illegal
Each of these has advantages, but ultimately with all of them I run out of space to store all these songs. Also, part of the point is community building, and the point at which I try to open the system to other people (other than with the creative commons sources), I'm in legal trouble. What would really be nice is if I had an online system that I could query about the characteristics of songs (or a database of info I could download). The tricky part is building that database.
In the last couple weeks, a couple systems have come online (EchoNest & Vienna MIR) that let you send in a song and get back an XML description of the audio characteristics. That's a fine idea, but it limits the songs I can do computations on to songs I have a copy of. It also means I need to transfer whole files over which means if I want to experiment on a 5,000 song set, I need to start about a week early just so I can send all my songs over.
Right now I'm listening to The Nature by Talib Kweli. If someone else has already analyzed this song, I don't need to send the song over. I just need to tell the system I want The Nature and it can send me the data I want. This saves both the time to transfer the song and the time to analyze it.
Now the problem becomes how to tell the system what song I want. For many rap and folk bands there are often myriad versions of a particular song. Lots of new XML based technologies use URIs, and that makes sense, but how to make a unique one for each song? Enter MusicBrainz. They are a huge (more than 6,300,000 tracks and growing) community maintained database of songs, and they've assigned a unique identifier to each one. If I know the MusicBrainz id for a particular song then I can refer unambiguously about it to anyone else.
MusicBrainz has some limitations that would eventually be a problem. Mostly that they are "album-based" meaning they don't deal with DJ mixes or bootlegs. Also so far as a completely open process, they use MusicDNS which is partially encumbered. That would matter eventually, but those concerns are outweighed by the huge amount of data and community support you'd get.
There may well be other good solutions to the data problem. I like the MusicBrainz idea because it gives a project like Search Inside the Music a pre-built community and support structure. It would also draw users to help build MusicBrainz as a resource for both tagging and music recommendation applications.