The Stockholm Python User Group
Posted by Paul in code, data, events, The Echo Nest on January 25, 2013
In a lucky coincidence I happened to be in Stockholm yesterday which allowed me to give a short talk at the Stockholm Python user Group. About 80 or so Pythonistas gathered at Campanja to hear talks about Machine Learning and Python. The first two talks were deep dives into particular aspects of machine learning and Python. My talk was quite a bit lighter. I described the Million Song Data Set and suggested that it would be a good source of data for anyone looking for a machine learning research. I then went on to show a half a dozen or so demos that were (or could be) built on top of the Million Song Data Set. A few folks at the event asked for links, so here you go:
Core Data: Echo Nest analysis for a million songs
Complimentary Data
- Second Hand Songs – 20K cover songs
- MusixMatch – 237K bucket-of-words lyric sets
- Last.fm tags – song level tags for 500K tracks. plus 57 million sim. track pairs
- Echo Nest Taste profile subset – 1M users, 48M user/song/play count triples
Data Mining Listening Data: The Passion Index
Fun with Artist Similarity Graphs: Boil the Frog
Post about In Search of the Click Track and a web app for exploring click tracks
Turning music into silly putty – Echo Nest Remix
[youtube http://www.youtube.com/watch?v=2oofdoS1lDg]Interactive Music
I really enjoyed giving the talk. The audience was really into the topic and remained engaged through out. Afterwards I had lots of stimulating discussions about the music tech world. The Stockholm Pythonistas were a very welcoming bunch. Thanks for letting me talk. Here’s a picture I took at the very end of the talk:
Joco vs. Glee
With all the controversy surrounding Glee’s ripoff of Jonathan Coulton’s Baby Got back I thought I would makes a remix that combines the two versions. The remix alternates between the two songs, beat by beat.
[audio http://static.echonest.com.s3.amazonaws.com/audio/combo.mp3]At first I thought I had a bug and only one of the two songs was making it into the output, but nope, they are both there. To prove it I made another version that alternates the same beat between the two songs – sort of a call and answer. You can hear the subtle differences, and yes, they are very subtle.
[audio http://static.echonest.com.s3.amazonaws.com/audio/combo-t1.mp3]The audio speaks for itself.
Here’s the code.
[gist https://gist.github.com/4632416]Music Hack Day Stockholm
This weekend I was in Stockholm, participating in, and representing The Echo Nest at the Stockholm Music Hack Day held at Spotify HQ. It was quite an impressive event. Hundreds of hackers from all over Sweden and many others from all around the world joined together for 24 hours of hard core music hacking. Spotify did an excellent job hosting the event. The space was ideal for hacking – rock solid wifi with lots of bandwidth, an endless supply of caffeinated beverages, comfortable seating, and great audio/visual facilities for demos.
(photos by johncb1973)
There were a whole lot of music tech companies there too, showing off their technology. Such as:
Some hackers built their own musical instruments.
There were over 60 hacks demonstrated in a 3 hour period. Kudos to Andrew to keeping things moving along. There was very little demo fail – thanks to the good A/V and support from Andrew and his team.

While each team gave their demo, 100s of fellow hackers and guests watched, laughed, cried and celebrated the wonder of the music hacks.
There were all kinds of hacks: interactive games, music exploration and discovery, playlisting, remixing, sequencing. The hacks were incredibly creative, and despite the demo session being 3 hours long, the time just flew by. Be sure to check out the entire list of hacks.
We got to listen to much good music, from Oscar’s Flamenco guitar to creative remixing of the Blue Note Catalog.
I was quite pleased to see the number of hacks that took advantage of Echo Nest data to remix music. All of them were quite unique and clever uses of our API.
Stealing Feeling was one of my favorites of the Remix apps. They use the Echo Nest API to extract the rhythmic feeling of a song and used it to turn the output of a sterile drum machine beat into a living, breathing, human sounding rhythm.
My own demo was called Going Undercover. I used cover song data from SecondHandSongs to make music discovery playlists.
There were lots of Echo Nest based hacks. We originally planned to give out 2 prizes, but after seeing so many extremely high quality Echo Nest hacks we doubled the number of iPads we were giving out. The Echo Nest prize winners are:
The Sampler formerly known as Magnum Infinitity – TSFKAMI, is a musical instrument which creates patches from any sound or music you supply to it. Specify any directory with music or sounds on your hard drive and the contents will be uploaded to the EchoNest, which scans each file for short snippets with a pure(ish) pitch. The soundfiles are then chopped up and the desired snippets sorted by musical note and timbre and delivered to the sampler for that velvety smooth sounding goodness. https://www.hackerleague.org/hackathons/music-hack-day-stockholm-13/hacks/the-sampler-formerly-known-as-magnum-infinity
Super Mutroid – A music/rhythm platform game with a Super Metroid theme. – Plays a song through Libspotify and downloads song data from EchoNest. Generates obstacles based on the beats in the song. – https://www.hackerleague.org/hackathons/music-hack-day-stockholm-13/hacks/super-mutroid
Pimp My Radio – A physical standalone radio that connects to a WiFi network and plays music from Spotify based on your daily moments (wakeup, relax, work out, romance, party ). The radio has a knob control for setting the situation you want and also an lcd screen for showing the lyrics of the current song in sync with the time. https://www.hackerleague.org/hackathons/music-hack-day-stockholm-13/hacks/pimp-my-radio
Stealing Feeling Based around a 16 step javascript sequencer which a user can program to run a drumkit generated in web audio, or to trig analog synths.Then, apply the swing from Aretha Franklin or Squarepusher on your song. https://www.hackerleague.org/hackathons/music-hack-day-stockholm-13/hacks/stealing-feeling
Other notable EN hacks
- Curadio – (another) physical radio with fancy playlists – https://www.hackerleague.org/hackathons/music-hack-day-stockholm-13/hacks/curadio
- Shutupcloud – filters soundcloud playlists to remove spoken word tracks (using speechiness)- https://www.hackerleague.org/hackathons/music-hack-day-stockholm-13/hacks/shutupcloud
- Discofy–MHD – light show synced to beats – https://www.hackerleague.org/hackathons/music-hack-day-stockholm-13/hacks/discofy-mhd
- Orly – used Whosampled rostta stone to make an in-spotify who-sampled explorer (this is a really neat app) – https://github.com/circuitflow/orly

- Blue Note Beat Builder – winner of the Open EMI prize – really cool! – Find classic break beats and jazz samples from the Blue Note catalog and create your own beat, or try to re-create another famous beat from scratch. –https://www.hackerleague.org/hackathons/music-hack-day-stockholm-13/hacks

- Dubthoven – remixing skrillex with strings https://www.hackerleague.org/hackathons/music-hack-day-stockholm-13/hacks/dubthoven
It was a fantastic weekend. Thanks to Andrew and the rest of the Spotify crew for hosting the event, and thanks to all the hackers who brought your passion for music and technology to the event and build some incredible stuff.
Special thanks to Johncb1973 who took most of these pictures.
The work of an Executive, International Music Hacker is never done. This weekend I’ll be traveling to Cannes for the Midem Music Hack Day. Life is good.
Going Undercover
My Music Hack Day Stockholm hack is ‘Going Undercover‘. This hack uses the extensive cover song data from SecondHandSongs to construct paths between artists by following chains of cover songs. Type in the name of a couple of your favorite artists and Going Undercover will try to find a chain of cover songs that connects the two artists. The resulting playlist will likely contain familiar songs played by artists that you never heard of before. Here’s a Going Undercover playlist from Carly Rae Jepsen to Johnny Cash:
For this hack I stole a lot of code from my recent Boil the Frog hack, and good thing I could do that otherwise I would never have finished the hack in time. I spent many hours working to reconcile the Second Hand Songs data with The Echo Nest and Rdio data (Second Hand Songs is not part of Rosetta stone, so I had to write lots of code to align all the IDs up). Even with leveraging the Boil the Frog code, I had a very late night trying to get all the pieces working (and of course, the bug that I spent 2 hours banging my head on at 3AM was 5 minutes of work after a bit of sleep).
I am pretty pleased with the results of the hack. It is fun to build a path between a couple of artists and listen to a really interesting mix of music. Cover songs are great for music discovery, they give you something familiar to hold on to while listening to a new artist.
Boil The Frog
Posted by Paul in code, fun, Music, The Echo Nest on January 2, 2013
You know the old story – if you put a frog in a pot of cold water and gradually heat the pot up, the frog won’t notice and will happily sit in the pot until the water boils and the frog is turned into frog soup. This story is at the core of my winter break programming project called Boil the Frog. Boil the Frog will take you from one music style to another gradually enough so that you may not notice the changes in music style. Just like the proverbial frog sitting in a pot of boiling water, with a Boil the Frog playlist, the Justin Bieber fan may find themselves listening to some extreme brutal death metal such as Cannibal Corpse or Deicide (the musical equivalent to sitting in a pot of boiling water).
To use Boil the Frog, you type in the names of any two artists you’ll be given a playlist that connects the two artists. Click on the first artist to start listening to the playlist. If you don’t like the route taken to connect two artists, you can make a new route by bypassing an offending artist. The app uses Rdio to play the music. If you are an Rdio subscriber, you’ll hear full tracks, if not you’ll hear a 30 second sample of the music.
You can create some fun playlists with this app such as:
- Miley Cyrus to Miles Davis
- Justin Bieber to Jimi Hendrix
- Patti Smith to the Smiths
- Elvis to Elvis
- The Carter Family to Rammstein
- Kanye West to Taylor Swift
- Cage the Elephant to John Cage
- Ryan Adams to Bryan Adams
- Righteous Brothers to Steven Wright
How does it work? To create this app, I use The Echo Nest artist similarity info to build an artist similarity graph of about 100,000 of the most popular artists. Each artist in the graph is connected to it’s most similar neighbors according to the Echo Nest artist similarity algorithm.

To create a new playlist between two artists, the graph is used to find the path that connects the two artists. The path isn’t necessarily the shortest path through the graph. Instead, priority is given to paths that travel through artists of similar popularity. If you start and end with popular artists, you are more likely to find a path that takes you though other popular artists, and if you start with a long-tail artist you will likely find a path through other long-tail artists. Without this popularity bias many routes between popular artists would venture into back alleys that no music fan should dare to tread.
Once the path of artists is found, we need to select the best songs for the playlist. To do this, we pick a well-known song for each artist that minimizes the difference in energy between this song, the previous song and the next song. Once we have selected the best songs, we build a playlist using Rdio’s nifty web api.
This is the second version of this app. I built the first version during a Spotify hack weekend. This was a Spotify app that would only run inside Spotify. I never released the app (the Spotify app approval process was a bit too daunting for my weekend effort), so I though I’d make a new version that runs on the web that anyone can use.
I enjoy using Boil the Frog to connect up artists that I like. I usually end up finding a few new artists that I like. For example, this Boil The Frog playlist connecting Deadmau5 and Explosions in the Sky is in excellent coding playlist.
Give Boil the Frog a try and if you make some interesting playlists let me know and I’ll add them to the Gallery.
The Music We Lost in 2012
Posted by Paul in data, The Echo Nest on December 19, 2012
It’s the time of the year when music critics make their lists of artists that we passed away or bands that broke up in the last twelve months. To help them write their retrospectives I’ve put together two lists: One of well-known musicians that died during 2012, and one of well-known bands that called it quits during the year.
I made the list using the Echo Nest Artist Search API, restricting the results to artists that had a year ending in 2012.
Lots of great music left us in 2012. See the lists here: 2012 Music Memoriam
How music recommendation works – and doesn’t work
Posted by Paul in Music, music information retrieval, recommendation, The Echo Nest on December 12, 2012
Brian just posted ‘How Music Recommendation works – and doesn’t work‘ over at his Variogr.am blog. It is a must-read for anyone interested in the state of the art in music recommendation. Here’s an excerpt:
Try any hot new artist in Pandora and you’ll get the dreaded:

Pandora not knowing about YUS
This is Pandora showing its lack of scale. They won’t have any information for YUS for some time and may never unless the artist sells well. This is bad news and should make you angry: why would you let a third party act as a filter on top of your very personal experiences with music? Why would you ever use something that “hid” things from you?
Grab a coffee, sit back and read Brian’s post. Highly recommended.
TimesOpen 2012 Hack Day Wrap-Up
I spent Saturday at the New York Times attending the TimesOpen Hack Day. It was great fun, with lots of really smart folks creating neat (and not always musical stuff). Some great shots here:
Check out the wrap up at the Times: TimesOpen 2012 Hack Day Wrap-Up
No Kyle, music discovery isn’t a lie
This week, the usually excellent Hypebot published a post by Kyle Bylin called Music Discovery: The Path to Digital Failure. In this post, Kyle takes issue with a recent Billboard article about how music discovery is one of the key areas in the new music business. Kyle pulls no punches. He says “Music Discovery is a lie that is never going to come true”. His argument is threefold:
(1) “Music discovery is a dead pool of music startups, where zero successes exist”
I’m not sure which world Kyle lives in, but it is not my world. I see music discovery success everywhere I look, from emerging startups like Discovr, Songza, Turntable.fm, SpotOn, The Sixty One, We Are Hunted, and many more, to more established companies such as The Hype Machine, Shazam, Soundhound, Last.fm and Pandora. There are companies like The Echo Nest (where I work), Rovi and Gracenote that supply data and tools for music discovery. The biggest tech companies in the world: Google, Amazon, Microsoft and Apple, are all investing heavily in music discovery technology such as music recommendation and playlisting. Likewise, the growing music subscription services like Spotify, Rhapsody and Rdio are working hard to provide tools to make it easier for their listeners to explore and discover new music, recognizing that this is essential for subscriber retention. Even the traditional music tastemakers – such as the music labels, MTV and broadcast radio increasingly rely on discovery technology to surface new, interesting music. Oh, and by the way, three of the largest exits in the digital music space are discovery-related: Last.fm ($280m), Gracenote ($260m) and Pandora (with a current market cap of 1.5bn). I wouldn’t mind going for a swim in that dead pool.
There are hundreds of companies, big and small, all around the world successfully improving the music discovery experience. The success is quantifiable and real: more music sales, longer listening time, improved subscriber retention, more satisfied listeners. Asserting that there are zero successes is just plain wrong.
(2) “Music discovery isn’t a problem, and it’s not a solution either. Music listeners don’t have trouble figuring out what to listen to; they simply don’t know what to listen to next. They have more than enough music, but not enough time to explore it.”
This is crazy time. First, Kyle says ‘Music discovery isn’t a problem’ and then in the very next sentence he says that listeners ‘simply don’t know what to listen to next’. The only way that this can make sense is for Kyle to have a very narrow understanding of what music discovery is. I suspect that when Kyle says ‘music discovery’ he means ‘artist recommendation’, which is a very small part of the music discovery world. Music discovery is so much more than just artist recommendation and a big part of music discovery is helping that listener decide what to listen to next.
(3) “Music discovery requires a lot of work; no service can do that work for you.”
So we went from “Music discovery isn’t a problem” to “Music discovery requires a lot of work“. Which is it? Certainly if it isn’t a problem then it shouldn’t require a lot of work. If I really don’t have trouble figuring out what to listen to why must I “set aside a few hours to sift through and listen to a lot of “bad” music“. Yes, music discovery can be hard. That is why so many people are trying to build tools to help you explore for and discover new music. That’s why Billboard suggests that music discovery is one of the key areas in the new music business. Today’s music listener is totally overwhelmed by the amount of music available. Helping that listener sort through the 20 million songs that they have in their pocket to find something that they’d enjoy listening to next, perhaps something new, or perhaps an old favorite, will indeed be a key part of the new music business. Music discovery is not “a lie” – it is real, it is a big part of today’s listening experience and will be an even bigger part of tomorrow’s listening experience.
Dynamically adjusting the tweet button
The Infinite Jukebox has a tweet button that allows you to tweet the URL of a song so you can share it with others. The recently added tuning feature encodes all of the tuning information into the URL, making it easy to share a ‘tuned’ infinite song. One challenge I encountered it making this work was dynamically changing the URL that the tweet button will ‘tweet’.
The ‘tweet’ button is a twitter supplied widget. When your page load, a script runs that finds the tweet button on the page and does a bunch of twitter magic to the button (for one thing, it turns the button into an iFrame). When you click the button, the twitter dialog has the URL ready to go. However, if the URL has been programmatically changed (as in my tuning feature), the tweet button won’t pick this up. To make this work, whenever you change the URL of the page, you need to remove the tweet button, re-attach it and then call twttr.widgets.load() to force the twitter button to update.
Here’s the gist:
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| <body> | |
| The tweet button: | |
| <span id='tweet-span'> | |
| <a href="https://twitter.com/share" id='tweet' | |
| class="twitter-share-button" | |
| data-lang="en" | |
| data-count='none'>Tweet</a> | |
| <script>!function(d,s,id){varjs,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="https://platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script> | |
| </span> | |
| <script> | |
| function tweetSetup() { | |
| $(".twitter-share-button").remove(); | |
| var tweet = $('<a>') | |
| .attr('href', "https://twitter.com/share") | |
| .attr('id', "tweet") | |
| .attr('class', "twitter-share-button") | |
| .attr('data-lang', "en") | |
| .attr('data-count', "none") | |
| .text('Tweet'); | |
| $("#tweet-span").prepend(tweet); | |
| tweet.attr('data-text', "#InfiniteJukebox of " + t.fixedTitle); | |
| tweet.attr('data-url', document.URL); | |
| twttr.widgets.load(); | |
| } | |
| </script> | |
| </body> |



























