Sun, 08 Jul 2007

The perfect GTK music player: can Exaile replace Amarok?

I've always liked Amarok: it does everything I always wanted, and more. It looks perfect in every way ...
But .. it uses the QT library, and although there are tricks to make QT applications more fit in with your gtk desktop/theme it will never fit in perfectly, not only graphically but also because you still need to load the qt libraries when you want to listen to some music and it is built to interact with the KDE desktop environment.

So, I've been looking for an alternative, a GTK application strong enough to actually be able to replace Amarok, the king of all software music players.

::Read from here

Requirements

First a list of features I would like to see in my new music player. Let's keep it real: I don't think there is any music player out there that does everything listed here, not even Amarok. I can live with some missing features, as long as it has the most important ones. The other features might be added later on anyway, and who knows, maybe I'll start contributing to a project if I really like it...

In order of importance:

  • Last.fm submitting
  • Jack output
  • Advanced management of songs/albums/artists and playlists with ratings (not just bookmarks)
  • Last.fm stream listening
  • Ipod support
  • Radio streams
  • Podcasts
  • Artist/album/song information fetching from Wikipedia
  • File system monitoring (Inotify) so that it detects the new songs when I add them to my file system
  • Lyrics
  • Volume normalization (either through ReplayGain or just automatically) (if this is not built-in I can always route through a compressor/limiter myself)

Stuff that other people like, but I don't need/want/care about:

  • On screen display (when a new song starts)
  • Visualizations
  • Musicbrainz(*)
  • CD-ripping (not the task of a music player imho)

(*): I absolutely love Musicbrainz and use it all the time but I don't think it is functionality to be put in a music player. I use the Musicbrainz Picard tagger to organize my collection. Putting all the needed functionality inside the media player would make it very bloated. So in theory I actually wouldn't need any tag editing at all in my music player
(this could be a discussion in it's own merit: why don't we get rid of all tag editing functionality in all music players and use decent, separate utilities such as the Musicbrainz Picard tagger to tag your collection?)

Contenders

It struck me how many GTK music players there are out there, and especially how similar some of them are.

  • Quod Libet: written in python, pretty advanced (podcasts, shoutcasts, Last.fm submissions, reg-exp song searching)
  • mpd: although I like a daemon based approach (I sometimes don't have X open - pretty seldomly though - ) it (even combined with any of the graphical front ends) doesn't offer anything close to my requirements
  • Banshee: built on Mono. Has podcasts, ipod support, smart playlists, and even inotify support but didn't even compile on Gentoo, so never mind...
  • Listen: written in python, it looks pretty advanced: podcasts, shoutcasts, Last.fm, Wikipedia fetching, ... it can even create playlists for you based on your Last.fm account
  • Rhythmbox: Gnomes music player inspired by Apple's iTunes. featuring internet radio, ratings, lyrics, artwork, Last.fm, podcasts, cd-ripping, ipod writing (only partial !), plugins, file system monitoring (I think through polling, not through inotify). According to some people it's pretty buggy and I can only agree: version 0.10 (latest) crashed many times on me :(
  • Exaile I kept the best one for the end ;-). It's another one written in python, inspired by Amarok and hence has many similar features. In addition to that you can also get guitar tabs with it. (why no drum tabs? ;-) ) According to somebody on trac it's better then Listen.

is Exaile a worthy alternative?

Description on the Exaile website:

Exaile is a music player aiming to be similar to KDE's Amarok, but for GTK+ and written in Python. It incorporates many of the cool things from Amarok (and other media players) like automatic fetching of album art, handling of large libraries, lyrics fetching, artist/album information via Wikipedia, Last.fm submission support, and optional iPod support via a plugin.
In addition, Exaile also includes a built-in SHOUTcast directory browser, tabbed playlists (so you can have more than one playlist open at a time), blacklisting of tracks (so they don't get scanned into your library), downloading of guitar tablature from fretplay.com, and submitting played tracks on your iPod to Last.fm

The description pretty much sums up all there is about Exaile.
However I want to add it also supports podcasts and streaming radio.
You can also rate all your tracks and it has some smart playlists (depending on ratings, newest, random, top tracks, ...)
It uses sqlite (no MySql support like Amarok, which is not a big miss)
The fact that it allows to have multiple playlists / radio's / ... open in tabs is a killer feature! (Amarok guys: implement this too!)
Another cool thing are the plugins which add even more functionality, and it's very easy to install them from inside the program, enabling goes instantly (without the need of a restart)
Also, it can output via jack, because it uses the GStreamer framework. It does however create a new jack instance for each song, so each time a song changes, it drops the current jack output and creates a new one. I don't like this, because each time have to re-attach my routings, maybe there is some automated way to do this (with qjackctl or something?) but I haven't figured it out yet. If anyone knows more about this, let me know!

When last.fm submission fails (eg when your connection is down) it doesn't keep a queue to resend later like Amarok does, also it currently doesn't offer Last.fm radio streaming.
When searching through your collection the results aren't updated instantly: it takes a second or so (just like when using Amarok, so that's fine)
I don't think Exaile can automatically mount your Ipod for you. But I don't think this is the task of the media player: You can always use a deamon (or your DE) to do that (I use thunar-volman in Xfce for that). The media player should however work well with the device, after it's mounted. In Exaile the Ipod plugin works pretty well, when you mount your Ipod you can make it connect to it, show you the playlists and songs, and you can add songs and playlists just like in Amarok. I couldn't, however, edit the playlist that was on the Ipod and creating and deleting a new playlist was a bit buggy (gui still showing old entry with some random ascii characters instead of not showing the playlist anymore)

As a last negative point, it seems to not support inotify as of yet. You can configure it to systematically re-scan your collection every specific interval which is okay, but doesn't come close to inotify (especially for huge collections)

So, to conclude I would say Exaile is a worthy alternative for Amarok, which is a huge thing to say. It doesn't offer everything Amarok does, but it does have most important features and even offers some - useful ones - that Amarok doesn't have. And I never had it to crash or anything like that, it behaved well and stable.

The project is however pretty young and it is being actively developed. Which is a must because some features still need to be implemented (such as inotify support and Last.fm streaming)
But I see much activity on trac, especially in the domain of Last.fm where I can see that support for Last.fm streams is scheduled for the next minor release (0.2.11) so I'm not worrying and I'm using Exaile full time right now.

I haven't deleted Amarok just yet, but I don't think that will take very long ;-)

