Monday, July 7, 2008

Weekly Update: Unhidden Biases

Now that dynamic playlists are working, what's missing is a way to actually use them. That's what most of this weeks work went towards.

In Amarok 1, dynamic playlists are one of those great hidden features. They are terrifically powerful and usefull, but a lot casual users don't know about them, or just don't understand how to use them. I had been using Amarok for a while before I discovered them.

One of the problems I've been working on is how to present Amarok 2.0 dynamic playlists in a way in which it's more or less obvious what they do. I want it to be an exhibitionist feature, with the functionality all exposed and out in the open, no dialog boxes or menu hierarchies.

This week I spent some quality time working on the bias editor (and reminding myself why I don't like gui programming). Since every blog post needs a picture, here's the latest version of the bias editor from just a few minutes ago (not even in svn yet). It's a bit rough arround the edges, but comming along nicely.

That screenshot is slightly faked, but in the next few days the bias editor will start to become functional. I'm pretty excited to see my work actually usable.

I also did some important work behind the scenes. This sort of playlist generation can't really be done efficiently in general (it's an NP-hard problem). If you give it a really tough set of biases, it won't break down or freeze up, but it may give you playlist that isn't perfect. Making the solver work well is a matter of heuristics, trial and error, and tweaking. I did a little of that this week, but the real testing and tweaking will happen when the bias editor is up and running.

I'll be back here in a week, hopefully demonstrating how to use the new dynamic playlists.

Incidentally, your biased playlist has remarkably good taste...though I'm not sure how those Cat Power, Destroyer, Caribou, and Animal Collective songs got on there, not having "love" in the title... :)

One feature request I have, though, is the ability to keep albums together. A scenario for this would be that I am listening to a classical music collection where each work is in a separate album (e.g. even if I got Beethoven's 5th and 6th on the same CD, they would be separate albums), and I want to make sure I get entire symphonies instead of just single movements from them. How easily could this be implemented as a bias? (I'm a coder myself, so if the API supports it I could do it :-))

The title="love" bias only has 85% strength. That means that on average, if I understand correctly, the system will attempt to make 85% of the tracks shown have this filter. If that is not possible it will do the best it can.