In the first part of this series, I write about the key requirements for an audiophile digital music player and shared the criteria I use to evaluate open source music players. Here in the second part, I'll use those criteria to help you pick the right software for your needs.
First off, there are a lot of open source music players out there! Which is a wonderful thing, because each one is designed to make someone (or several someones) happy, depending on the features they require. A number of very thoughtfully designed and popular players don't serve my criterion of passing music directly through to my DAC, including Amarok (see this discussion), Clementine (see this discussion), and JuK (the only information I could find about setting output devices dates back to 2005).
I also passed on Aqualung (required compilation from source), Alsa Player (core dumped on trying to add a 96/24 FLAC file to the playlist), Elisa (site indicates it is still in heavy development and currently at version 0.2 or 0.3), Exaile (seems that the current version 4.0.0-rc3 requires compilation from source), GNOME Music (waited a looooong time with no sign of my music library being successfully loaded), and LXMusic (could only add MP3 files to the playlist).
Eliminating those applications left me with eight to review. First, I'll tell you a bit about each and then I'll share my ratings.
8 open source music players
Audacious is available in my system's repositories. After installing it, I configured the ALSA output plugin option, which supports automatic bit depth, to use the hardware option for the DAC. My DAC's location, /proc/asound/card1, showed that a 96/24 track was playing correctly. I could see a static bitrate, but no sign of the bitrate as a track plays nor the sample rate/word length. There is kind of a spectrum analyzer that gives a rough idea of the music level. Cover art seemed to work fine. As far as I could tell, the user must build the playlist and run the player on the playlist. My library of some 7,500 songs imported in less than 10 seconds—wow! I had some trouble figuring out the left-hand side of the display; after loading my library, it showed 15 genres (I have many more), then four artists, then one album by one of those artists. I could add URLs, but there was no directory of streams. All in all, not bad. Especially for those who have fond memories of Winamp but want something open source.
DeaDBeeF—such a name! But anyway, I installed the .deb file available from the site, which required two steps:
sudo dpkg -i deadbeef-static_0.7.2-2_amd64.deb
sudo apt install -f
I used Edit > Preferences to select the ALSA output plugin and select my DAC's "Direct hardware device without any conversions." I could see in /proc/asound/card1 that 96/24 tracks played correctly. The player shows a static bitrate, sample rate, word length, and a few other items. Oddly, the player presented a volume control that worked, which means there is some kind of conversion going on, at least when that control is used. There's also an option to configure digital signal processing (DSP) in Preferences, including an equalizer and a resampler. I removed the resampler but couldn't make the equalizer stay away. I found I could change the layout by enabling Design Mode—there are lots of customization options there. Neither the spectrum nor the scope options gave me a solid indication of their level. Cover art looked fine. This player also seems to be playlist-oriented. URLs can be added, but there does not seem to be a predefined directory. Like Audacious, my library imported very quickly—I estimate less than 10 seconds. It looks pretty good, with a serious focus on performance and flexibility, less on eye candy.
Gmusicbrowser is available in my system's repositories. After installing it, I used the Settings menu (the GNOME3 gear in the upper right) to configure the output to use ALSA (after passing it through GStreamer) and selected my hardware device. I could see in /proc/asound/card1 that 96/24 tracks played correctly. Song Properties shows the static bitrate and sample rate, but not the word depth. The player presents a volume control, which works and I suppose is managed by GStreamer. Gmusicbrowser includes a ton of layout options—it's possible to make it look like many other players. Also, you can add many different columns to the track-level display (e.g., bitrate, channels, size, sampling rate). Cover art looks good. Music can be played from the library or a playlist, but there's no sign of the ability to use a stream URL. My library import was fast, well under 10 seconds. It's a very decent player that fits in well with my GNOME desktop.
Goggles Music Manager
GogglesMM has been one of my favorite players for quite some time now. I really like the fact that it works directly with ALSA (i.e., no GStreamer pipeline intervening). I generally install it following instructions on the Launchpad page, then configure Settings > Preferences > Audio to use the ALSA driver and the hardware device for my DAC, with the No Resampling box checked and Replay Gain off. I can see in /proc/asound/card1 that 96/24 tracks play correctly. The only indication of sample rate and word length appears on high-resolution albums (for example, "24/96" in white text on a green box on the lower-right corner of the album cover in the album display panel). As expected, when directly interfacing to the ALSA hardware interface, there's no opportunity to set the volume or otherwise fiddle with the data stream. The overall UI organization seems pretty decent. You can fiddle with colors and turn the cover or lyrics views on or off. Cover art seems to be handled well. It can play music from an album or a playlist and URL streams can be defined and played. Library import is decently quick, under 20 seconds for my library. It's a really solid and purposeful no-frills player.
Guayadeque has long been my go-to player. I generally install it following instructions on its installation page, which gives a good summary of working from the source tree as well as using the precompiled binaries on Launchpad (for those who use Ubuntu). Once installed, I use View > Preferences > Playback to configure the output to be ALSA and the hardware interface of my DAC. I can see in /proc/asound/card1 that 96/24 tracks play correctly. When music is playing, I can see the static and instantaneous bitrates, file format, levels (peak, average, peak hold… wow!). I don't see the bit depth or sample rate of the files anywhere. However, having the instantaneous bitrate is pretty cool—I once noticed a song that was supposed to be 96/24 but had a very low bitrate; it turned out it was 96/16, which is pretty unusual. Although Guayadeque uses GStreamer, there's no inadvertent ability to mess with level settings and the like when the hardware level interface is selected, unless the DAC has hardware volume control. I like the overall organization of the UI, and it's quite configurable. Cover art is handled well. Music can be played from the album or playlist, stream URLs can be defined, and a number of stream URL databases are provided (for example, Shoutcast). Also worth noting is Guayadeque's great "smart playlist" feature (which queues songs from my library similar to the one playing). My library imported in under 20 seconds. It's a great player.
Quod Libet has also been a regular player on my computer. It's in my repositories, so I install it from there. Configuring the output is slightly challenging; this page of the documentation is very helpful (and this would be a good moment to mention that the Quod Libet documentation, in general, is excellent). In my case, File > Preferences > Playback allows me to set the output (GStreamer) pipeline to alsasink device=hw:1,0 at which point I'm good to go. I can confirm in /proc/asound/card1 that 96/24 tracks play correctly. The player offers to display a huge number of columns and apparently knows about bit depth and sample rate, but I haven't been able to get them to show up on any of the displays. I do see the static bitrate. Quod Libet uses GStreamer, and its volume control functions "even when it shouldn't." The UI is well-organized "out of the box" and easily configurable. Cover art is handled well. Music can be played from an album, a playlist, or stream URLs, and stream URL databases are provided. My library imported very rapidly, in under 10 seconds. Quod Libet is a very good player with wonderful documentation.
Strawberry is a fork of Clementine created by Jonas Kvinge. I quite like Strawberry—it offers a lot of Clementine's attractiveness while letting me redirect its output to my DAC. I downloaded the latest build for my distro, installed and configured it for use with my DAC using Tools > Settings > Backend to select "Output to a sound card via ALSA" and selected my DAC from the drop-down and the hardware interface. I can confirm in /proc/asound/card1 that 96/24 tracks play correctly. The Context button (the strawberry) at the top-left shows details of what's playing, including the sample rate, bit depth, static bitrate, the engine (GStreamer), and the device. These can also be shown in the listing of tracks. The volume control works (because of GStreamer, I guess). Cover art is well-executed. Music can be played from the album or playlist, but stream URLs do not appear to be supported. My library imported very rapidly, in under 10 seconds. In sum, it's a very good player and a very useful fork of Clementine.
Cantata is a front-end for the MPD music player back-end, and it's an extremely fine player combo. At this point, I don't use Cantata/MPD on my desktop, but I do run Cantata to control my home music server (which runs MPD headless). Both Cantata and MPD are available in my distro's repositories, and MPD is available in the repositories for the distro I run on my music server. Configuring MPD is a bit more work than the average desktop music player; you can read about my efforts. Configuring Cantata is a breeze; its configuration screens include a lot of useful hints, and the code works really well, unlike some MPD clients I could name. MPD provides direct access to ALSA devices, and I can confirm in /proc/asound/card2 on the music server that 96/24 tracks play correctly. Cantata picks up the static bitrate, sample rate, and bit depth of the file from MPD and shows it in the "info" screen for the track playing. Dynamic information, such as instantaneous bitrate or level, isn't provided by the MPD protocol. Cover art is tricky; the best way to handle it is to install a web server on the music server and configure it to share cover art files. I cheat a bit and keep a local copy of the cover art on the desktop I use to run Cantata. Cantata will also find art associated with the artists. Cantata can play music from an album, playlist, or stream URL, and it includes a nice database of stream URLs. It's the best MPD controller and a really fine player when combined with MPD.
Rating the music players
The following table shows my ratings of the various open source music players I tried. I've broken the players into two groups: most are standalone music players and one is a music player front-end used in conjunction with a music server like MPD.
I evaluated each application based on the criteria I outlined in part 1. Here's the rating scheme I'm using:
- 5 points for ALSA configurability
- 2 points for fully meeting a criterion
- 1 point for partially meeting a criterion
- 0 points for not meeting a criterion
|Good UX||Stream radio||Total|
|Quod Libet 4.1.0-1||5||0||0||0||2||2||0||2||2||62%|
There you have it. Eight audiophile-grade players that avoid resampling (though I think I prefer the players that talk directly to ALSA without GStreamer being involved) to hand the bits over to the DAC to make sublime music. Otherwise, they offer different features and different organization, from the minimalist Audacious to the super-configurable Quod Libet to the chameleon Gmusicbrowser. Worth a special mention are the excellent level meters and smart playlist feature in Guayadeque.