2021-10-20 11:56:54 +00:00
|
|
|
|
#+title: MPD Configuration
|
2021-11-08 14:02:25 +00:00
|
|
|
|
#+setupfile: headers
|
2021-10-20 11:56:54 +00:00
|
|
|
|
#+property: header-args:emacs-lisp :lexical t :exports none :tangle no
|
|
|
|
|
#+property: header-args:emacs-lisp+ :noweb yes :wrap src conf-space
|
|
|
|
|
#+property: header-args:conf-space :tangle ~/.config/mpd/mpd.conf :noweb yes :exports code
|
|
|
|
|
|
2023-09-18 16:45:14 +00:00
|
|
|
|
* MPD
|
2021-10-20 11:56:54 +00:00
|
|
|
|
As its name indicates, the [[https://www.musicpd.org/][Music Player Daemon]] --- or MPD for short
|
|
|
|
|
--- is a daemon that manages music files on a computer and plays them.
|
|
|
|
|
It can be manipulated by various front-end applications, such as the
|
|
|
|
|
command-line utility ~mpc~, TUI ~ncmpcpp~, or GUI ~cantata~. In my case, I
|
|
|
|
|
use mainly ~ncmpcpp~ and Emacs’ EMMS.
|
|
|
|
|
|
2024-09-21 13:27:37 +00:00
|
|
|
|
On my computer, MPD runs as a user daemon.
|
2021-10-20 11:56:54 +00:00
|
|
|
|
|
2023-09-18 16:45:14 +00:00
|
|
|
|
** Required Parameters
|
2021-10-20 11:56:54 +00:00
|
|
|
|
MPD requires a few compulsory parameters that we will see below.
|
|
|
|
|
#+name: mpd-required-parameters
|
|
|
|
|
| Parameter name | Value | Comment |
|
|
|
|
|
|-------------------------+---------------------------+--------------------------------------------------------------------------|
|
|
|
|
|
| =follow_outside_symlinks= | =yes= | Whether to follow symlinks pointing outside the music directory |
|
|
|
|
|
| =follow_inside_symlinks= | =yes= | Whether to follow symlinks pointing inside the music directory |
|
|
|
|
|
| =db_file= | =~/.config/mpd/database= | Location of MPD’s database |
|
|
|
|
|
| =sticker_file= | =~/.config/mpd/sticker.sql= | Location of the sticker database (dynamic information attached to songs) |
|
|
|
|
|
| =log_file= | =~/.config/mpd/log= | Location of MPD’s log file |
|
|
|
|
|
|
|
|
|
|
#+name: mpd-gen-values
|
|
|
|
|
#+begin_src emacs-lisp :var table=mpd-required-parameters :exports results
|
|
|
|
|
(mapconcat (lambda (parameter)
|
2021-10-23 16:24:45 +00:00
|
|
|
|
(let* ((trim-name (lambda (parameter)
|
|
|
|
|
(replace-regexp-in-string (regexp-quote "=")
|
|
|
|
|
""
|
|
|
|
|
parameter)))
|
2021-10-20 11:56:54 +00:00
|
|
|
|
(name (apply trim-name `(,(car parameter))))
|
|
|
|
|
(value (apply trim-name `(,(cadr parameter)))))
|
|
|
|
|
(format "%s \"%s\"" name value)))
|
|
|
|
|
table
|
|
|
|
|
"\n")
|
|
|
|
|
#+end_src
|
|
|
|
|
|
|
|
|
|
#+RESULTS: mpd-gen-values
|
|
|
|
|
#+begin_src conf-space
|
|
|
|
|
follow_outside_symlinks "yes"
|
|
|
|
|
follow_inside_symlinks "yes"
|
|
|
|
|
db_file "~/.config/mpd/database"
|
|
|
|
|
sticker_file "~/.config/mpd/sticker.sql"
|
|
|
|
|
log_file "~/.config/mpd/log"
|
|
|
|
|
#+end_src
|
|
|
|
|
|
2023-09-18 16:45:14 +00:00
|
|
|
|
** Optional Parameters
|
2023-03-20 16:17:57 +00:00
|
|
|
|
While these values are not strictly necessary, some are still useful
|
|
|
|
|
such as ~music_directory~: we don’t have to manually add our music to
|
|
|
|
|
MPD each time we run it.
|
2021-10-20 11:56:54 +00:00
|
|
|
|
#+name: mpd-optional-parameters
|
|
|
|
|
| Parameter | Value | Comment |
|
|
|
|
|
|--------------------+---------------------+-----------------------------------------------------------|
|
|
|
|
|
| =music_directory= | =~/Music= | Location of the music directory |
|
|
|
|
|
| =playlist_directory= | =~/Music/playlists= | Location of MPD playlists |
|
|
|
|
|
| =pid_file= | =~/.config/mpd/pid= | Location of MPD’s PID |
|
|
|
|
|
| =state_file= | =~/.config/mpd/state= | File where the state of MPD is saved when killed |
|
|
|
|
|
| =bind_to_address= | =localhost= | Limit MPD to the localhost address |
|
|
|
|
|
| =auto_update= | =yes= | No need to manually update MPD’s database with ~mpc update~ |
|
|
|
|
|
|
|
|
|
|
#+begin_src conf-space
|
|
|
|
|
<<mpd-gen-values(table=mpd-optional-parameters)>>
|
|
|
|
|
#+end_src
|
|
|
|
|
|
2023-09-18 16:45:14 +00:00
|
|
|
|
** Audio outputs
|
2023-12-10 14:09:07 +00:00
|
|
|
|
Two audio outputs will be defined. The first one sets Pulseaudio up,
|
|
|
|
|
so I can actually hear my music. Its configuration is simple, really.
|
2021-10-20 11:56:54 +00:00
|
|
|
|
#+begin_src conf-space
|
|
|
|
|
audio_output {
|
|
|
|
|
type "pulse"
|
|
|
|
|
name "pulse audio"
|
|
|
|
|
}
|
|
|
|
|
#+end_src
|
|
|
|
|
|
2023-03-20 16:17:57 +00:00
|
|
|
|
Another one sets up the visualizer of ~ncmpcpp~. It is not necessary to
|
|
|
|
|
create this one if you don’t plan on using this feature.
|
2021-10-20 11:56:54 +00:00
|
|
|
|
#+begin_src conf-space
|
|
|
|
|
audio_output {
|
|
|
|
|
type "fifo"
|
|
|
|
|
name "my_fifo"
|
|
|
|
|
path "/tmp/mpd.fifo"
|
|
|
|
|
format "44100:16:2"
|
|
|
|
|
}
|
|
|
|
|
#+end_src
|