At music sites like Rdio and Spotify, music fans have been creating and sharing music playlists for years. Sometimes these playlists are carefully crafted sets of songs for particular contexts like gaming or sleep and sometimes they are just random collections of songs. If I am looking for music for a particular context, it is easy to just search for a playlist that matches that context. For instance, if I am going on roadtrip there are hundreds of roadtrip playlists on Rdio for me to chose from. Similarly, if I am going for a run, there’s no shortage of running playlists to chose from. However, if I am going for a run, I will need to pick one of those hundreds of playlists, and I don’t really know if the one I pick is going to be of the carefully crafted variety or if it was thrown together haphazardly, leaving me with a lousy playlist for my run. Thus I have a problem – What is the best way to pick a playlist for a particular context?
Naturally, we can solve this problem with data. We can take a wisdom of the crowds approach to solving this problem. To create a running playlist, instead of relying on a single person to create the playlist, we can enlist the collective opinion of everyone who has ever created a running playlist to create a better list.
I’ve built a web app to do just this. It lets you search through Rdio playlists for keywords. It will then aggregate all of the songs in the matching playlists and surface up the songs that appear in the most playlists. So if Kanye West’s Stronger appears in more running playlists than any other song, it will appear first in the resulting playlist. Thus songs, that the collective agree are good songs for running get pushed to the top of the list. It’s a simple idea that works quite well. Here are some example playlists created with this approach:
Best Running Songs
Coding
Sad Love Songs
Chillout
Date Night
Sexy Time
This wisdom of the crowds approach to playlisting isn’t limited to contexts like running or coding, you can also use it to give you an introduction to a genre or artist as well.
Country
Post Rock
Weezer
The Smart Playlist Builder
The app that builds these nifty playlists is called The Smart Playlist Builder. You type in a few keywords and it will search Rdio for all the matching playlists. It will show you the matching playlists, giving you a chance to refine your query. You can search for words, phrases and you can exclude terms as well. The query sad “love songs” -country will search for playlists with the word sad, and the phrase love songs in the title, but will exclude any that have the word country.
When you are happy with your query you can aggregate the tracks from the matching playlists. This will give you a list of the top 100 songs that appeared in the matching playlists.
If you are happy with the resulting playlist, you can save it to Rdio, where you can do all the fine tuning of the playlist such as re-ordering, adding and deleting songs.
The Smart Playlist Builder uses the really nifty Rdio API. The Rdio folks have done a fantastic job of giving developers access to their music and data. Well done Rdio team!
Go ahead and give The Smart Playlist Builder a try to see how the wisdom of the crowds can help you make playlists.
#1 by Ben on August 28, 2013 - 9:57 am
This is really interesting Paul. I wonder about the feasibility of extending it to song bi-grams (or higher n-grams) rather than single songs across lists, to take better advantage of crowd wisdom on ordering in addition to occurance…
#2 by Paul on August 28, 2013 - 10:58 am
indeed yes, of course. The playlists generated here lack any sort of order. Unfortunately, the Rdio API limits playlist search results to only 200 playlists, so I’m afraid that even bigrams will be too sparse to get an interesting result, never mind the whole album problems that would dominate the bigram space.
#3 by stephen shepherd on August 28, 2013 - 11:48 am
A complimentary approach might be to look at relative playlist position — song-to-song transitions are important in making playlists, but also some songs make good openers, pivots, and closers.
#4 by Paul on August 28, 2013 - 2:49 pm
Super idea, Stephen. Even just weighting songs by their relative rank in a playlist could have a big win. The first song in a running playlist better pop. I’ll try that.
#5 by Karsten on September 2, 2013 - 3:58 am
Nice idea! Do you use some kind of TF-IDF to filter over popular songs? I would imagine that songs which are popular in general always are on your list when you actually want songs popular in respect to your list’s topic.
#6 by Paul on September 2, 2013 - 2:56 pm
Not for this app, but I’ve done quite a bit behind the scenes adjusting for popularity. Contextual playlists are funny tho … for some contexts, like summer barbecue – it is all about popularity. Whereas for others, TF-IDF is key to separating the most relevant from the most popular.
#7 by Drew on September 13, 2013 - 11:33 pm
Cool – how about a Spotify version?
Also, would it be possible to filter the generated playlist by the user’s taste in music, so that when a person searches for [summer barbecue music] or something like that, your Smart Playlist Builder would first aggregate the tracks from the matching playlists, and THEN filter that list to remove tracks that don’t fit with that user’s taste in music? The user’s taste in music would be calculated by examining their library, their listening history, their starred tracks, etc.