Don't take my word for it, but if I ever find the time for it, I would even like to get intimate with the code base and do some contributions.

Comments

Great post, I'm having somewhat of the same issue.

I really love how Amarok works and all, but the Qt thing just looks alien, I'll have a look at exaile and see how well it will suit my needs. (I hope no one in #amarok of freenode reads this ;))

i'm trying out this exaile program but how can u make it connect to jack? (on gentoo)

Making use of jack was a bit tricky, especially on Gentoo.

You need the gst-plugins-bad package. It contains the jack audio output plugin.

On Gentoo you need gstreamer-0.10.13, gst-plugins-bad-0.10.5 and gst-plugins-base-0.10.13.
However the latest versions in portage are 0.10.12, 0.10.4 and 0.10.12 respectively. What I did is bump the ebuilds in my local portage overlay. (copy the ebuilds, put them in the right directories, change their versions and dependencies, then type ebuild *ebuild-name* digest)
Then delete "jack" from the my_gst_plugins_bad variable in the gst-plugins-bad.eclass
Keyword the packages and emerge (--update) them.
If all went well you now have the necessary stuff installed.

Then in ~/.exaile/settings.ini set audio_sink to jackaudiosink

If that all worked out, Exaile will open a jack audio output each time you play a song. Let me know how it worked out :-)

I just found out that in ~/.exaile/settings.ini the password for Last.fm is stored encrypted/hashed. I don't know if it can easily be decrypted or something (because I think Exaile needs to know the cleartext password to send it over a http or https (i don't know) channel)

But at least it's better then Amarok, which stores your Last.fm password (and MySql password too) in cleartext in your .kde/share/config/amarokrc !

@cleartext passwords:
gaim used to have a FAQ page dedicated to that issue, bottom line is: If someone can dig through the files in your ~ folder you have bigger problems than whether someone might pick up your last.fm password ;)

I personally use gnome-keyring whenever I can (I find it really convenient) but to untie programs from the DE they were written for I think the storing of the password in a text file makes sense (even though optional keyring backends would sometimes be neat). exaile needs the password in plaintext so the encryption could be reversed by anyone that wants to (just look into the exaile sources to figure it out) so it's more a security-by-obscurity thing (which is always a bad idea).

Well back on topic, exaile is running here now and not looking too bad, I'm still digging through it to find what's good and what's worse than in amarok (I already miss my moodbars ;))

Good point about ~ readability, but what about superusers/administrators? (root) I don't trust them either.
(luckily I usually am my own administrator)
But yeah, the application has to be able to send the password, so it must be able to know the cleartext one, and if the application can decyper it, you can too, so such a protection can - by definiton - never be secure. Unless you have to remember & type the key (password) to decypher it but that wouldn't be very convenient either :p

In such cases security by obscurity indeed isn't a good thing. Although imho that should not always be the case. For example for applications where you can safely assume no one will ever see the source code, like in php webapplications.

thx man, i got it to work, gentoo is so cool ^^

I am in love python, but I think Music Player with Python is bad idea !
I have Exaile but always crash (know I am listing music with Exaile, but I don't know why tonight works well !)

too many bugs for me on initial installation, and not quite enough functionality. as much as i don't want to have the KDE dependencies, i will continue to use amarok until exaile has been developed more fully.

The stable version (0.2x) works just fine. You must be installing latest alpha (0.3), which is of course work in progress and has not all of the features yet + it crashes often (here at least).
I only wish there was some other lyrics/info plugins available, cause the info tab its ok, but sometimes it fails to fetch the info and theres no way to refresh the tab (maybe just restart the song, close info tab and reopen or even restart exaile).
But all in all... im not using Amarok anymore ;)

Amarok is always crashing, rhythmbog doesn't have folder structure view...exile is perfect


Name:


E-mail:


URL:


Comment:


What is the first name of the guy blogging here?


This comment form is pretty crude. Make sure mandatory fields are entered correctly.
Basic html tags (a,i,b, etc) are allowed, others are sanitized