Andrey Listopadov

Linux Music Players

@linux @rant tools ~17 minutes read

I’m feeling ranty this week for some reason. Today will be no different and I’ll post another rant on the software world but not about programming. Instead, I want to tip into the consumer application world, and shit on the current state of music players on GNU/Linux specifically, although the situation is as bad as on other platforms IMO.

Not long ago I bought a new set of headphones and decided to upgrade my listening experience a bit. For the last few years, I usually listened to music on my phone via some streaming service - I’ve tried plenty and wasn’t really satisfied with any of these, although there are some good things each does. For example, thanks to Spotify and Google Play Music before it, I’ve discovered a lot of artists that I wouldn’t likely hit if not for their algorithm. Another thing - listening to music via a subscription service is dirt cheap.

My listening routine can be described as follows:

  1. Pick an album;
  2. Hit play;
  3. Enjoy.

Yes, I’m not into playlists, especially not into various methods for organizing music based on mood, algorithmically, by genre, etc. In fact, I openly despise playlists. I hate when players shuffle my music (looking at you, Spotify), so all I really need from a music player is to act mainly like a CD player/Vinyl turntable. I load a specific album, listen to it, and I’m done with it. An album is a piece of art - shuffling songs is like shuffling episodes of a show or chapters in a book.

What I did like in Spotify, and Google Play Music before it, was discovering new music. The subscription model means that I can listen to all new releases whenever they come out without having to pay for each of them, purchasing only those I absolutely want to keep, but on some other service that allows me to download the actual files, and listen to them without connecting to internet on any of my devices and in any music player. For those wondering, you can save your music on Spotify for later listening, but you can’t use Spotify without an internet connection even for listening to your downloaded music, because Spotify needs to check if your subscription is still active. And you can’t extract music from Spotify, legally, at least, so if Spotify disappears, all your purchased music goes down with it. I often find myself in this situation when I’m on a train, kilometers away from any cellular network, and Spotify refuses to load my offline music because there’s “no internet”. So I prefer to keep music I really enjoy out of streaming services.

Discovering new music on a snap is great, and the subscription model works for that especially well, but one of the problems with most subscription services is audio quality. When I’m listening on my phone I usually don’t care - it doesn’t feature a great DAC, I’m listening through wireless IEMs, although of decent quality, this still limits the quality of sound to what Bluetooth protocol is available for my phone. And another important thing with music on the phone - I’m listening to it on the go, so there’s little time to concentrate on details, like when I do at home when I have time to just listen to music without any distractions. So before you suggest using something like Tidal instead of Spotify just to get the quality audio - I don’t really need this kind of audio fidelity on the go, and at home, I have my FLACs.

Now let’s go back to the main topic - you got your FLACs, how to listen to them on your PC? Well, you use an audio player, of course, but which one?

My operating system of choice is Fedora and there are plenty of audio players for Linux that I can try. For the past few years, I’ve been using MVP as my music player - it can play everything I need, it stays out of the way, and it is fast and resource-friendly. But it is extremely cumbersome to use. While not a problem for me, as I rarely listened to music on my PC previously, now that I have a good pair of headphones, I tend to do it more often. And user experience with MPV started to show. My main problems with MPV are:

  • It’s a video player primarily so its UI is oriented towards the video playback.
  • You can’t click on the song in the album and play it, the song list only appears when you switch tracks as a visual aid.
  • It plays everything in the given directory, even cover images.
    • If you have a .cue file along with the album file, MPV will first play the .cue file, then it will play the album file, doubling the total length.
  • There’s no notion of a music library besides your filesystem - you just drag and drop files to the player.
  • It doesn’t remember where I was if you close it.
  • Wayland support is not great, for a quite long time the drag-and-drop feature did not work on GNOME at all for the flatpak package.

But these are the problems with stock MPV, there are plenty of other frontends for it, that may work better. I haven’t tried these, and maybe I will in the future. Ovoplayer looks promising, but sadly doesn’t have a package for Fedora, and for some reason doesn’t start from an Ubuntu container.

But this won’t be a rant if I’m going to list good players, so let’s start with “first-party” players, provided with the desktop environment. After that, let’s look at some modern players. Then, I’ll list some other commonly suggested players.

GNOME Music

As I’m using GNOME let’s start with the GNOME Music.

Figure 1: GNOME Music screenshot from the project web page

Figure 1: GNOME Music screenshot from the project web page

First things first, I used this player years ago and I remember it being OK. However, trying it today I can’t say that I like it. Well, can’t say I dislike it either, it just doesn’t work for me.

