For the Audio and Music Processing Lab, I developed a social recommendation system for music, inspired somehow in the idea of http://en.wikipedia.org/wiki/Six_degrees_of_separation. This is the main idea behind: if somebody likes your music, then it is likely that you will find interesting other music that this person likes.
For the system implementation, I choose SoundCloud, which hosts my songs for the Vagabundo Barbudo project, and furthermore provides a nice python wrapper for the API. Based on how the site is structured, I found out 2 basic ways of implementing the system:
– Favorites: the user can select specific songs as “favorites”. If the user U1 favorites both songs S1 and S2, then these two songs are first degree connected. If another user, called U2, favorites songs S2 and the new hit S3, now songs S1 and S3 are second degree connected. And so on…
– Followers: the user can also “follow” another user, mainly because they are friends or the first one likes the music of the second one. It is basically a unidirectional relationship: if user U1 is follower of U2, then U2 is followed by U1 (but U2 can, of course, reciprocally become follower of U1). We consider here that, if U1 follows U2, and U2 follows U3, then U1 and U3 are second degree connected.
The idea is that, given these connexion methods, and the desired proximity degree, one can enjoy a playlist composed by music randomly choosed among his friends’ friends. It is probably not the ultimate recommendation system, but at least one can have some fun and discover the musical ecosystem of his closer environment.
Once the songs are chosen, they are streamed from soundcloud into VLC player. From here comes the name of the system: VIRUS (VLC Iterative Recommender Under SoundCloud).
The code is already available in my repo: https://github.com/andresperezlopez/VIRUS
For the future work, it would be nice to have a tool for measuring the distance between two artists, say Vagabundo Barbudo and Justin Bieber.
PD – For the assignment, I also created an AutoTagger trained with the MajorMiner dataset (from MIREX), and applied it to my tracks. It was kind of correct, but far less interesting that the current tags.