#+title: MPD Configuration #+setupfile: headers #+options: auto-id:t #+html_head: #+html_head: #+html_head: #+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 * Introduction :PROPERTIES: :CUSTOM_ID: Introduction-zln38f71v8j0 :END: 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. On my computer, MPD runs as a user daemon, as seen in [[file:bootstrap.org::#Execute_bootstrap-Enable_some_services-Mpd-f0f5b9b7][my bootstrap file here]]. * Required Parameters :PROPERTIES: :CUSTOM_ID: Required-Parameters-sa4jfr71v8j0 :END: 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) (let* ((trim-name (lambda (parameter) (replace-regexp-in-string (regexp-quote "=") "" parameter))) (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 * Optional Parameters :PROPERTIES: :CUSTOM_ID: Optional-Parameters-hkw8zz71v8j0 :END: While these values are not strictly necessary, some are still extremely useful such as ~music_directory~ so we don’t have to manually add our music to MPD each time we run it. #+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 <> #+end_src * Audio outputs :PROPERTIES: :CUSTOM_ID: Audio-outputs-emqjro81v8j0 :END: Two audio outputs will be defined. The first one is dedicated to Pulseaudio so I can actually hear my music. Its configuration is simple, really. #+begin_src conf-space audio_output { type "pulse" name "pulse audio" } #+end_src Another one is created, but this time for the visualizer of ~ncmpcpp~. It is not necessary to create this one if you don’t plan on using this feature. #+begin_src conf-space audio_output { type "fifo" name "my_fifo" path "/tmp/mpd.fifo" format "44100:16:2" } #+end_src