uamp

Uamp is a minimal music player that doesn't get in your way. It isfast, reliable, and powerful.

Uamp is fully open source, with sources available at GitHub. It is written in Rust because I like Rust and I like to write efficient and fast code.

Why does uamp exist?

I was used to using Winamp on Windows. When I transitioned to Linux, I couldn't find any music player that would satisfy my needs:

Speed

I need a fast music player capable of managing large amounts of local songs (my library has over 3000 songs). Many existing music players couldn't handle this large number of songs. UAMP has no problem with this number of songs, and I made it to delegate expensive operations to other threads so that it never becomes unresponsive.

Global keyboard shortcuts

I'm used to using global keyboard shortcuts to control my music player. Many music players don't have global keyboard shortcuts or any alternative, or the shortcuts don't work well. Uamp has no global keyboard shortcuts, but users can control it with the CLI. The uamp CLI makes it very simple to create keyboard shortcuts for the required actions in your window manager (e.g., Kwin).

Fade play/pause

Since I discovered this feature in Winamp, I can't use play/pause without it. It is very unpleasant when you pause/play your playback, and it just transitions with silence immediately. This feature adds a few milliseconds where the volume changes from the current to 0 in case of pause and from 0 to the current volume, ensuring a smooth transition between playback and silence. Uamp allows you to specify this fade duration, and if you don't like it, you can disable this feature.

Fine control over low volumes

It is very annoying if the volume controls are linear. I remember using a music player where the volume I wanted was between 0 and 5 %, but the controls jumped by a change of 5 %, making huge changes to the volume. And on the other end of the scale, the difference between 80 % and 100 % was minimal. An ideal volume slider would be logarithmic, but this slider doesn't have a good definition on a finite range, and so it would be very unintuitive to use. I chose a quadratic slider. It is a simple yet good approximation of the logarithmic slider on a finite volume range. Thanks to the nonlinear volume slider, changes to low and high volumes in uamp have a much more consistent impact. Uamp also allows you to configure the volume jump so that you can set it to your liking.

Endless playback

When I play music in the background, I usually play a random mix of all of my songs. Many players make this operation quite hard, or it is not implemented very well (it chooses random songs instead of using a randomly mixed queue). In the end, every player has some way of achieving this. Uamp makes this very simple and goes further by automating the process of reshuffling the playlist when it finishes. Uamp has, by default, defined an alias that will do precisely that:

Randomly shuffle all songs. If the playlist ends, reshuffle it and continue from the start. If new songs are added to the library, shuffle them into the current playlist after the current song position.

This is done through parameters on a playlist that define what will happen when the playlist ends and if and how new songs should be added to the playlist.

Returning to the previous queue

Sometimes I want to listen to a specific album. If I play this album, the current queue will be discarded. Uamp has a stack of queues. You can play a specific album and have uamp continue playing the previous queue without modifying it.

Playing an audio file that is not in the library

Sometimes I want to play an audio file that is not in my song library, and I don't want to add it to the song library. I want to play it once. Uamp allows you to do that. If you play any audio file that is not in your library, uamp will pause the current playback and push the audio file to the new queue. When it finishes playing, uamp will continue with the playback of the previous queue. The previous queue will stay unmodified, and uamp will not add the audio file to the library.

Stability, reliability

If there is any bug in uamp, I can fix it. I use uamp daily, and if I encounter any issue, I fix it. If the issue prevents me from using uamp the way I want, I will push a new version of uamp with the fix immediately.

Some players stop the playback if there is any issue with playing a specific song. Uamp will log that there was an issue and silently continue to the next song.

Some players don't save their state when you forget to close them properly. If you turn your PC off, they will forget all changes since they were open. If the player, for some reason, crashes, it will also lose its state. Uamp correctly handles all exit signals and saves its state before exiting. Uamp also periodically saves any changes to its state so that if it crashes, the saved state is still relatively recent.

Some players, for some reason, have issues playing when another demanding task is running on the PC. One time, I was using it and stuttering the audio while playing games. Since the beginning of uamp, I have never encountered any issue of that kind with uamp. Even if the CPU is running at 100 %, uamp still plays.

My dream project

A music player is also my dream project. Uamp is the realization of that dream project. When I was using Winamp, I had no reason to create a fully functional music player, but after I started using Linux, I had to make myself a usable music player.

To create uamp, I had to make several Rust libraries (crates) because the existing ones weren't good enough. The libraries include raplay for playing audio, termal for colored printing to terminal (and other terminal manipulation), and pareg as a flexible command line argument parser (and parser in general).

Why should you use uamp?

Speed and efficiency

Uamp uses minimal system resources while having no problem managing huge amounts of songs.

Simplicity

By simplicity, I don't mean it's simple to use (although the CLI is friendly and well documented). Uamp is simple in principle. The music player should play music. That is what uamp does and does that very well.

Advanced features

Uamp has many advanced features that allow you to enjoy listening to your music. These features include gapless playback, fade play/pause, advanced queue (playlist) management (queue stack), and more.

No bloat

Uamp is a single binary that is about 18 MiB. Once compiled, it doesn't depend on other files except common system libraries.

Documentation

Everything about uamp is well documented at multiple places. The complete basic CLI documentation is the help command. There are also two manual pages: 1 for the CLI and general description, and 5 for describing the documentation.

NO UI?

