Archive for category code

The Echo Nest gets ready for Boston Music Hack Day

We’ve been extremely busy this week at the Echo Nest getting ready for the Boston Music Hack Day.  Not only have we been figuring out menus, panel room assignments, and dealing with a waitlist, we’ve also been releasing a set of new API features.  Here’s a quick rundown of what we’ve done:

  • get_images – a frequent request from developers – we now have an API method that will let you get images for an artist.   Note that we are releasing this method as a sneak preview for the hack day – we have images for over 60 thousand artists, but we will be aggressively adding more images  over the next few weeks (60 thousand artists is a lot of artists, but we’d like to have lots more).  We’ll also be expanding our sources of images to include many more sources. The results of the get_images are already good. 95% of the time you’ll get images. Over the next few weeks, the results will get even better.
  • get_biographies – another frequent request from developers – we now have a get_biographies API method that will return a set of artist biographies for any artist.  We currently have biographies for about a quarter million artists – and just as with get_images – we are working hard to expand the breadth and depth of this coverage.  Nevertheless, with coverage for a quarter million artists, 99.99% of the time when you ask for a biography we’ll have it.
  • get_similar – we’ve expanded the number of similar artists you can get back from get_similar from 15 to 100.  This gives you lots more info for building playlisting and music discovery apps.
  • buckets – one issue that our developers have had was that to fill out info on an artist often took a number of calls to the Echo Nest – one to get similars, one to get audio, one for video, familiarity, hotttnesss etc.  To fill out an artist page it could take half a dozen calls.  To reduce the number of calls needed to get artist information we’ve added a ‘bucket’ parameter to the search_artist, the get_similar and the get_profile calls.  The bucket parameter allows you to specify which additional artist info should be returned in the call.  You can specify ‘audio,’ ‘biographies,’ ‘blogs,’ ‘familiarity,’ ‘hotttnesss,’ ‘news,’ ‘reviews,’ ‘urls,’, ‘images’  or ‘video’ and whenever you get artist data back you’ll get the specified info included.    For example with the call:
    http://developer.echonest.com/api/get_profile
          ?api_key=EHY4JJEGIOFA1RCJP
          &id=music://id.echonest.com/~/AR/ARH6W4X1187B99274F
          &version=3
          &bucket=familiarity
          &bucket=hotttnesss
    

    will return an artist block that looks like this:

    <artist>
        <name>Radiohead</name>
        <id>music://id.echonest.com/~/AR/ARH6W4X1187B99274F</id>
        <familiarity>0.899230928024</familiarity>
        <hotttnesss>0.847409181874</hotttnesss>
    </artist>

There’s another new feature that we are starting to roll out. It’s called Echo Source – it allows the developer to get content (such as images, audio, video etc.) based upon license info.  Echo Source is a big deal and deserves a whole post – but that’s going to have to wait until after Music Hack Day. Suffice it to say that with Echo Source you’ll have a new level of control over what content the Echo Nest API returns.

We’ve updated our Java and Python libraries to support the new calls.  So grab yourself an API key and start writing some music apps.

, , ,

2 Comments

Playdar polishing

Playdar got a couple of steps closer to being ready for the general public this week.  First of all , there are now installers for Windows and Mac that make it dead simple to install Playdar.  I tried the Mac OS X version (by Max Howell).  It could not have been easier to install.  I downloaded a file opened it, clicked on the pane and Playdar was added to my Prefs panel.  It scanned my music and I was ready to go.  Quite the contrast to a couple weeks ago when I hurt myself when trying  to compile Erlang from source.

Now that Playdar is easy to install, we need some apps.  Luckily Toby has been working hard on Playgrub.  Playgrub is a an app that you install in your browser tool bar. When you visit a web page that mentions music, click on the ‘grub’ link and Playgrub will scour the page for all the artists and tracks, resolve them using Playdar and give you a playlist for the page.  Here’s Playgrub in action.  I visited the Last.fm page for the Weezer Blue album.  I clicked on Playgrub and in a few seconds, Playgrub showed me this:

Playgrub via Playdar was able to find the audio for the music on the page (I happen to own this album so Playdar didn’t have to go far) and give me a playlist that I could play right now, or share with others.   It is really cool.   Toby writes more about Playgrub and even has a video showing it in action in this post: Playgrub new and improved.

Two big steps in one week for Playdar – an installer, and a compelling app.  Playdar is getting closer to being ready for the mainstream.  And I think we’ll be seeing even more progress. This Friday the Echo Nest will be hosting the first face-2-face Playdar summit, where about a dozen hard core Playdar folks will gather in one room and map out the next steps for Playdar.  I’m really looking forward to it.

