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:
- mc in alacritty to run m in a directory I want to play: script
- i3 key bindings to navigate through song and playlist: config
- xmobar (with a formatter) as a status output.
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 :)