My quest for a Linux audio player (Linux.com)
Posted Apr 4, 2006 18:41 UTC (Tue) by
jwb (guest, #15467)
Parent article:
My quest for a Linux audio player (Linux.com)
I've done something along the lines of this testing over the last two weeks, and I'd be happy to share my results.
Rhythmbox: A reasonably good player but sharing the library with iTunes still does not work. Keeps tracks in the library even if the volume where the files are stored is not mounted, which is a feature I appreciate. Can interact with all my network-stored music via GNOME VFS2. Uses GStreamer, which I consider a fundamental design flaw.
Amarok: Launches with a useless mini window and no obvious way to manage your library. Becomes confused by its own dotfiles when you upgrade versions. Stores album art out-of-band, which is not useful. Crashes.
Banshee: Written using Mono by GNOME hackers, but doesn't use GNOME VFS, so can't interact with my network library. Doesn't seem to be any way to get a reasonable sorted list: you can sort by album but then the songs are disordered by track. If a song is in your library more than once, the song is shown multiple times in the library view. Has automatic tagging features, but no feedback, so you can't tell if they are working. Consumes insane amounts of memory. Has O(N^2) library import time: by 1000 songs imported it's taking several seconds per song. Good iPod support. Working interaction with iTunes. Uses GStreamer.
One thing I really came to appreciate while comparing these programs (and lightly hacking them) is that GStreamer is a mistake. If your program uses GStreamer, there is basically no way to report useful error messages back to the user (or even back to the program) and no way to just get a damn array of audio samples. I was trying to add MusicIP fingerprinting to these programs but it's just not straightforward when you use GStreamer.
See also Video I/O on Linux: Lessons Learned from SGI, specifically the sections "Just Give Me the Data!" and "Plug-in Dataflow Graphs."
We also incorrectly assumed that most application writers would want "help" creating complex graphs of interconnecting components (video/file sources, processing plugins, video/file sinks) and pushing data through those graphs. Our design became complex: writing the API itself, and writing applications with that API, became difficult. Eventually we were spending most of our time focusing on this complexity problem we had created ourselves. We weren't helping developers with the high-level mechanisms: we were putting obstacles between them and their data.
That's exactly how I felt all last week.
(
Log in to post comments)