, ,

Leave a comment

My Fame goes to 11

fameSten has released a new version of the ultra-cool,  award-winning Music Explorer FX.  It has a new feature: The Fame Knob.  While you are exploring for music you can set the Fame Knob up or down to control how well known or obscure the artists shown are.   If you are looking for mainstream artists set the Fame Knob to high. Looking for new, undiscovered artists? Set the Fame Knob to low.

Sten has also included a number of performance enhancements so everything runs super snappy.   Read more about the update on Sten’s blog and give it a whirl.

BB

The Music Explorer FX. Click to launch the app.

, ,

Leave a comment

Spotifying over 200 Billboard charts

Yesterday, I Spotified the Billboard Hot 100 – making it easy to listen to the charts.  This morning I went one step further and Spotified all of the Billboard Album and Singles charts.

The Spotified Billboard Charts

That’s 128 singles charts (which includes charts like Luxembourg Digital Songs, Hot Mainstream R&B/Hip-Hop Song and Hot Ringtones ) and 83 album charts including charts like Top Bluegrass AlbumsTop Cast Albums and Top R&B Catalog Albums.

In these 211 charts you’ll find 6,482 Spotify tracks, 2354 being unique (some tracks, like Miley Cyrus’s ‘The Climb’ appear on many charts).

Building the charts stretches the API limits of the Billboard API (only 1,500 calls allowed per day!), as well as stretches my patience (making about 10K calls to the Spotify API while trying not to exceed the rate limit, means it takes a couple of hours to resolve all the tracks).  Nevertheless, it was a fun little project.  And it shows off the Spotify catalog quite well.  For popular western music they have really good coverage.

Requests for the Billboard API: Please increase the usage limit by  10 times.  1,500 calls per day is really limiting, especially when trying to debug a client library.

Requests for the Spotify API: Please, Please Please!!! – make it possible to create and modify Spotify playlists via web services.

, ,

11 Comments

The Billboard Hot 100. In Spotify.

Inspired by Oscar’s 1001 Albums You Must Hear Before You Die …. in Spotify I put together an app that gets the Top charts from Billboard (using the nifty Billboard API) and resolves them to a Spotify ID – giving you a top 100 chart that you can play.

The Billboard Hot 100 in Spotify

Here’s the Top 10:

  1. I Gotta Feeling by The Black Eyed Peas
    Weeks on chart:16 Peak:1
  2. Down by Jay Sean Lil Wayne
    Weeks on chart:13 Peak:2
  3. Party In The U.S.A. by Miley Cyrus
    Weeks on chart:7 Peak:2
  4. Run This Town by Jay-Z, Rihanna & Kanye West
    Weeks on chart:9 Peak:2
  5. Whatcha Say by Jason DeRulo
    Weeks on chart:7 Peak:5
  6. You Belong With Me by Taylor Swift
    Weeks on chart:23 Peak:2
  7. Paparazzi by Lady Gaga
    Weeks on chart:5 Peak:7
  8. Use Somebody by Kings Of Leon
    Weeks on chart:35 Peak:4
  9. Obsessed by Mariah Carey
    Weeks on chart:12 Peak:7
  10. Empire State Of Mind by Jay-Z + Alicia Keys
    Weeks on chart:3 Peak:5

Note that the Billboard API purposely offers up slightly stale charts, so this is really the top 100 of a few weeks ago.  I never listen to the Top 100, and I hadn’t heard of 50% of the artists so listening to the Billboard Top 100 was quite enlightening.  I was surprised at how far removed the Top 100 is from the music that I (and everyone I know) listen to every day.

To build the list I used my Jspot – and a (yet to be released) Java client for the Billboard API. (If you are interested in this API, let me know and I’ll stick it up on google code).  Of course it’d be really nifty if you could specify get and listen to a chart for a given week (i.e. let me listen to the Billboard chart for the week that I graduated from High School).  Sound like something to do for Boston Music Hackday.

Update: I’ve made another list that is a little bit more inline with my own music tastes:

The Spotified Billboard Top Modern Rock/Alternative Albums

,

Leave a comment

Where is my JSpot?

I like Spotify.  I like Java.  So I combined them.  Here’s a Java client for the new Spotify metadata API:  JSpot

This client lets you do things like search for a track by name and get the Spotify ID for the track so you can play the track in Spotify.  This is useful for all sorts of things like building web apps that use Spotify to play music, or perhaps to build a Playdar resolver so you can use Spotify and Playdar together.

