Music Player Daemon/Tips and tricks
Go back to Music Player Daemon.
Contents
- 1 Organizing library
- 2 Last.fm/Libre.fm scrobbling
- 3 Disable resume playback on startup
- 4 Example configuration: Output with 44.1 KHz at e. g. 16 bit depth, multiple programs at once
- 5 Control MPD with lirc
- 6 PulseAudio
- 7 Cue Files
- 8 HTTP streaming
- 9 MPRIS2 Support
- 10 Notifications
- 11 Adding a separate volume control (ALSA)
Organizing library
MPD does not manage your library. Check out beets or picard in the official repositories.
Last.fm/Libre.fm scrobbling
To scrobble your songs to Last.fm or Libre.fm when using MPD, there are several possibilities.
mpdas
mpdas is an AudioScrobbler client for MPD written in C++. It uses curl and libmpd. mpdas supports the latest AudioScrobbler protocol (2.0) and will also cache unscrobbled plays in ~/.mpdascache if there is no network connectivity.
mpdasAUR is available in the AUR.
Configuration of mpdas is very simple, see the official README. A very basic example of /etc/mpdasrc is also available as /etc/mpdasrc.
Your password can also be in the form of an md5hash:
$ echo -n 'PASSWORD' | md5sum | cut -f 1 -d " "
To autostart mpdas along with mpd, add an entry for it into the file in which you start mpd (e.g. xinitrc):
[[ -z $(pgrep -xU $UID mpdas) ]] && mpdas &
When mpd is started with a systemd user service, it is better to start mpdas the same way:
$ systemctl --user start mpdas.service
mpdas.service after system startup, consider using socket activation with mpd.socket instead.mpdscribble
mpdscribbleAUR is a daemon available in the AUR. This is arguably the best alternative, because it is the semi-official MPD scrobbler and uses the new "idle" feature in MPD for more accurate scrobbling. Also, you do not need root access to configure it, because it does not need any changes to /etc at all. Visit the official website for more information.
Example configuration:
~/.mpdscribble/mpdscribble.conf
[mpdscribble] host = your mpd host #host is optional, defaults to $MPD_HOST or localhost port = your mpd port #port is optional, defaults to $MPD_PORT or 6600 log = /home/YOUR_USERNAME/.mpdscribble/mpdscribble.log verbose = 2 proxy = your proxy # proxy is optional, e. g. http://your.proxy:8080, defaults to none [last.fm] # last.fm section, comment if you do not use last.fm url = http://post.audioscrobbler.com/ username = your last.fm username password = your last.fm password journal = /home/YOUR_USERNAME/.mpdscribble/lastfm.journal [libre.fm] # libre.fm section, comment if you do not use libre.fm url = http://turtle.libre.fm/ username = your libre.fm username password = your libre.fm password journal = /home/YOUR_USERNAME/.mpdscribble/librefm.journal
Your password can also be in the form of an md5hash.
echo -n "password" | md5sum | cut -f 1 -d " "
To autostart mpdscribble you can use the mpdscribble.service under systemd user instance. See systemd/User for details.
Alternatively you can autostart mpdscribble along with mpd, add an entry for it into the file in which you start mpd (e.g. ~/.xinitrc):
[[ -z $(pgrep -xU $UID mpdscribble) ]] && mpdscribble &
[last.fm] handshake failed, username or password incorrect (BADAUTH) error, make sure your username and password are correct, and that your password is not 32 characters long.Sonata
Sonata has built-in support for scrobbling, although that requires the program to run the whole time. Additionally, Sonata does not cache the songs if they cannot be forwarded to Last.fm at the time of playing, meaning they will not be added to the statistics.
YAMS
YAMS is a Last.FM scrobbling daemon for MPD written in Python.
As it's written for v2.0 of Last.FM's scrobbling API, YAMS does not store your username or password locally, but opts to use a cookie instead. Similar to other scrobblers, YAMS can save failed scrobbles and upload them at a later date. It also offers a decent amount of configuration options for when/how a scrobble should be made (including ignoring duplicate scrobbles when a track is played multiple times in a row).
python-yamsAUR is available in the AUR.
In order to authenticate, the user must run the yams command in an interactive terminal, at least once, and follow the printed instructions.
Afterwards, YAMS can be started with its binary:
yams runs as a daemon by default (yams -N will run it in the foreground).
yams -k will kill the current running instance.
yams -a will attach to the current running instance's log file, allowing you to watch the daemon's output.
yams -h will print all command line options.
YAMS also comes with a systemd service file that can be started with systemctl --user start yams after authentication is complete.
Disable resume playback on startup
This feature is present in mpd after version 0.16.2. When this feature is enabled, mpd will always start in the "paused" state, even if a song was playing when mpd was stopped. Add the line below to your mpd.conf to enable this feature.
restore_paused "yes"
Example configuration: Output with 44.1 KHz at e. g. 16 bit depth, multiple programs at once
Why these formats? Because they are the standard format for CD audio, because ALSA on its own allows more than one program "to sound" only with dmix — which uses an inferior resampling algorithm by default — and because dmix by default resamples anything lower to 48 KHz (or whatever higher format is playing at the time). Also, some get clicking sounds if at least mpd.conf is not changed this way.
What is the downside? These settings cause everything (if necessary) to be resampled to this format, such as material from DVD or TV which usually is at 48 KHz. But there is no known way to have ALSA dynamically change the format, and particularly if you listen to far more CDs than anything else the occasional 48 → 44.1 is not too great a loss.
The following assumes that there are not already other settings which conflict resp. overwrite it. This applies especially to the current user's potential ~/.asoundrc — which MPD as its own user ignores, therefore the following should go to /etc/asound.conf:
/etc/asound.conf
defaults.pcm.dmix.rate 44100 # Force 44.1 KHz defaults.pcm.dmix.format S16_LE # Force 16 bits
/etc/mpd.conf
audio_output {
type "alsa" # Use the ALSA output plugin.
name "your_custom_name" # Must be present and does not have to match the actual card name , e.g. what you have in /etc/asound.conf
options "dev=dmixer"
device "plug:dmix" # Both lines cause MPD to output to dmix
format "44100:16:2" # the actual format
auto_resample "no" # This bypasses ALSA's own algorithms, which generally are inferior. See below how to choose a different one.
}
If one wants to leave the bit depth decision to ALSA resp. MPD, comment out resp. omit the dmix.format line and change the one for mpd with format to "44100:*:2".
Control MPD with lirc
There are already some clients designed for communications between lircd and MPD, however, as far as the practical use, they are not very useful since their functions are limited.
It is recommended to use mpc with irexec. mpc is a command line player which only sends the command to MPD and exits immediately, which is perfect for irexec, the command runner included in lirc. What irexec does is that it runs a specified command once received a remote control button.
First of all, please setup your remotes as referred to the LIRC article.
Edit your favored lirc startup configuration file, default location is ~/.lircrc.
Fill the file with the following pattern:
begin
prog = irexec
button = <button_name>
config = <command_to_run>
repeat = <0 or 1>
end
An example:
## irexec
begin
prog = irexec
button = play_pause
config = mpc toggle
repeat = 0
end
begin
prog = irexec
button = stop
config = mpc stop
repeat = 0
end
begin
prog = irexec
button = previous
config = mpc prev
repeat = 0
end
begin
prog = irexec
button = next
config = mpc next
repeat = 0
end
begin
prog = irexec
button = volup
config = mpc volume +2
repeat = 1
end
begin
prog = irexec
button = voldown
config = mpc volume -2
repeat = 1
end
begin
prog = irexec
button = pbc
config = mpc random
repeat = 0
end
begin
prog = irexec
button = pdvd
config = mpc update
repeat = 0
end
begin
prog = irexec
button = right
config = mpc seek +00:00:05
repeat = 0
end
begin
prog = irexec
button = left
config = mpc seek -00:00:05
repeat = 0
end
begin
prog = irexec
button = up
config = mpc seek +1%
repeat = 0
end
begin
prog = irexec
button = down
config = mpc seek -1%
repeat = 0
end
There are more functions for mpc, run mpc(1) for more info.
PulseAudio
Local (as your own user)
No special options are required; just add a pulse output as described in the comments of mpd's config file.
Local (with separate mpd user)
When run as its own user as per the wiki instructions, mpd will be unable to send sound to another user's pulseaudio server. Rather than setting up pulseaudio as a system-wide daemon, a practice strongly discouraged by upstream, you can instead configure mpd to use pulseaudio's tcp module to send sound to localhost:
First, uncomment the tcp module in /etc/pulse/default.pa or $XDG_CONFIG_HOME/pulse/default.pa (typically ~/.config/pulse/default.pa) and set 127.0.0.1 as an allowed IP address; the home directory takes precedence:
### Network access (may be configured with paprefs, so leave this commented ### here if you plan to use paprefs) #load-module module-esound-protocol-tcp load-module module-native-protocol-tcp auth-ip-acl=127.0.0.1 #load-module module-zeroconf-publish
Additional IP ranges in cidr notation may be added using ; as the separator. Once this is complete, restart pulseaudio:
$ pulseaudio --kill $ pulseaudio --start -or- start-pulseaudio-x11/kde
Next, edit /etc/mpd.conf and add a new pulse output pointing to 127.0.0.1 as a "remote" server:
audio_output {
type "pulse"
name "Local Music Player Daemon"
server "127.0.0.1"
}
Once this is added, restart mpd.
Enable the output in mpd; you should now have a working local mpd, usable by all users whose pulseaudio servers allow sound from 127.0.0.1.
Remote
As with any PulseAudio-enabled program, mpd can send sound over the network. The complete PulseAudio system is not required on the server running mpd; libpulse is the only requirement to act as a source and is already a dependency of mpd.
In order to send audio from mpd to another computer follow the directions above, editing /etc/mpd.conf on the server running mpd using the IP address of the target computer and /etc/pulse/default.pa or $XDG_CONFIG_HOME/default.pa (typically ~/.config/pulse/default.pa) on the target computer using the IP address of the server.
Once this is done, the server's mpd source should show up on the target computer while playing or paused as a normal source able to be rerouted and controlled as usual; there will be no visible source on the target while mpd is stopped.
Cue Files
No additional steps are needed for cue support in mpd since 0.17. MPD has its own integrated parser which works with both external and embedded cuesheets.
For example, the command mpc load albumx/x.cue loads the file music_directory/albumx/x.cue as playlist; or in the case of an CUESHEET tag, mpc load albumx/x.flac.
Client support of CUE files is a bit limited. Two available programs that do support CUE files are cantata and ncmpcpp.
HTTP streaming
Since version 0.15 there is a built-in HTTP streaming daemon/server that comes with MPD.
Configuration
To activate this server simply set it as output device in mpd.conf:
audio_output {
type "httpd"
name "My HTTP Stream"
encoder "vorbis" # optional
port "8000"
# quality "5.0" # do not define if bitrate is defined
bitrate "128" # do not define if quality is defined
format "44100:16:1"
always_on "yes" # prevent MPD from disconnecting all listeners when playback is stopped.
tags "yes" # httpd supports sending tags to listening streams.
}
Format
MPD supports several encoding formats. See what your MPD supports with:
$ mpd --version
Use
Then to listen to this stream simply open the URL of your mpd server (along with the specified port) in your favorite music player. Note: You may have to specify the file format of the stream using an appropriate file extension in the URL. For example, using Winamp 5.5, You would use http://192.168.1.2:8000/mpd.ogg rather than http://192.168.1.2:8000/.
To use mpd to connect to the stream from another computer:
mpc add http://192.168.1.2:8000
MPRIS2 Support
mpDris2
Install the mpDris2AUR package. It runs in the user session and monitors the mpd server.
Copy the default configuration file from /usr/share/doc/mpdris2/mpDris2.conf to ~/.config/mpDris2/mpDris2.conf. Edit it as needed.
mpDris2 has a .desktop file, but it will not show up by default. You can set this to autostart at login. If your desktop environment cannot do this, you can set it manually by making a symlink in ~/.config/autostart/
$ ln -s /usr/share/applications/mpdris2.desktop ~/.config/autostart/
It should now be autorun at login.
mpd-mpris
Install the mpd-mprisAUR package.
After installation, you can start or enable the mpd-mpris.service user service through systemd.
By default mpd-mpris listens on localhost:6600 (which is the default host/port of mpd). To change this settings copy /usr/lib/systemd/user/mpd-mpris.service to ~/.config/systemd/user/ then edit run parameters as needed.
Notifications
The mpDris2AUR package optionaly support displaying graphical notifications. If you not want the whole mpris support and is looking for a more lightweight or specific options, here are some options:
musnify-mpd
musnify-mpd is a simple script written in python that provides notification support for Music Player Daemon using libnotify. It can also display the album covers loaded from last fm or load it from the user local music library.
musnify-mpdAUR is available from AUR.
After installation you may want to configure your mpd host and port, to do this copy the ".example" file into ~/.config/musnify-mpd
$ mkdir ~/.config/musnify-mpd $ cp /usr/share/doc/musnify-mpd/musnify-mpdconfig.example ~/.config/musnify-mpd/musnify-mpd.config
Example configuration:
~/.config/musnify-mpd/musnify-mpd.config
[mpd] host = localhost port = 6600 # This is where musnify-mpd will look for searching the local album covers. musiclibrary = ~/Music # [apiKey] # If you want to fetch the album covers from LastFm, # enable this option and provide a apiKey. # You can get your apiKey here: https://www.last.fm/api/account/create # # lastfm = YOUR_LASTFM_API_KEY
To enable artworks from last.fm, you will need to edit ~/.config/musnify-mpd and provide a apiKey. You can create your apiKey here
mpd-notification
Notify about tracks played by mpd. This runs in background and produces notifications whenever mpd produces an event, that is new track is played or playback is paused or stopped. This also supports local or .mp3 album artworks.
mpd-notificationAUR is available from AUR.
After installation, just run mpd-notification to run it once. A systemd user service can be enabled with
$ systemctl --user enable mpd-notification
Adding a separate volume control (ALSA)
While MPD does not allow you to adjust its own volume by default (mpc volume affects global volume), you can easily make a MPD-specific volume slider using the softvol ALSA module. Just add this to asound.conf:
pcm.mpd {
type softvol
slave.pcm "default"
control.name "MPD"
control.card 0
}
And link it to MPD:
mpd.conf
audio_output {
device "mpd"
mixer_control "MPD"
}
Afterwards you will be able to adjust song volume both through mpc and amixer.