Let's address the elephant in the room. Uamp has no user interface. It is fully controlled with commands from the terminal. This was meant to be only a temporary change, but in the process, I realized that I didn't miss the UI. Uamp is ready to play when my PC starts without me even knowing it. I have assigned global shortcuts to essential actions such as Play/Pause, Next, Previous, Volume Up and Down, and now I interact with the terminal interface only when I need to do specific actions. Uamp runs entirely in the background and consumes minimal resources (almost no CPU usage, no GPU usage, 10 - 15 MiB of RAM).

I may add TUI or GUI in the future, but this will never become required. Uamp will stay fully usable without UI, and the potential future UI will always be optional (at compile time and runtime).

Is uamp for you?

Uamp is for you if

  • You aren't afraid of a terminal. You will need to use it at least once.
  • You don't like bloat. Uamp is small and uses minimal resources.
  • You don't want your music player to get in your way. If uamp doesn't play, you don't know it's there.
  • You use Linux. I don't know of a better player for Linux.
  • You have a local library of songs. Uamp plays local music.

Uamp is NOT for you if

  • You have a fear of a terminal that you are unwilling to overcome. You will need to use the terminal at least once.
  • You are not using Linux, and uamp is not working correctly. Support for other OSs is theoretical. I don't have any way to test anything on any other operating system.
  • You found a better music player for Linux. Please let me know :)
  • You don't have a local song library. You stream your songs from a streaming service. Uamp plays local music.

Alternatives to uamp

Of course, these comparisons are opinionated, but there aren't any better comparisons with uamp, because no one knows about it. If you like uamp, consider giving it a star on GitHub.

Uamp

Uamp is not an alternative to uamp :) but let's first address the pros and cons of uamp itself.

Pros

  • Background blayback.
  • Handles large amounts of songs without issues.
  • Linux support.
  • Fade play/pause.
  • Many features, high configurability.
  • It is simple to mix a playlist.
  • Has extensive CLI.
  • It is simple to return to the previous queue.
  • Open source.
  • Saves its state and correctly handles exit signals.
  • Has no issues while another demanding task is running.
  • Quickly loads the song library.
  • You can automate stuff (endless playback).

Cons

  • No GUI.
  • No global keyboard shortcuts. (You can use your OS with uamp CLI to achieve this.)

Other players

These are music players that I know of and with which I have at least a little experience.

Strawberry

I settled on this player before creating uamp. It does everything well enough, but also not quite well. It has its website here.

Pros

  • GUI.
  • Fade play/pause.
  • Global keyboard shortcuts.
  • Handles large amounts of songs well.
  • Open source.

Cons

  • The GUI is hard to navigate at first.
  • Poor dark theme support.
  • Finding out how to mix a playlist takes a long time.
  • Has a problem with playback while another demanding task is running.
  • Global keyboard shortcuts sometimes don't work.
  • It isn't very easy to save and recover the previous queue.
  • Doesn't handle exit signals.

Rhythmbox

I used this on my Gnome laptop for a short period, but it was somehow very annoying to use. It has its website here.

Pros

  • GUI.
  • Dark theme support.
  • Global keyboard shortcuts.
  • Handles large amounts of songs ok.
  • Open source.
  • Supports playback in the background.
  • At least a minimal CLI can be used to control the running instance.
  • Linux support.

Cons

  • No fade play/pause.
  • GUI is unintuitive and frustrating.
  • Takes forever to initially load all songs.
  • Can't mix playlist? It's hard to find that option if it is there.
  • I closed it. Why is it still playing?
  • No global keyboard shortcuts (at least I couldn't find where to configure them).
  • It isn't very easy to save and recover the previous queue.
  • The music library sometimes unloads and has to be loaded again.

Winamp (legacy)

Winamp was the best player (apart from uamp) that I ever used on the desktop. It has many features, and on Windows, everything works well. But now that I'm used to some new features unique to uamp, I'm not sure I could go back to Winamp and be completely happy. Winamp has its website here. I don't speak about the new garbage, but the old legacy Winamp.

Pros

  • GUI.
  • Dark theme support.
  • Great global keyboard shortcuts.
  • Handles large amounts of songs without issues.
  • Windows support.
  • Fade play/pause.
  • High customizability.
  • It is simple to mix a playlist.

Cons

  • No background playback.
  • Unmaintained.
  • Closed/questionable license.
  • The GUI is complicated at first.
  • It isn't very easy to save and recover the previous queue.
  • No Linux support.
  • When it crashes, all state is lost.

Elisa

I wanted to use this player because I use KDE Plasma and like using apps from the KDE ecosystem. But it was unable to handle my large library of songs. It has its website here.

Pros

  • GUI.
  • Dark theme support.
  • GUI looks good and seems to be intuitive.

Cons

  • Cannot handle large amounts of songs.

XMMS

Tries to be Winamp, but can't do anything. Maybe this is my feeling only because I'm used to the Winamp modern skin, which is unavailable here. It is old and unmaintained. I couldn't even find out if it has a website.

Audacious

Looks good. I can't remember what my problems with it were. Maybe the GUI was so unintuitive that it scared me, so I didn't try hard enough to customize it to suit me. It has its website here.

The documentation here is under construction. For now, please refer to manual pages uamp(1) and uamp(5) or the help available with uamp -h or Readme at GitHub for tips on how to get started.