Here’s some sample code that prints out the popularity and spotify ID for all versions of Weezer’s  ‘My Name Is Jonas’.

    Spotify spotify = new Spotify();
    Results<Track> results = spotify.searchTrack("Weezer",  "My name is Jonas");
    for (Track track : results.getItems()) { 
       System.out.printf("%.2f %s \n", track.getPopularity(), track.getId());
    }

This prints out:

0.75


0.00


0.09

If you have Spotify and you click on those links, and those tracks are available in your locale you should hear Weezer’s nerd anthem.

You can search for artists, albums and tracks and you can get all sorts of information back such as release dates for albums, countries where the music can be played, track length, popularity for artists, tracks and albums.  It is very much a 0.1 release. The search functionality is complete so its quite useful, but I haven’t implemented the ‘lookup’ methods yet.   There some javadocs.  There’s a jar file: jspot.jar.  And it is all open source: jspot at google code.

, , , ,

3 Comments

Using Visualizations for Music Discovery

On Monday, Justin and I will present our magnum opus – a three-hour long tutorial entitled:  Using Visualizations for Music Discovery.  In this talk we look the various techniques that can be used for visualization of music.  We include a survey of the many existing visualizations of music, as well as talk about techniques and algorithms for creating visualizations.   My hope is that this talk will be inspirational as well as educational spawning new music discovery visualizations.    I’ve uploaded a PDF of our slide deck to slideshare.  It’s a big deck, filled with examples, but note that large as it is,  the PDF isn’t the whole talk.  The tutorial will include many demonstrations and videos of visualizations that just are not practical to include in a PDF.  If you have the chance, be sure to check out the tutorial at ISMIR in Kobe on the 26th.

, ,

Leave a comment

Installing Playdar

A few people have asked me the steps to go through to  install playdar. Official instructions are here:  Playdar source code. This is what I did to get it running on my Mac:

  • Download and install XCode from Apple
  • Download build and install Erlang
  • Install MacPorts if you haven’t already done so
  • Download and install git
  • Install Taglib
  • Grab the latest Playdar source: 
    git clone git://github.com/RJ/playdar-core.git
  • Build it by typing ‘make’ at the top level
  • Copy etc/playdar.conf.example to etc/playdar.conf
  • If you want to include the Echo Nest resolver do these bits:
    • Get an Echo Nest API key from here:  developer.echonest.com
    • Download and install pyechonest (the python client for the Echo Nest library):
    • Add your Echo Nest API key to echonest-resolver.py (at around line 22)
    • Make sure the echonest-resolver.py is executable (chmod +x path/to/contrib/echonest-resolver.py)
    • Edit etc/playdar.conf and add the path to the resolver in the scripts list.   Line 22-26 should look something like this:
      {scripts,[
       "/Users/plamere/tools/playdar-core/contrib/echonest/echonest-resolver.py"
       %"/path/to/a/resolver/script1.py",
       %"/path/to/a/resolver/script2.py"
      ]}.
  • If you want to enable p2p sharing remove “p2p” from the module blacklist in the playdar.conf (around line 59)
  • start Playdar with:
     ./start-dev.sh
  • To add your local music to playdar – in a separate window type:
    ./playdarctl start-debug
    ./playdarctl scan /path/to/your/music
  • At this point, playdar should be running.  You can check its status by going to:
    http://localhost:60210/
  • Try Playdar by going to http://www.playdar.org/demos/search.html.  Click the ‘connect’ button to connect to Playdar – then search for a track – if Playdar finds it, it should appear in the search results. Start listening to music. Then  visit Playlick and start building playlists.
  • If p2p is enabled you can add a friends music collection to Playdar by typing this into the Erlang console window:
    p2p_router:connect("hostname.example.com", 3389).

That’s a long way to go to get Playdar installed – so it is still only for the highly motivated, but people are working on making this easy – so if you aren’t ready to spend an hour tinkering with installs, wait a few days and there will be an easier way to install it all.

,

7 Comments

Playing with Playdar

