Friday, 24 February 2012

Autoqueue

A nice little piece of code I came across quite a while ago and have been meaning to blog about ever since I wrote some code to extend it properly to the Rhythmbox music player is a generic cross-player autoqueue project.

The idea of the project is to generate interesting tracks to queue up automatically in your player while you're listening to music based on what you're currently listening to.  Put simply, seed your playlist with a few tracks of the sort you want to listen to, turn the plugin on and it will continue to populate your queue with similar tracks.  It's great when all you want to do is have some non-particular music in the background (say when you're coding for example) and you don't want to bother with managing what's playing right now.  If you're in the mood for some acoustic through to heavy metal, just seed with what you want and let autoqueue do the rest.

The Rhythmbox plugin for this project wasn't particularly mature when I picked it up so I've modified it so now I've got a nice little button in my player that I can use to switch the plugin on or off depending on whether I want to choose the tracks or allow the plugin to do it for me.  Autoqueue attempts to be generic about the players it supports by essentially providing a library that player plugins can talk to over a dbus interface.

The autoqueue project itself currently supports 2 mechanisms to determine track similarity.  There's what the project seems to hold as the primary method which is comparing the audio signal of the track you're listening to with those in your music library.  It uses an external library called mirage for this which was originally written for the Banshee player.  Then there's the method I prefer to use which is to call out to last.fm to ask for the similar tracks to the current one playing and queue up one from the list you already have in your library.  Eventually, I'd like to extend this so it takes into account your last.fm profile such that the similar tracks picked are ones you prefer to listen to.

While it's a great little project and I love this type of idea for generating dynamic playlists, the project is fairly stale, not much activity in development and the code repository is way more up-to-date than any released zip files.  However, if you're interested it's easy to get going so long as you know how to write a plugin for your player.

<edit>See comments from the project maintainer below for latest updates on project status at the time of writing.</edit>

2 comments:

thisfred said...

Hey Graham,

I'm the developer of autoqueue, and I'm very interested in incorporating your changes in it.

It is true that I have not spent much time on the Rhythmbox implementation, past getting it to work in some distant past, because it is not my player of choice, and my time is limited.

While autoqueue hasn't seen a real release in quite a while (or ever, depending on your definition ;) it is still very much actively being worked on, and if you're on Ubuntu, there is a PPA you can install to get automatically updated with daily builds:

https://launchpad.net/~thisfred/+archive/autoqueue

Also, there are actually *three* ways that similar tracks get looked up, which can all be turned on or off independently. (And I'm looking at adding support for echonest as well.)

The third one uses the 'grouping' tag to find songs that are similarly tagged. (I use that tag to mark songs with a lot of extra information, and synchronise those tags with my last.fm account. To get an idea of what kinds of things I put in these tags, look here:

http://www.last.fm/user/thisfred/library/tags

This may be hard to get working in RB though, since last time I looked, arbitrary tags are not exposed to the plugins.

Please file bugs in launchpad if there are things that you would like to see fixed (preferably with patches, but even without, I usually do my best to keep the few users that I have happy ;)

Let me know if there's anything else I can help with/answer!

Graham White said...

Hi Eric,

My changes are already in Autoqueue in the bazaar hosted on Launchpad. You'll recall me submitting changes to you some time in September (I think) last year. It really has just taken me that long to get around to blogging about it.

It's a great bit of code and as I mentioned in the post there are other features and things I think I can do with it. It's all a question of finding the time to look at it.

Right now, it's working really well for me in Rhythmbox 0.13.3. At some point I'll have to update my Fedora 14 boxes to something newer and I'll lose that version and have to upgrade to Rhythmbox 2 (or another player) in which case I'll probably be looking to write more plugin code for autoqueue. As/when I do that I'll be sure to make it available to you.

Thanks for your work!