It has a nice UI, though I’d prefer a slimmer one. Importantly, it has dedicated tabs for albums, artists, individual song lists, and a separate tab for playlists. Unfortunately, GNOME Music doesn’t support .cue sheets. I have some releases that are using .cue sheets and I, personally, don’t want to go through the hassle of extracting individual tracks. As a result, these releases are missing from the Albums tab. There’s an open bug report asking for the .cue support that dates back to 2016.

These albums show up in the “Songs” section though, so you can listen to them, as a single stream. That’s not bad, considering that I’m usually listening to albums from start to finish, but what’s the point of having an organized albums section if it doesn’t show all of the albums, and you have to remember that you still have them in the tracks section. That can contain thousands of items because of the size of the music library.

Oh, and you can’t change your music folder, it only works with ~/Music for some reason. Well, I, personally, don’t have a problem with that - that’s where I store music on my PC, but it may not work for other people.

Amberol

GNOME had a neat idea - create a list of applications designed specifically for GNOME with its guidelines in mind. It is called GNOME Circle, and it is listed among GNOME’s core apps. The Amberol, at the moment of writing, is one of the first apps on the list, and it is a music player.

Figure 2: Amberol screenshot from the project web page

Figure 2: Amberol screenshot from the project web page

Similarly to GNOME Music, Amberol doesn’t support .cue sheets. Again, there’s a bug report for that, but the reason it doesn’t support .cue is due to the method they access files. Sandboxing, which is used by flatpaks causes problems, as the portal interface isn’t designed for this particular use-case.

Unlike GNOME Music, however, Amberol doesn’t show these albums in the playlist at all. Don’t ask me why, I don’t know. And unlike GNOME Music, there is no dedicated tab for albums, artists, or anything really - only a single playlist, consisting of all tracks in your music library. I know that Amberol tries to be a simple music player, but I wouldn’t say that GNOME Music was complicated. Going simpler than GNOME Music is hurting usability.

Lollypop

Another music player that is made using GNOME guidelines. It has more features than Amberol, and maybe even more features than GNOME Music:

Figure 3: Lollypop screenshot from the project web page

Figure 3: Lollypop screenshot from the project web page

But once again - missing albums due to missing .cue support. Are you for real? Another 8-year-old bug report asking for .cue support with no resolution. Well, at least there is some discussion going on, so the ticket isn’t entirely stale.

What’s even weirder, it seems that Lollypop doesn’t have a tracklist, unlike the previous two players. It’s weird because while I don’t use this feature, it’s so fundamental to all music players we’re going to discuss further, not having it is just strange.

I’m starting to think that the GNOME project simply can’t have a decent music player. Let’s look at how KDE does this.

Elisa

A few years ago I was using KDE for a brief period, but I can’t remember if KDE did have their dedicated music player back then. Or maybe I wasn’t bothered to check, as I already used MPV. As far as I can see today the KDE Project has the Elisa music player:

Figure 4: Elisa screenshot from the project web page

Figure 4: Elisa screenshot from the project web page

Well, I tried it, and… missing albums, again! And again due to the lack of .cue support! There’s a bug report for that again, and there are even some duplicates, probably because their bug tracker web interface is abysmal.

Seriously, are .cue sheets that rare? Maybe they are hard to implement properly? Up to this moment, only MPV could deal with them with no problem, and it’s a shame.

Well, at least these .cue albums show up in the Tracks section, as a single track. Hitting play on one of them, however, plays a random album instead. Welp. It’s a shame though, the UI is clean, everything is mostly logically displayed, and there’s little wasted space, unlike in many GNOME apps.

Amarok

Another project is often seen on KDE systems.

Figure 5: Amarok screenshot from the project web page

Figure 5: Amarok screenshot from the project web page

No Flathub entry, that’s a good start. You see, I mostly install software through flatpaks because I use Fedora Silverblue - an immutable OS. This can cause problems, and I know that, but most of the time everything works fine.

Figure 6: Don’t worry, Clementine, I’ll get to you soon

Figure 6: Don’t worry, Clementine, I’ll get to you soon

Once again, missing .cue support. Which is weird, as there are reports on the internet that Amarok does support .cue since version 1.2.4. Maybe it was lost along the way, I don’t know. Well, at least it shows the albums in the list of all media, albeit as a single file. Thank you for not omitting these, at least. And it actually plays them, unlike Elisa.