On Saturday morning I opened my web browser, built a playlist of a few songs and started to listen to them while I went about my morning computer tasks. Some of the songs in the playlist were on my laptop, while some were on the mac mini in the family room, and some were on a laptop of a friend that was on the other side of the Atlantic ocean. And if my friend in London had closed his laptop before I listened to ‘his’ song on my playlist it could have been replaced by a copy of the song that was on the computer of a friend in Seattle. I had a seamless music listening experience despite the fact that the music was scattered across a handful of computers on two continents. Such is the power of Playdar.
playdar_logo
Playdar is a music content resolver. It is designed to solve one problem: given the name of track, find me a way to listen to it right now. You run Playdar on any computer that you own that has music and Playdar will make it easy to listen to all of that music as if it were on your local machine. The Playdar content resolver can also talk to other Playdar resolvers too, so if Playdar can’t find a track on my local network, it can ask my friend if it knows where the track is, extending my listening reach.

Playdar runs as a web service using standard web protocols for communicating with applications.  When Playdar receives a request to resolve a track it runs through a list of prioritized content resolvers looking for the track. First it checks your local machine, then your local network.  If it hasn’t found it there it could, if so configured, try your friends computers, or even a commercial song resolver (One could imagine for example, a music label offering up a portion of their catalog via a content resolver as a way to expose more listeners to their music).  Playdar will do its best to find a copy of a song that you can listen to now. Playdar enables a number of new listening modes:

  • Listen to my music anywhere – with Playdar, I don’t have to shoehorn my entire music collection onto every computer that I own just so I can listen to it no matter what computer I’m on.  I can distribute my music collection over all my computers – and no matter what computer I’m on I have all my music available.
  • Save money for music streamers – Music streaming services like Last.fm, Spotify and Pandora spend  money for every song that is streamed.  Often times, the listener will already own the song that is being streamed.   Playdar-enabled music streaming services could save streaming costs by playing  a local copy of a song if one is available.
  • Share playlists and mixtapes – with Playdar a friend could give me a playlist (perhaps in a XSPF format) and I could listen to the playlist even if I don’t own all of the songs.
  • Pool the music – At the Echo Nest, everyone has lots of music in their personal collections.  When we are all in the same room it is fun to be able to sample music from each other.  iTunes lets you do this but  searching through 15 separate collections for music in iTunes is burdensome.  With Playdar, all the music on all of the computers running Playdar on your local lan can be available for you to search and play without any of the iTunes awkwardness.
  • Add Play buttons to songs on web pages –  Since Playdar uses standard web protocols, it is possible to query and control Playdar from Javascript – meaning that Playdar functionality can be embedded in any web page.  I could blog about  a song and  sprinkle in a little Javascript to add a ‘play’ button to the song that would use Playdar to find the best way to play the song.  If I write a review about the new Beatles reissue and want the reader to be able to listen to the tracks I’m writing about, I can do that without having to violate Beatles copyrights.  When the reader clicks the play button, Playdar will find the local copy that is already on the reader’s computer.

Playdar’s Marconi Moment

Playdar is the brainchild of RJ, the inventor of the audioscrobbler and one of the founders of Last.fm.  RJ started coding Playdar in March of this year – but a few weeks ago he threw away the 10,000 lines of C++ code and started to rewrite it from scratch in Erlang.  A few days later RJ tweeted I should be taken aside and shot for using C++ for Playdar originally. It’s criminal how much more concise Erlang is for this. Less than 3 weeks after starting from a clean sheet of paper, the new Erlang-based Playdar had its first transatlantic track resolution and streaming. The moment occurred on Friday, October 16th.  Here’s the transcript from the IRC channel (tobyp is Toby Padilla, of MusicMobs and Last.fm fame) when London-based RJ first streamed a track from Toby’s Seattle computer:

[15:40:46] <tobyp> http://www.playdar.org/demos/search.html#artist=pantera&album=&track=burnnn
[15:41:06] <RJ2> woo, transatlantic streaming
[15:41:19] <tobyp> hot!
[15:41:35] <RJ2> playdar’s marconi moment
[15:41:42] <tobyp> hahah

An incredible amount of progress has been made in the last two weeks,  a testament to RJ’s skills as much as Erlang’s expressiveness.  Still, Playdar is not ready for the general public.  It requires a bit of work to install and get running – (yep, the erlang runtime is required), but developer Max Howell has been working on making a user-friendly package to make it easy for anyone to install. Hopefully it won’t be too long before Playdar is ready for the masses.

Even though it is new, there’s already some compelling apps that use Playdar.  One is Playlick:

Playlick

Playlick is a web application, developed by James Wheare that lets you build playlists. It uses Playdar for all music resolution.  Type in the name of an album and Playlick /  Playdar will find the music for you and let you listen to it.  It’s a great way to see/hear the power of Playdar.

Adding custom content resolvers

