xmms2 0.9.1 is out

Tl;DR: xmms2-0.9.1 is out and you can get it at https://github.com/xmms2/xmms2-devel/releases/tag/0.9.1!

xmms2 is a music player daemon with various plugins to support stream decoding and transformation.

xmms2 most basic usage

To play a song you need to add it to database and then play it:

$ xmms2 clear
$ xmms2 add .
$ xmms2 play

To check on current status:

$ xmms2 list
->[1/3096] mind.in.a.box - Lament for Lost Dreams (snippet) (00:26)

Total playtime: 0:00:26

$ xmms2 status

   (n) jump to next song
   (p) jump to previous song
   (SPACE) toggle playback
   (ENTER) exit status mode

Paused: mind.in.a.box - Lament for Lost Dreams (snippet): 00:05 of 00:26

xmms2 CLI has many more options:

xmms2 help
usage: xmms2 <command> [args]

Available commands:
   add
   current
   exit
   help
   info
   jump
   list
   move
   next
   pause
   play
   prev
   remove
   stop
   search
   seek
   toggle
   collection <subcommand>
   playlist <subcommand>
   server <subcommand>

Type 'help <command>' for detailed help about a command.

You really want some frontend to manipulate the player.

I usually run a shell wrapper in a directory I want to play. Effectively I’m using my window manager as a frontend:

other bits

xmms2 supports a ton of plugins to play all sorts of formats. Here is what I have installed (it’s not a complete list):

$ xmms2 server plugins
airplay         - Airport Express output plugin
alsa            - Advanced Linux Sound Architecture output plugin
ao              - libao output plugin
apefile         - Monkey's Audio file format demuxer
asf             - Advanced Systems Format demuxer
asx             - Playlist plugin for Advanced Stream Redirector files.
avcodec         - ffmpeg libavcodec decoder
converter       - Sample format converter
cue             - Playlist parser for cue files
curl            - HTTP transport using CURL
diskwrite       - Dumps audio data to disk
equalizer       - Equalizer effect
faad            - Advanced Audio Coding decoder
file            - Plain local file transport
flac            - Free Lossless Audio Codec decoder
fluidsynth      - MIDI synthesiser
flv             - Extracts an audio stream from an FLV
gme             - Game Music Emulator music decoder
gvfs            - Transport for glibs virtual filesystem
html            - Reads HTML playlists
icymetaint      - Decode & use shoutcast stream metadata
id3v2           - ID3v2 tag container handler
karaoke         - Voice removal effect plugin
m3u             - Playlist parser for m3u's
mad             - MPEG Layer 1/2/3 decoder
magic           - Magic file identifier
mid1            - MIDI file format-1 demuxer
midsquash       - Multitrack MIDI squasher
mms             - Microsoft Media Services xform
modplug         - Module file decoder
mp4             - MPEG-4 Part 14 file format demuxer
mpg123          - mpg123 decoder for MPEG 1.0/2.0/2.5 layer 1/2/3 audio
nibbler         - Discarding padding using auxdata startsamples/stopsamples
normalize       - Volume normalizer
null            - null output plugin
nulstripper     - Strips leading NUL bytes
ofa             - Open Fingerprint calculator
opus            - Xiph's Ogg/Opus decoder
oss             - OpenSoundSystem output plugin
pls             - Playlist parser for PLS files.
pulse           - Output to a PulseAudio server
replaygain      - Replaygain effect
ringbuf         - Buffer
segment         - Handling segment information specified by startms/stopms
sndfile         - Libsndfile decoder
speex           - Speex decoder
tremor          - Xiph's Ogg/Vorbis decoder (integer-only version)
tta             - True Audio Codec TTA file format parser
visualization   - visualization hook
vorbis          - Xiph's Ogg/Vorbis decoder
wave            - Wave decoder
wavpack         - WavPack decoder
xml             - XML plugin

why xmms2?

My path to xmms2 was fun. My first audio player program was winamp 2 on windows 98. When I switched to linux I picked closest alternative (and even brought my favourite hacker skin). It was xmms.

xmms was a good player. But it’s upstream development stalled. It was using gtk-1 at the time when everyone else was migrating to gtk-2. A bunch of gtk-2 forks appeared and none looked close enough to xmms. Some had too thick UI buttons, some had problems playing enough audio formats I had. Most did not support xmms skins and were not able to present their status as a 16-pixel high window somewhere on the desktop.

xmms2 was a new project that aimed to be xmms done right architecturally. I read the initial announcement at the time and though it will eventually be just like xmms. Haha. I tried xmms2 out and was able to play all song formats I had. I was surprised to see how quickly it builds from source.

xmms2 felt incomplete as it planned but never implemented GUI client. Eventually abraca materialized but I never got to run it: I already settled on my set of CLI hacks to play things.

Eventually xmms2 development pace was slowing down. I was wondering if there are any direct alternatives to xmms2 out there. mpd looked like a close match. But when I tried it I found xmms2 snappier to add files to the database and to scroll along the playlists with i3 keybindings. I suspect mpd was not optimised for that use case. I never moved off xmms2. I still plan to add UNI module file format support to xmms2 via libmikmod or similar :)

Posted on May 2, 2022 by trofi. Email, pull requests or comments are welcome!