As I described in my last article[1], when I'm using a Linux-based computer to listen to music, I pass that music through a dedicated digital-analog converter, or DAC. To make sure the bits in the music file get through to the DAC without any unnecessary fiddling on the part of intermediate software on my computer (like audio mixers), I like to aim the music player directly at the hw interface[2] (or, if necessary, the plughw interface) that ALSA provides to the external equipment.
So, when I hear about a new music player, the first thing I do is figure out how to configure the output device. In the process of reviewing quite a few Linux-based music players, I'm beginning to see a pattern.
First, a sizable group of players depends on GStreamer[3] to play the audio. As its website says, GStreamer is a multimedia framework that allows construction of arbitrary pipelines of media-processing components. In my case, the alsasink plugin[4] can be used in a pipeline, like this:
gst-launch-1.0 -v uridecodebin uri=file:///path/to/my.flac ! audioconvert ! audioresample ! autoaudiosink
to play back the file /path/to/my.flac
on the default ALSA audio output device. Note the use of the audioresample
component in the pipeline—that's one of the things I don't want! Also, I don't want to use the ALSA default output—I want to select the device.
GStreamer-based music players vary in the configurability of their outputs. At the one extreme, players like QuodLibet[5] provide the ability to precisely configure the output. At the other extreme, players like Rhythmbox[6] use the default audio device, meaning—as far as I can tell, anyway—that mixing and resampling are going to happen.