One of the strengths of Playdar is that it is very easy to add new resolvers.  If you are a music service provider you can create a Playdar content resolver that will serve up your content.    I wrote a content resolver that uses the Echo Nest to resolve tracks using our index of audio that we’ve found on the web.  This resolver can be used as a backstop.  If you can’t find a track on your computer or your friend’s computers the Echo Nest resolver might be able to find a version out there on some music blog.  Of course, the quality and availability of such free-range music is highly variable, so this resolver is a last resort.

Adding a new resolver to Playdar was extremely easy. It took perhaps 30 minutes to write – the hardest part was figuring out git – (thanks to RJ for walking me through the forks, pushes and ssh key settings).    You can see the code here: echonest-resolver.py.  Less than 150 lines of code, half of which is boilerplate.  150 lines and 30 minutes to add a whole new collection of music to the Playdar universe.   Hopefully soon we’ll see resolvers for music streaming services like Napster, Rhapsody and Spotify.

What’s Next for Playdar?

Playdar is new – and the plumbing and wiring are still be worked on – but already it is doing something pretty magical – letting me listen to any track I want to right now.  I can see how Playdar could be extended into acting as my music agent.  Over time, my Playdar servers will get to know quite a bit about my music tastes.  They’ll know what music I like to listen to, and when I like to listen to it.   Perhaps someday, instead of asking Playdar to resolve a specific track by name, I’ll just be able to ask Playdar to give me a playlist of new music that I might like.  Playdar can then use an Echo Nest, Last.fm or an AMG playlister to build a playlist of interesting, relevant new music.  Playdar won’t just be a music resolver, Playdar will be my music agent helping me explore for and discover new music.

, , , , ,

7 Comments

Updated Java client for the Echo Nest API

We’ve pushed out a new version of the open source Java client for the Echo Nest API.    The new version provides support for the different versions of the Echo Nest analyzer.  You can use the traditional,  but somewhat temperamental version 1 of the analyzer, or the spiffy new, ultra-stable version 3 of the analyzer.  By default, the Java client uses the new analyzer version, but if you need your application to work the exactly the same way that it did six months ago you can always use the older version.

Here’s a bit of Java code that will print out the tempo of all the songs in a directory:

void showBPMS(File dir) throws EchoNestException {
     TrackAPI trackAPI = new TrackAPI();
     File[] files = dir.listFiles();
     for (File f : files) {
         if (f.getAbsolutePath().toLowerCase().endsWith(".mp3")) {
             String id = trackAPI.uploadTrack(f, true);
             System.out.printf("Tempo 6%.3f %s\n",
                 trackAPI.getTempo(id).getValue(), f.getAbsoluteFile());
         }
     }
}

Running this code on a folder containing the new Breaking Benjamin album yields this output:

Tempo  85.57 /Users/plamere/Music/Amazon MP3/Breaking Benjamin/Dear Agony/01 - Fade Away.mp3
Tempo 108.01 /Users/plamere/Music/Amazon MP3/Breaking Benjamin/Dear Agony/02 - I Will Not Bow.mp3
Tempo 168.81 /Users/plamere/Music/Amazon MP3/Breaking Benjamin/Dear Agony/03 - Crawl.mp3
Tempo 156.75 /Users/plamere/Music/Amazon MP3/Breaking Benjamin/Dear Agony/04 - Give Me A Sign.mp3
Tempo  85.51 /Users/plamere/Music/Amazon MP3/Breaking Benjamin/Dear Agony/05 - Hopeless.mp3
Tempo  68.34 /Users/plamere/Music/Amazon MP3/Breaking Benjamin/Dear Agony/06 - What Lies Beneath.mp3
Tempo 116.94 /Users/plamere/Music/Amazon MP3/Breaking Benjamin/Dear Agony/07 - Anthem Of The Angels.mp3
Tempo  85.50 /Users/plamere/Music/Amazon MP3/Breaking Benjamin/Dear Agony/08 - Lights Out.mp3
Tempo 125.77 /Users/plamere/Music/Amazon MP3/Breaking Benjamin/Dear Agony/09 - Dear Agony.mp3
Tempo  94.99 /Users/plamere/Music/Amazon MP3/Breaking Benjamin/Dear Agony/10 - Into The Nothing.mp3
Tempo 160.38 /Users/plamere/Music/Amazon MP3/Breaking Benjamin/Dear Agony/11 - Without You.mp3

You can download the new Java client from the echo-nest-java-api code repository.  The new version is: echo-nest-java-api-1.2.zip

, , , , ,

Leave a comment