The user interface, on the other hand, is weird. I couldn’t figure out if I’d pressed the pause button, as it doesn’t change shape, and the visualizer doesn’t stop immediately either. This is because there’s by default a two-second fade-out that has to play out before the track is put on pause, and the button doesn’t change until the track is fully stopped. I dislike fadeouts, crossfades, and other things like that, sorry.

Well, it’s an old project, and its UI is a product of its time, I guess.

Rhythmbox

Figure 7: Rhythmbox screenshot from Flathub

Figure 7: Rhythmbox screenshot from Flathub

Another fairly old music player. Yet, the user interface is clean, uncluttered, and concise. Nothing but praise from me on the UI.

Again, no .cue support! WHY?

Well, at least, there’s a plugin. The flatpak version couldn’t see external plugins, so I had to install it as an rpm package inside a container (Silberblue works like that). And while it works now, for some reason, the .cue albums aren’t shown in the albums section. Instead, they’re shown under the Unknown section, and clicking on such an album opens a separate window with track listing obtained from the .cue file. So the experience isn’t great, unfortunately. But we’re close.

Clementine Strawberry

I told you that we’re going to talk about Clementine.

Figure 8: Strawberry screenshot from the project web page

Figure 8: Strawberry screenshot from the project web page

Strawberry is a fork of Clementine, which is a fork of Amarok. Same as Amarok, the default UI is horrible, sorry. But, finally, a .cue support! Which makes it even stranger, as Amarok itself did not work with .cue files. Maybe I’m missing something?

Importing my music library I can now see all of the albums, and play individual tracks, but it’s so clumsy. When I open the album, and double click on the track, this only track is appended to the playlist. And it isn’t the one played either.

I do hate playlists, but what I hate even more is play queues, and this action acts like adding to a queue. I don’t want to deal with a queue at all - give me an album list, play the one I’m interested in, or start from a track I’m interested in going forward. Simple as that. In Strawberry, I have to clear a playlist, replace the playlist with an album playlist, or create a new playlist, and it’s just tiresome when all I want is to listen to a specific album.

Why is it so hard for most players today? Don’t tell me I’m using players wrong. I mean, I can get this from Strawberry, just going through several hoops. Well, we were going into older players, let’s look at something more recent then. Maybe some modern players took inspiration from Spotify and others and made something similar.

Tambourine

Well, I’ve kinda covered modern players already at the start of this post, but these were desktop environment-specific players. Mostly. This one is just an independent project.

Figure 9: Tambourine screenshot from the project web page

Figure 9: Tambourine screenshot from the project web page

The interface is laggy and we’re back to no .cue support. It has potential, though.

Also, good luck searching for a “Tambourine music player”.

Nuclear

I’ve seen this player being praised online several times but never took a look.

Figure 10: Nuclear screenshot from the project repository

Figure 10: Nuclear screenshot from the project repository

The startup time of several seconds and crashed when I tried to import my music library. It’s funny, though, this is what they say on their web page:

Say goodbye to proprietary music players filled with ads, tracking, and profiling. Nuclear empowers you to listen to what you want, where you want, and how you want, for free

They say it like there are no other non-proprietary music players without all of that. Well, maybe, if we’re talking about service-based players, like Spotify, but I’m here for a local-first player. Their user interface is filled with some online garbage, trending artists, and such, not sure what service it comes from. The local library is waaay below in the list, and, as mentioned, it doesn’t work. I’ve limited it to a portion of the library, and there is no .cue support, once again.

But again, it’s funny, when I pressed play on the album, the player immediately added something that wasn’t in my library to the queue right after it. Kinda disagrees with the statement they make on the web page. That’s not how I want to listen to music.

Tauon Music Box

Is the closest to no-bullshit among all of the ones I’ve tried.

Figure 11: Tauon Music Box screenshot from Flathub

Figure 11: Tauon Music Box screenshot from Flathub

It does support .cue sheets (wow), and managed to load my music library without many issues. One of the problems occurred with a three-disk album that doesn’t have disk metadata, for some reason. Every track appeared as a separate album in the list. But, to be honest, this three-disk album is hard for all other players I’ve tried (that support .cue), not sure why.

I like this player, but its UI is a bit too flat and too simplistic for my taste. Like, all of the buttons are just differently arranged rectangles. I can get used to this, but a bit more clarity wouldn’t hurt. Another small nitpick is that the album grid scrolls in fixed steps, and not fluidly - it just throws me off a bit.

Other than that - good player, can recommend.

Qmmp

Figure 12: Qmmp screenshot from the project web page

Figure 12: Qmmp screenshot from the project web page

Well, most modern players didn’t make the cut, let’s go back and look at older ones.

If you want an old Winamp-like player, qmmp is probably what you’re looking for. It supports Winamp skins and acts pretty much the same way.

It plays everything, has the .cue support, and the only issue for me is that I can’t drag the window with the mouse. Probably some Wayland/GTK incompatibilities - it’s a Qt-based player after all. I have tried it in the past as well, though I vaguely remember having issues with it here and there. So I moved to Deadbeef.

Deadbeef

I’ve previously used Deadbeef, and I think it’s one of the best players available on Linux. I have never used Foobar2000 but as far as I know, Deadbeef is similar to it.

Figure 13: Deadbeef screenshot from the project web page (it doesn’t look like this OOTB)

Figure 13: Deadbeef screenshot from the project web page (it doesn’t look like this OOTB)

For some reason, it isn’t available in the form of a flatpak, so I had to install it inside of a container, similar to Rhythmbox.

Again, it plays anything and has the .cue support. There are many plugins, and this player can be heavily configured. UI is a bit ugly, but who cares? And you can stylize it with plugins, replacing any element you don’t like. On my older setup, I had the seek bar replaced with a waveform, kinda like on SoundCloud. I lost my config years ago and don’t want to reconfigure it again, honestly, even if it looks like there are not many changes.

Still, it has many small problems. You can’t enable album repeat without going into the menu, the play and pause buttons are separate, and you do have to press play to play and pause to pause. In most players play acts as a pause when the playback is active, and vice versa.

I like how you can make a simple playlist look like these are separate albums. These lines between each album are just separators in a continuous stream of songs, yet, enabling album cover art makes it look even more like separate entries. It’s just an illusion, though, a clever one.

Audacious

Figure 14: Audacious screenshot from the project web page

Figure 14: Audacious screenshot from the project web page

Audacious is another good music player. After a few tweaks in the settings, it looks quite similar to Deadbeef. Unlike Deadbeef, I couldn’t find any way to separate albums in the playlist.

I don’t like playlists, but both Deadbeef and Audacious have an OK playlist experience. Disabling the column headers helps Audacious a lot, as you basically prevent any shuffling of your playlist by doing so. So if you’ve dragged a folder with songs into the player, and they’re in the correct order, you just hit play and you’re good. In some albums, I had tracks imported in the wrong order, and while it is a bummer - it is an easy fix.

And unlike most other players, Audacious managed to import this three-disk .cue album and have all disks organized nicely. That is until I accidentally hit “sort by the album”, and it grouped all three disks into one album again (after that I disabled the column headers). What is also weird, is that it doesn’t seem to support the disk metadata.

Skill issue?

Yeah, yeah, I know, that’s a fair point. But honestly, I don’t believe that using a music player should be hard or unintuitive. The default players in GNOME and KDE do an OK job, to be honest, it’s just the fact that they can’t play everything I have.

Remember how it was in the old days? You pick your CD, tape cassette, or vinyl record, put it into a respective device and you’re good. Yes, you had to swap disks if you wanted to listen to something else, and you couldn’t change the order of tracks. On the other hand, you’ve listened to music how the artist intended.

PC audio players felt liberating back then because you could reorder things, which usually was impossible on the physical medium. And they had many more features, unavailable on most playback devices back then. But today, I personally want to go back to a simpler time, but without having to deal with actual CDs. CDs are good as backups, as I still have some music disks from the 2000s that still work, and I don’t have any hard drive from the 2000s that works. Vinyl is also good, possibly even better to actually preserve data, but it is mastered differently, and I don’t have a turntable.

There are probably many more players I haven’t tried, and it’s almost impossible to do because there are too many of them. Again, Tauon Music Box was good, so it’s possible to create a modern player, nobody just really wants to. It does support everything I need, but I didn’t really like the UI, to be honest, and it has problems with multi-disk albums.

The struggle doesn’t stop there though. On Windows, it is a bit better - it has Winamp, AIMP, and Foobar2000. Mobile devices are, however, in a similar trouble as the Linux desktop - good luck finding a decent no-bullshit local-first music player for Android. I know, it has AIMP, VLC, and MPV but out of these three only AIMP is a music player. There are paid music players too, but I don’t know if any of them actually good. And I don’t have an Apple device, so I don’t know if it has good non-stock music players.

So I landed up on Strawberry for now - it works better than everything else, but I’d like something a bit simpler. Seriously, though - bring .cue support to GNOME Music and it got pretty much everything I need.