This is a guide for those who wish to hack on the MPD source code. MPD is an open project, and we are always happy about contributions. So far, more than 150 people have contributed patches. This document is work in progress. Most of it may be incomplete yet. Please help!
This is a guide for those who wish to hack on the MPD source code. MPD is an open project, and we are always happy about contributions. So far, more than 150 people have contributed patches. This document is work in progress. Most of it may be incomplete yet. Please help!
Code Style
Code Style
==========
**********
* indent with tabs (width 8)
* indent with tabs (width 8)
* don't write CPP when you can write C++: use inline functions and constexpr instead of macros
* don't write CPP when you can write C++: use inline functions and constexpr instead of macros
...
@@ -18,7 +18,6 @@ Code Style
...
@@ -18,7 +18,6 @@ Code Style
* classes and functions names use CamelCase; variables are lower-case with words separated by underscore
* classes and functions names use CamelCase; variables are lower-case with words separated by underscore
@@ -59,7 +58,7 @@ possible, to be sure that you don't break any disabled code.
...
@@ -59,7 +58,7 @@ possible, to be sure that you don't break any disabled code.
Don't mix several changes in one single patch. Create a separate patch for every change. Tools like :program:`stgit` help you with that. This way, we can review your patches more easily, and we can pick the patches we like most first.
Don't mix several changes in one single patch. Create a separate patch for every change. Tools like :program:`stgit` help you with that. This way, we can review your patches more easily, and we can pick the patches we like most first.
Basic stgit usage
Basic stgit usage
-----------------
=================
stgit allows you to create a set of patches and refine all of them: you can go back to any patch at any time, and re-edit it (both the code and the commit message). You can reorder patches and insert new patches at any position. It encourages creating separate patches for tiny changes.
stgit allows you to create a set of patches and refine all of them: you can go back to any patch at any time, and re-edit it (both the code and the commit message). You can reorder patches and insert new patches at any position. It encourages creating separate patches for tiny changes.
...
@@ -94,7 +93,7 @@ When the whole patch series is finished, convert stgit patches to git commits:
...
@@ -94,7 +93,7 @@ When the whole patch series is finished, convert stgit patches to git commits:
The default plugin. Stores a copy of the database in memory. A file is used for permanent storage.
The default plugin. Stores a copy of the database in memory. A file is used for permanent storage.
...
@@ -25,7 +25,7 @@ The default plugin. Stores a copy of the database in memory. A file is used for
...
@@ -25,7 +25,7 @@ The default plugin. Stores a copy of the database in memory. A file is used for
- Compress the database file using gzip? Enabled by default (if built with zlib).
- Compress the database file using gzip? Enabled by default (if built with zlib).
proxy
proxy
~~~~~
-----
Provides access to the database of another :program:`MPD` instance using libmpdclient. This is useful when you run mount the music directory via NFS/SMB, and the file server already runs a :program:`MPD` instance. Only the file server needs to update the database.
Provides access to the database of another :program:`MPD` instance using libmpdclient. This is useful when you run mount the music directory via NFS/SMB, and the file server already runs a :program:`MPD` instance. Only the file server needs to update the database.
...
@@ -45,30 +45,30 @@ Provides access to the database of another :program:`MPD` instance using libmpdc
...
@@ -45,30 +45,30 @@ Provides access to the database of another :program:`MPD` instance using libmpdc
- Send TCP keepalive packets to the "master" :program:`MPD` instance? This option can help avoid certain firewalls dropping inactive connections, at the expensive of a very small amount of additional network traffic. Disabled by default.
- Send TCP keepalive packets to the "master" :program:`MPD` instance? This option can help avoid certain firewalls dropping inactive connections, at the expensive of a very small amount of additional network traffic. Disabled by default.
upnp
upnp
~~~~
----
Provides access to UPnP media servers.
Provides access to UPnP media servers.
Storage plugins
Storage plugins
---------------
===============
local
local
~~~~~
-----
The default plugin which gives :program:`MPD` access to local files. It is used when music_directory refers to a local directory.
The default plugin which gives :program:`MPD` access to local files. It is used when music_directory refers to a local directory.
curl
curl
~~~~
----
A WebDAV client using libcurl. It is used when :code:`music_directory` contains a http:// or https:// URI, for example :samp:`https://the.server/dav/`.
A WebDAV client using libcurl. It is used when :code:`music_directory` contains a http:// or https:// URI, for example :samp:`https://the.server/dav/`.
smbclient
smbclient
~~~~~~~~~
---------
Load music files from a SMB/CIFS server. It is used when :code:`music_directory` contains a smb:// URI, for example :samp:`smb://myfileserver/Music`.
Load music files from a SMB/CIFS server. It is used when :code:`music_directory` contains a smb:// URI, for example :samp:`smb://myfileserver/Music`.
nfs
nfs
~~~
---
Load music files from a NFS server. It is used when :code:`music_directory` contains a nfs:// URI according to RFC2224, for example :samp:`nfs://servername/path`.
Load music files from a NFS server. It is used when :code:`music_directory` contains a nfs:// URI according to RFC2224, for example :samp:`nfs://servername/path`.
...
@@ -81,7 +81,7 @@ This plugin uses libnfs, which supports only NFS version 3. Since :program:`MPD`
...
@@ -81,7 +81,7 @@ This plugin uses libnfs, which supports only NFS version 3. Since :program:`MPD`
Don't fear: "insecure" does not mean that your NFS server is insecure. A few decades ago, people thought the concept of "privileged ports" would make network services "secure", which was a fallacy. The absence of this obsolete "security" measure means little.
Don't fear: "insecure" does not mean that your NFS server is insecure. A few decades ago, people thought the concept of "privileged ports" would make network services "secure", which was a fallacy. The absence of this obsolete "security" measure means little.
udisks
udisks
~~~~~~
------
Mount file systems (e.g. USB sticks or other removable media) using
Mount file systems (e.g. USB sticks or other removable media) using
the udisks2 daemon via D-Bus. To obtain a valid udisks2 URI, consult
the udisks2 daemon via D-Bus. To obtain a valid udisks2 URI, consult
...
@@ -106,29 +106,30 @@ MPD user.
...
@@ -106,29 +106,30 @@ MPD user.
.. _neighbor_plugin:
.. _neighbor_plugin:
Neighbor plugins
Neighbor plugins
----------------
================
smbclient
smbclient
~~~~~~~~~
---------
Provides a list of SMB/CIFS servers on the local network.
Provides a list of SMB/CIFS servers on the local network.
udisks
udisks
~~~~~~
------
Queries the udisks2 daemon via D-Bus and obtain a list of file systems (e.g. USB sticks or other removable media).
Queries the udisks2 daemon via D-Bus and obtain a list of file systems (e.g. USB sticks or other removable media).
upnp
upnp
~~~~
----
Provides a list of UPnP servers on the local network.
Provides a list of UPnP servers on the local network.
.. _input_plugins:
.. _input_plugins:
Input plugins
Input plugins
-------------
=============
alsa
alsa
~~~~
----
Allows :program:`MPD` on Linux to play audio directly from a soundcard using the scheme alsa://. Audio is formatted as 44.1 kHz 16-bit stereo (CD format). Examples:
Allows :program:`MPD` on Linux to play audio directly from a soundcard using the scheme alsa://. Audio is formatted as 44.1 kHz 16-bit stereo (CD format). Examples:
...
@@ -141,7 +142,7 @@ Allows :program:`MPD` on Linux to play audio directly from a soundcard using the
...
@@ -141,7 +142,7 @@ Allows :program:`MPD` on Linux to play audio directly from a soundcard using the
mpc add alsa://hw:1,0 plays audio from device hw:1,0 cdio_paranoia
mpc add alsa://hw:1,0 plays audio from device hw:1,0 cdio_paranoia
cdio_paranoia
cdio_paranoia
~~~~~~~~~~~~~
-------------
Plays audio CDs using libcdio. The URI has the form: "cdda://[DEVICE][/TRACK]". The simplest form cdda:// plays the whole disc in the default drive.
Plays audio CDs using libcdio. The URI has the form: "cdda://[DEVICE][/TRACK]". The simplest form cdda:// plays the whole disc in the default drive.
...
@@ -157,7 +158,7 @@ Plays audio CDs using libcdio. The URI has the form: "cdda://[DEVICE][/TRACK]".
...
@@ -157,7 +158,7 @@ Plays audio CDs using libcdio. The URI has the form: "cdda://[DEVICE][/TRACK]".
- Request CDParanoia cap the extraction speed to Nx normal CD audio rotation speed, keeping the drive quiet.
- Request CDParanoia cap the extraction speed to Nx normal CD audio rotation speed, keeping the drive quiet.
curl
curl
~~~~
----
Opens remote files or streams over HTTP using libcurl.
Opens remote files or streams over HTTP using libcurl.
...
@@ -179,22 +180,22 @@ Note that unless overridden by the below settings (e.g. by setting them to a bla
...
@@ -179,22 +180,22 @@ Note that unless overridden by the below settings (e.g. by setting them to a bla
- Verify the certificate's name against host? `More information <http://curl.haxx.se/libcurl/c/CURLOPT_SSL_VERIFYHOST.html>`_.
- Verify the certificate's name against host? `More information <http://curl.haxx.se/libcurl/c/CURLOPT_SSL_VERIFYHOST.html>`_.
ffmpeg
ffmpeg
~~~~~~
------
Access to various network protocols implemented by the FFmpeg library: gopher://, rtp://, rtsp://, rtmp://, rtmpt://, rtmps://
Access to various network protocols implemented by the FFmpeg library: gopher://, rtp://, rtsp://, rtmp://, rtmpt://, rtmps://
file
file
~~~~
----
Opens local files
Opens local files
mms
mms
~~~
---
Plays streams with the MMS protocol using `libmms <https://launchpad.net/libmms>`_.
Plays streams with the MMS protocol using `libmms <https://launchpad.net/libmms>`_.
nfs
nfs
~~~
---
Allows :program:`MPD` to access files on NFSv3 servers without actually mounting them (i.e. in userspace, without help from the kernel's VFS layer). All URIs with the nfs:// scheme are used according to RFC2224. Example:
Allows :program:`MPD` to access files on NFSv3 servers without actually mounting them (i.e. in userspace, without help from the kernel's VFS layer). All URIs with the nfs:// scheme are used according to RFC2224. Example:
...
@@ -205,7 +206,7 @@ Allows :program:`MPD` to access files on NFSv3 servers without actually mounting
...
@@ -205,7 +206,7 @@ Allows :program:`MPD` to access files on NFSv3 servers without actually mounting
Note that this usually requires enabling the "insecure" flag in the server's /etc/exports file, because :program:`MPD` cannot bind to so-called "privileged" ports. Don't fear: this will not make your file server insecure; the flag was named in a time long ago when privileged ports were thought to be meaningful for security. By today's standards, NFSv3 is not secure at all, and if you believe it is, you're already doomed.
Note that this usually requires enabling the "insecure" flag in the server's /etc/exports file, because :program:`MPD` cannot bind to so-called "privileged" ports. Don't fear: this will not make your file server insecure; the flag was named in a time long ago when privileged ports were thought to be meaningful for security. By today's standards, NFSv3 is not secure at all, and if you believe it is, you're already doomed.
smbclient
smbclient
~~~~~~~~~
---------
Allows :program:`MPD` to access files on SMB/CIFS servers (e.g. Samba or Microsoft Windows). All URIs with the smb:// scheme are used. Example:
Allows :program:`MPD` to access files on SMB/CIFS servers (e.g. Samba or Microsoft Windows). All URIs with the smb:// scheme are used. Example:
...
@@ -214,7 +215,7 @@ Allows :program:`MPD` to access files on SMB/CIFS servers (e.g. Samba or Microso
...
@@ -214,7 +215,7 @@ Allows :program:`MPD` to access files on SMB/CIFS servers (e.g. Samba or Microso
mpc add smb://servername/sharename/filename.ogg
mpc add smb://servername/sharename/filename.ogg
qobuz
qobuz
~~~~~
-----
Play songs from the commercial streaming service Qobuz. It plays URLs in the form qobuz://track/ID, e.g.:
Play songs from the commercial streaming service Qobuz. It plays URLs in the form qobuz://track/ID, e.g.:
...
@@ -240,7 +241,7 @@ Play songs from the commercial streaming service Qobuz. It plays URLs in the for
...
@@ -240,7 +241,7 @@ Play songs from the commercial streaming service Qobuz. It plays URLs in the for
- The `Qobuz format identifier <https://github.com/Qobuz/api-documentation/blob/master/endpoints/track/getFileUrl.md#parameters>`_, i.e. a number which chooses the format and quality to be requested from Qobuz. The default is "5" (320 kbit/s MP3).
- The `Qobuz format identifier <https://github.com/Qobuz/api-documentation/blob/master/endpoints/track/getFileUrl.md#parameters>`_, i.e. a number which chooses the format and quality to be requested from Qobuz. The default is "5" (320 kbit/s MP3).
tidal
tidal
~~~~~
-----
Play songs from the commercial streaming service `Tidal <http://tidal.com/>`_. It plays URLs in the form tidal://track/ID, e.g.:
Play songs from the commercial streaming service `Tidal <http://tidal.com/>`_. It plays URLs in the form tidal://track/ID, e.g.:
...
@@ -266,10 +267,10 @@ Play songs from the commercial streaming service `Tidal <http://tidal.com/>`_. I
...
@@ -266,10 +267,10 @@ Play songs from the commercial streaming service `Tidal <http://tidal.com/>`_. I
.. _decoder_plugins:
.. _decoder_plugins:
Decoder plugins
Decoder plugins
---------------
===============
adplug
adplug
~~~~~~
------
Decodes AdLib files using libadplug.
Decodes AdLib files using libadplug.
...
@@ -283,17 +284,17 @@ Decodes AdLib files using libadplug.
...
@@ -283,17 +284,17 @@ Decodes AdLib files using libadplug.
- The sample rate that shall be synthesized by the plugin. Defaults to 48000.
- The sample rate that shall be synthesized by the plugin. Defaults to 48000.
audiofile
audiofile
~~~~~~~~~
---------
Decodes WAV and AIFF files using libaudiofile.
Decodes WAV and AIFF files using libaudiofile.
faad
faad
~~~~
----
Decodes AAC files using libfaad.
Decodes AAC files using libfaad.
ffmpeg
ffmpeg
~~~~~~
------
Decodes various codecs using FFmpeg.
Decodes various codecs using FFmpeg.
...
@@ -309,12 +310,12 @@ Decodes various codecs using FFmpeg.
...
@@ -309,12 +310,12 @@ Decodes various codecs using FFmpeg.
- Sets the FFmpeg muxer option probesize, which specifies probing size in bytes, i.e. the size of the data to analyze to get stream information. The `FFmpeg formats documentation <https://ffmpeg.org/ffmpeg-formats.html>`_ has more information.
- Sets the FFmpeg muxer option probesize, which specifies probing size in bytes, i.e. the size of the data to analyze to get stream information. The `FFmpeg formats documentation <https://ffmpeg.org/ffmpeg-formats.html>`_ has more information.
flac
flac
~~~~
----
Decodes FLAC files using libFLAC.
Decodes FLAC files using libFLAC.
dsdiff
dsdiff
~~~~~~
------
Decodes DFF files containing DSDIFF data (e.g. SACD rips).
Decodes DFF files containing DSDIFF data (e.g. SACD rips).
- This specifies whether to support gapless playback of MP3s which have the necessary headers. Useful if your MP3s have headers with incorrect information. If you have such MP3s, it is highly recommended that you fix them using `vbrfix <http://www.willwap.co.uk/Programs/vbrfix.php>`_ instead of disabling gapless MP3 playback. The default is to support gapless MP3 playback.
- This specifies whether to support gapless playback of MP3s which have the necessary headers. Useful if your MP3s have headers with incorrect information. If you have such MP3s, it is highly recommended that you fix them using `vbrfix <http://www.willwap.co.uk/Programs/vbrfix.php>`_ instead of disabling gapless MP3 playback. The default is to support gapless MP3 playback.
mad
mad
~~~
---
Decodes MP3 files using `libmad <http://www.underbit.com/products/mad/>`_.
Decodes MP3 files using `libmad <http://www.underbit.com/products/mad/>`_.
mikmod
mikmod
~~~~~~
------
Module player based on `MikMod <http://mikmod.sourceforge.net/>`_.
Module player based on `MikMod <http://mikmod.sourceforge.net/>`_.
...
@@ -407,7 +408,7 @@ Module player based on `MikMod <http://mikmod.sourceforge.net/>`_.
...
@@ -407,7 +408,7 @@ Module player based on `MikMod <http://mikmod.sourceforge.net/>`_.
- Sets the sample rate generated by libmikmod. Default is 44100.
- Sets the sample rate generated by libmikmod. Default is 44100.
modplug
modplug
~~~~~~~
-------
Module player based on MODPlug.
Module player based on MODPlug.
...
@@ -421,27 +422,27 @@ Module player based on MODPlug.
...
@@ -421,27 +422,27 @@ Module player based on MODPlug.
- Number of times to loop the module if it uses backward loops. Default is 0 which prevents looping. -1 loops forever.
- Number of times to loop the module if it uses backward loops. Default is 0 which prevents looping. -1 loops forever.
mpcdec
mpcdec
~~~~~~
------
Decodes Musepack files using `libmpcdec <http://www.musepack.net/>`_.
Decodes Musepack files using `libmpcdec <http://www.musepack.net/>`_.
mpg123
mpg123
~~~~~~
------
Decodes MP3 files using `libmpg123 <http://www.mpg123.de/>`_.
Decodes MP3 files using `libmpg123 <http://www.mpg123.de/>`_.
opus
opus
~~~~
----
Decodes Opus files using `libopus <http://www.opus-codec.org/>`_.
Decodes Opus files using `libopus <http://www.opus-codec.org/>`_.
pcm
pcm
~~~
---
Read raw PCM samples. It understands the "audio/L16" MIME type with parameters "rate" and "channels" according to RFC 2586. It also understands the MPD-specific MIME type "audio/x-mpd-float".
Read raw PCM samples. It understands the "audio/L16" MIME type with parameters "rate" and "channels" according to RFC 2586. It also understands the MPD-specific MIME type "audio/x-mpd-float".
sidplay
sidplay
~~~~~~~
-------
C64 SID decoder based on `libsidplayfp <https://sourceforge.net/projects/sidplay-residfp/>`_ or `libsidplay2 <https://sourceforge.net/projects/sidplay2/>`_.
C64 SID decoder based on `libsidplayfp <https://sourceforge.net/projects/sidplay-residfp/>`_ or `libsidplay2 <https://sourceforge.net/projects/sidplay2/>`_.
...
@@ -463,23 +464,23 @@ C64 SID decoder based on `libsidplayfp <https://sourceforge.net/projects/sidplay
...
@@ -463,23 +464,23 @@ C64 SID decoder based on `libsidplayfp <https://sourceforge.net/projects/sidplay
- Only libsidplayfp. Absolute path to basic rom image file.
- Only libsidplayfp. Absolute path to basic rom image file.
sndfile
sndfile
~~~~~~~
-------
Decodes WAV and AIFF files using `libsndfile <http://www.mega-nerd.com/libsndfile/>`_.
Decodes WAV and AIFF files using `libsndfile <http://www.mega-nerd.com/libsndfile/>`_.
vorbis
vorbis
~~~~~~
------
Decodes Ogg-Vorbis files using `libvorbis <http://www.xiph.org/ogg/vorbis/>`_.
Decodes Ogg-Vorbis files using `libvorbis <http://www.xiph.org/ogg/vorbis/>`_.
wavpack
wavpack
~~~~~~~
-------
Decodes WavPack files using `libwavpack <http://www.wavpack.com/>`_.
Decodes WavPack files using `libwavpack <http://www.wavpack.com/>`_.
wildmidi
wildmidi
~~~~~~~~
--------
MIDI decoder based on `libwildmidi <http://www.mindwerks.net/projects/wildmidi/>`_.
MIDI decoder based on `libwildmidi <http://www.mindwerks.net/projects/wildmidi/>`_.
...
@@ -495,10 +496,11 @@ MIDI decoder based on `libwildmidi <http://www.mindwerks.net/projects/wildmidi/>
...
@@ -495,10 +496,11 @@ MIDI decoder based on `libwildmidi <http://www.mindwerks.net/projects/wildmidi/>
.. _encoder_plugins:
.. _encoder_plugins:
Encoder plugins
Encoder plugins
---------------
===============
flac
flac
~~~~
----
Encodes into `FLAC <https://xiph.org/flac/>`_ (lossless).
Encodes into `FLAC <https://xiph.org/flac/>`_ (lossless).
.. list-table::
.. list-table::
...
@@ -511,7 +513,7 @@ Encodes into `FLAC <https://xiph.org/flac/>`_ (lossless).
...
@@ -511,7 +513,7 @@ Encodes into `FLAC <https://xiph.org/flac/>`_ (lossless).
- Sets the libFLAC compression level. The levels range from 0 (fastest, least compression) to 8 (slowest, most compression).
- Sets the libFLAC compression level. The levels range from 0 (fastest, least compression) to 8 (slowest, most compression).
lame
lame
~~~~
----
Encodes into MP3 using the `LAME <http://lame.sourceforge.net/>`_ library.
Encodes into MP3 using the `LAME <http://lame.sourceforge.net/>`_ library.
...
@@ -527,12 +529,12 @@ Encodes into MP3 using the `LAME <http://lame.sourceforge.net/>`_ library.
...
@@ -527,12 +529,12 @@ Encodes into MP3 using the `LAME <http://lame.sourceforge.net/>`_ library.
- Sets the bit rate in kilobit per second. Cannot be used with quality.
- Sets the bit rate in kilobit per second. Cannot be used with quality.
null
null
~~~~
----
Does not encode anything, passes the input PCM data as-is.
Does not encode anything, passes the input PCM data as-is.
shine
shine
~~~~~
-----
Encodes into MP3 using the `Shine <https://github.com/savonet/shine>`_ library.
Encodes into MP3 using the `Shine <https://github.com/savonet/shine>`_ library.
...
@@ -546,7 +548,7 @@ Encodes into MP3 using the `Shine <https://github.com/savonet/shine>`_ library.
...
@@ -546,7 +548,7 @@ Encodes into MP3 using the `Shine <https://github.com/savonet/shine>`_ library.
- Sets the bit rate in kilobit per second.
- Sets the bit rate in kilobit per second.
twolame
twolame
~~~~~~~
-------
Encodes into MP2 using the `TwoLAME <http://www.twolame.org/>`_ library.
Encodes into MP2 using the `TwoLAME <http://www.twolame.org/>`_ library.
...
@@ -562,7 +564,7 @@ Encodes into MP2 using the `TwoLAME <http://www.twolame.org/>`_ library.
...
@@ -562,7 +564,7 @@ Encodes into MP2 using the `TwoLAME <http://www.twolame.org/>`_ library.
- Sets the bit rate in kilobit per second. Cannot be used with quality.
- Sets the bit rate in kilobit per second. Cannot be used with quality.
opus
opus
~~~~
----
Encodes into `Ogg Opus <http://www.opus-codec.org/>`_.
Encodes into `Ogg Opus <http://www.opus-codec.org/>`_.
...
@@ -584,7 +586,7 @@ Encodes into `Ogg Opus <http://www.opus-codec.org/>`_.
...
@@ -584,7 +586,7 @@ Encodes into `Ogg Opus <http://www.opus-codec.org/>`_.
.. _vorbis_plugin:
.. _vorbis_plugin:
vorbis
vorbis
~~~~~~
------
Encodes into `Ogg Vorbis <http://www.vorbis.com/>`_.
Encodes into `Ogg Vorbis <http://www.vorbis.com/>`_.
...
@@ -600,13 +602,13 @@ Encodes into `Ogg Vorbis <http://www.vorbis.com/>`_.
...
@@ -600,13 +602,13 @@ Encodes into `Ogg Vorbis <http://www.vorbis.com/>`_.
- Sets the bit rate in kilobit per second. Cannot be used with quality.
- Sets the bit rate in kilobit per second. Cannot be used with quality.
wave
wave
~~~~
----
Encodes into WAV (lossless).
Encodes into WAV (lossless).
.. _resampler_plugins:
.. _resampler_plugins:
Resampler plugins
Resampler plugins
-----------------
=================
The resampler can be configured in a block named resampler, for example:
The resampler can be configured in a block named resampler, for example:
...
@@ -629,12 +631,12 @@ The following table lists the resampler options valid for all plugins:
...
@@ -629,12 +631,12 @@ The following table lists the resampler options valid for all plugins:
- The name of the plugin.
- The name of the plugin.
internal
internal
~~~~~~~~
--------
A resampler built into :program:`MPD`. Its quality is very poor, but its CPU usage is low. This is the fallback if :program:`MPD` was compiled without an external resampler.
A resampler built into :program:`MPD`. Its quality is very poor, but its CPU usage is low. This is the fallback if :program:`MPD` was compiled without an external resampler.
libsamplerate
libsamplerate
~~~~~~~~~~~~~
-------------
A resampler using `libsamplerate <http://www.mega-nerd.com/SRC/>`_ a.k.a. Secret Rabbit Code (SRC).
A resampler using `libsamplerate <http://www.mega-nerd.com/SRC/>`_ a.k.a. Secret Rabbit Code (SRC).
...
@@ -667,7 +669,7 @@ The following converter types are provided by libsamplerate:
...
@@ -667,7 +669,7 @@ The following converter types are provided by libsamplerate:
- Linear interpolator, very fast, poor quality.
- Linear interpolator, very fast, poor quality.
soxr
soxr
~~~~
----
A resampler using `libsoxr <http://sourceforge.net/projects/soxr/>`_, the SoX Resampler library
A resampler using `libsoxr <http://sourceforge.net/projects/soxr/>`_, the SoX Resampler library
...
@@ -693,12 +695,12 @@ Valid quality values for libsoxr:
...
@@ -693,12 +695,12 @@ Valid quality values for libsoxr:
.. _output_plugins:
.. _output_plugins:
Output plugins
Output plugins
--------------
==============
.. _alsa_plugin:
.. _alsa_plugin:
alsa
alsa
~~~~
----
The `Advanced Linux Sound Architecture (ALSA) <http://www.alsa-project.org/>`_ plugin uses libasound. It is recommended if you are using Linux.
The `Advanced Linux Sound Architecture (ALSA) <http://www.alsa-project.org/>`_ plugin uses libasound. It is recommended if you are using Linux.
...
@@ -757,7 +759,7 @@ The following attributes can be configured at runtime using the outputset comman
...
@@ -757,7 +759,7 @@ The following attributes can be configured at runtime using the outputset comman
ao
ao
~~
--
The ao plugin uses the portable `libao <https://www.xiph.org/ao/>`_ library. Use only if there is no native plugin for your operating system.
The ao plugin uses the portable `libao <https://www.xiph.org/ao/>`_ library. Use only if there is no native plugin for your operating system.
.. list-table::
.. list-table::
...
@@ -774,7 +776,8 @@ The ao plugin uses the portable `libao <https://www.xiph.org/ao/>`_ library. Use
...
@@ -774,7 +776,8 @@ The ao plugin uses the portable `libao <https://www.xiph.org/ao/>`_ library. Use
- This specifies how many bytes to write to the audio device at once. This parameter is to work around a bug in older versions of libao on sound cards with very small buffers. The default is 1024.
- This specifies how many bytes to write to the audio device at once. This parameter is to work around a bug in older versions of libao on sound cards with very small buffers. The default is 1024.
sndio
sndio
~~~~~
-----
The sndio plugin uses the `sndio <http://www.sndio.org/>`_ library. It should normally be used on OpenBSD.
The sndio plugin uses the `sndio <http://www.sndio.org/>`_ library. It should normally be used on OpenBSD.
.. list-table::
.. list-table::
...
@@ -789,7 +792,7 @@ The sndio plugin uses the `sndio <http://www.sndio.org/>`_ library. It should no
...
@@ -789,7 +792,7 @@ The sndio plugin uses the `sndio <http://www.sndio.org/>`_ library. It should no
- Set the application buffer time in milliseconds.
- Set the application buffer time in milliseconds.
fifo
fifo
~~~~
----
The fifo plugin writes raw PCM data to a FIFO (First In, First Out) file. The data can be read by another program.
The fifo plugin writes raw PCM data to a FIFO (First In, First Out) file. The data can be read by another program.
...
@@ -803,7 +806,7 @@ The fifo plugin writes raw PCM data to a FIFO (First In, First Out) file. The da
...
@@ -803,7 +806,7 @@ The fifo plugin writes raw PCM data to a FIFO (First In, First Out) file. The da
- This specifies the path of the FIFO to write to. Must be an absolute path. If the path does not exist, it will be created when MPD is started, and removed when MPD is stopped. The FIFO will be created with the same user and group as MPD is running as. Default permissions can be modified by using the builtin shell command umask. If a FIFO already exists at the specified path it will be reused, and will not be removed when MPD is stopped. You can use the "mkfifo" command to create this, and then you may modify the permissions to your liking.
- This specifies the path of the FIFO to write to. Must be an absolute path. If the path does not exist, it will be created when MPD is started, and removed when MPD is stopped. The FIFO will be created with the same user and group as MPD is running as. Default permissions can be modified by using the builtin shell command umask. If a FIFO already exists at the specified path it will be reused, and will not be removed when MPD is stopped. You can use the "mkfifo" command to create this, and then you may modify the permissions to your liking.
haiku
haiku
~~~~~
-----
Use the SoundPlayer API on the Haiku operating system.
Use the SoundPlayer API on the Haiku operating system.
...
@@ -812,7 +815,8 @@ removed soon, unless there is a new maintainer.
...
@@ -812,7 +815,8 @@ removed soon, unless there is a new maintainer.
jack
jack
~~~~
----
The jack plugin connects to a `JACK server <http://jackaudio.org/>`_.
The jack plugin connects to a `JACK server <http://jackaudio.org/>`_.
.. list-table::
.. list-table::
...
@@ -835,7 +839,8 @@ The jack plugin connects to a `JACK server <http://jackaudio.org/>`_.
...
@@ -835,7 +839,8 @@ The jack plugin connects to a `JACK server <http://jackaudio.org/>`_.
- Sets the size of the ring buffer for each channel. Do not configure this value unless you know what you're doing.
- Sets the size of the ring buffer for each channel. Do not configure this value unless you know what you're doing.
httpd
httpd
~~~~~
-----
The httpd plugin creates a HTTP server, similar to `ShoutCast <http://www.shoutcast.com/>`_ / `IceCast <http://icecast.org/>`_. HTTP streaming clients like mplayer, VLC, and mpv can connect to it.
The httpd plugin creates a HTTP server, similar to `ShoutCast <http://www.shoutcast.com/>`_ / `IceCast <http://icecast.org/>`_. HTTP streaming clients like mplayer, VLC, and mpv can connect to it.
It is highly recommended to configure a fixed format, because a stream cannot switch its audio format on-the-fly when the song changes.
It is highly recommended to configure a fixed format, because a stream cannot switch its audio format on-the-fly when the song changes.
...
@@ -856,7 +861,8 @@ It is highly recommended to configure a fixed format, because a stream cannot sw
...
@@ -856,7 +861,8 @@ It is highly recommended to configure a fixed format, because a stream cannot sw
- Sets a limit, number of concurrent clients. When set to 0 no limit will apply.
- Sets a limit, number of concurrent clients. When set to 0 no limit will apply.
null
null
~~~~
----
The null plugin does nothing. It discards everything sent to it.
The null plugin does nothing. It discards everything sent to it.
.. list-table::
.. list-table::
...
@@ -871,7 +877,8 @@ The null plugin does nothing. It discards everything sent to it.
...
@@ -871,7 +877,8 @@ The null plugin does nothing. It discards everything sent to it.
.. _oss_plugin:
.. _oss_plugin:
oss
oss
~~~
---
The "Open Sound System" plugin is supported on most Unix platforms.
The "Open Sound System" plugin is supported on most Unix platforms.
On Linux, OSS has been superseded by ALSA. Use the ALSA output plugin :ref:`alsa_plugin` instead of this one on Linux.
On Linux, OSS has been superseded by ALSA. Use the ALSA output plugin :ref:`alsa_plugin` instead of this one on Linux.
...
@@ -899,7 +906,7 @@ The according hardware mixer plugin understands the following settings:
...
@@ -899,7 +906,7 @@ The according hardware mixer plugin understands the following settings:
- Choose a mixer control, defaulting to PCM.
- Choose a mixer control, defaulting to PCM.
openal
openal
~~~~~~
------
The "OpenAL" plugin uses `libopenal <http://kcat.strangesoft.net/openal.html>`_. It is supported on many platforms. Use only if there is no native plugin for your operating system.
The "OpenAL" plugin uses `libopenal <http://kcat.strangesoft.net/openal.html>`_. It is supported on many platforms. Use only if there is no native plugin for your operating system.
.. list-table::
.. list-table::
...
@@ -912,7 +919,7 @@ The "OpenAL" plugin uses `libopenal <http://kcat.strangesoft.net/openal.html>`_.
...
@@ -912,7 +919,7 @@ The "OpenAL" plugin uses `libopenal <http://kcat.strangesoft.net/openal.html>`_.
- Sets the device which should be used. This can be any valid OpenAL device name. If not specified, then libopenal will choose a default device.
- Sets the device which should be used. This can be any valid OpenAL device name. If not specified, then libopenal will choose a default device.
osx
osx
~~~
---
The "Mac OS X" plugin uses Apple's CoreAudio API.
The "Mac OS X" plugin uses Apple's CoreAudio API.
.. list-table::
.. list-table::
...
@@ -933,7 +940,7 @@ The "Mac OS X" plugin uses Apple's CoreAudio API.
...
@@ -933,7 +940,7 @@ The "Mac OS X" plugin uses Apple's CoreAudio API.
The channel map may not refer to outputs that do not exist according to the format. If the format is "*:*:1" (mono) and you have a four-channel sound card then "-1,-1,0,0" (dual mono output on the second pair of sound card outputs) is a valid channel map but "-1,-1,0,1" is not because the second channel ('1') does not exist when the output is mono.
The channel map may not refer to outputs that do not exist according to the format. If the format is "*:*:1" (mono) and you have a four-channel sound card then "-1,-1,0,0" (dual mono output on the second pair of sound card outputs) is a valid channel map but "-1,-1,0,1" is not because the second channel ('1') does not exist when the output is mono.
pipe
pipe
~~~~
----
The pipe plugin starts a program and writes raw PCM data into its standard input.
The pipe plugin starts a program and writes raw PCM data into its standard input.
...
@@ -949,7 +956,7 @@ The pipe plugin starts a program and writes raw PCM data into its standard input
...
@@ -949,7 +956,7 @@ The pipe plugin starts a program and writes raw PCM data into its standard input
.. _pulse_plugin:
.. _pulse_plugin:
pulse
pulse
~~~~~
-----
The pulse plugin connects to a `PulseAudio <http://www.freedesktop.org/wiki/Software/PulseAudio/>`_ server. Requires libpulse.
The pulse plugin connects to a `PulseAudio <http://www.freedesktop.org/wiki/Software/PulseAudio/>`_ server. Requires libpulse.
.. list-table::
.. list-table::
...
@@ -966,7 +973,7 @@ The pulse plugin connects to a `PulseAudio <http://www.freedesktop.org/wiki/Soft
...
@@ -966,7 +973,7 @@ The pulse plugin connects to a `PulseAudio <http://www.freedesktop.org/wiki/Soft
- Specifies a linear scaling coefficient (ranging from 0.5 to 5.0) to apply when adjusting volume through :program:`MPD`. For example, chosing a factor equal to ``"0.7"`` means that setting the volume to 100 in :program:`MPD` will set the PulseAudio volume to 70%, and a factor equal to ``"3.5"`` means that volume 100 in :program:`MPD` corresponds to a 350% PulseAudio volume.
- Specifies a linear scaling coefficient (ranging from 0.5 to 5.0) to apply when adjusting volume through :program:`MPD`. For example, chosing a factor equal to ``"0.7"`` means that setting the volume to 100 in :program:`MPD` will set the PulseAudio volume to 70%, and a factor equal to ``"3.5"`` means that volume 100 in :program:`MPD` corresponds to a 350% PulseAudio volume.
recorder
recorder
~~~~~~~~
--------
The recorder plugin writes the audio played by :program:`MPD` to a file. This may be useful for recording radio streams.
The recorder plugin writes the audio played by :program:`MPD` to a file. This may be useful for recording radio streams.
.. list-table::
.. list-table::
...
@@ -978,13 +985,13 @@ The recorder plugin writes the audio played by :program:`MPD` to a file. This ma
...
@@ -978,13 +985,13 @@ The recorder plugin writes the audio played by :program:`MPD` to a file. This ma
* - **path P**
* - **path P**
- Write to this file.
- Write to this file.
* - **format_path P**
* - **format_path P**
- An alternative to path which provides a format string referring to tag values. The special tag iso8601 emits the current date and time in `ISO8601 <https://en.wikipedia.org/wiki/ISO_8601>`_ format (UTC). Every time a new song starts or a new tag gets received from a radio station, a new file is opened. If the format does not render a file name, nothing is recorded. A tag name enclosed in percent signs ('%') is replaced with the tag value. Example: :file:`~/.mpd/recorder/%artist% - %title%.ogg`. Square brackets can be used to group a substring. If none of the tags referred in the group can be found, the whole group is omitted. Example: [~/.mpd/recorder/[%artist% - ]%title%.ogg] (this omits the dash when no artist tag exists; if title also doesn't exist, no file is written). The operators "|" (logical "or") and "&" (logical "and") can be used to select portions of the format string depending on the existing tag values. Example: ~/.mpd/recorder/[%title%|%name%].ogg (use the "name" tag if no title exists)
- An alternative to path which provides a format string referring to tag values. The special tag iso8601 emits the current date and time in `ISO8601 <https://en.wikipedia.org/wiki/ISO_8601>`_ format (UTC). Every time a new song starts or a new tag gets received from a radio station, a new file is opened. If the format does not render a file name, nothing is recorded. A tag name enclosed in percent signs ('%') is replaced with the tag value. Example: :file:`-/.mpd/recorder/%artist% - %title%.ogg`. Square brackets can be used to group a substring. If none of the tags referred in the group can be found, the whole group is omitted. Example: [-/.mpd/recorder/[%artist% - ]%title%.ogg] (this omits the dash when no artist tag exists; if title also doesn't exist, no file is written). The operators "|" (logical "or") and "&" (logical "and") can be used to select portions of the format string depending on the existing tag values. Example: -/.mpd/recorder/[%title%|%name%].ogg (use the "name" tag if no title exists)
* - **encoder NAME**
* - **encoder NAME**
- Chooses an encoder plugin. A list of encoder plugins can be found in the encoder plugin reference :ref:`encoder_plugins`.
- Chooses an encoder plugin. A list of encoder plugins can be found in the encoder plugin reference :ref:`encoder_plugins`.
shout
shout
~~~~~
-----
The shout plugin connects to a ShoutCast or IceCast server using libshout. It forwards tags to this server.
The shout plugin connects to a ShoutCast or IceCast server using libshout. It forwards tags to this server.
You must set a format.
You must set a format.
...
@@ -1028,7 +1035,7 @@ You must set a format.
...
@@ -1028,7 +1035,7 @@ You must set a format.
.. _sles_output:
.. _sles_output:
sles
sles
~~~~
----
Plugin using the `OpenSL ES <https://www.khronos.org/opensles/>`__
Plugin using the `OpenSL ES <https://www.khronos.org/opensles/>`__
audio API. Its primary use is local playback on Android, where
audio API. Its primary use is local playback on Android, where
...
@@ -1036,7 +1043,7 @@ audio API. Its primary use is local playback on Android, where
...
@@ -1036,7 +1043,7 @@ audio API. Its primary use is local playback on Android, where
solaris
solaris
~~~~~~~
-------
The "Solaris" plugin runs only on SUN Solaris, and plays via /dev/audio.
The "Solaris" plugin runs only on SUN Solaris, and plays via /dev/audio.
.. list-table::
.. list-table::
...
@@ -1052,22 +1059,22 @@ The "Solaris" plugin runs only on SUN Solaris, and plays via /dev/audio.
...
@@ -1052,22 +1059,22 @@ The "Solaris" plugin runs only on SUN Solaris, and plays via /dev/audio.
.. _filter_plugins:
.. _filter_plugins:
Filter plugins
Filter plugins
--------------
==============
normalize
normalize
~~~~~~~~~
---------
Normalize the volume during playback (at the expensve of quality).
Normalize the volume during playback (at the expensve of quality).
null
null
~~~~
----
A no-op filter. Audio data is returned as-is.
A no-op filter. Audio data is returned as-is.
route
route
~~~~~
-----
Reroute channels.
Reroute channels.
...
@@ -1084,43 +1091,44 @@ Reroute channels.
...
@@ -1084,43 +1091,44 @@ Reroute channels.
.. _playlist_plugins:
.. _playlist_plugins:
Playlist plugins
Playlist plugins
----------------
================
asx
asx
~~~
---
Reads .asx playlist files.
Reads .asx playlist files.
cue
cue
~~~
---
Reads .cue files.
Reads .cue files.
embcue
embcue
~~~~~~
------
Reads CUE sheets from the "CUESHEET" tag of song files.
Reads CUE sheets from the "CUESHEET" tag of song files.
m3u
m3u
~~~
---
Reads .m3u playlist files.
Reads .m3u playlist files.
extm3u
extm3u
~~~~~~
------
Reads extended .m3u playlist files.
Reads extended .m3u playlist files.
flac
flac
~~~~
----
Reads the cuesheet metablock from a FLAC file.
Reads the cuesheet metablock from a FLAC file.
pls
pls
~~~
---
Reads .pls playlist files.
Reads .pls playlist files.
rss
rss
~~~
---
Reads music links from .rss files.
Reads music links from .rss files.
soundcloud
soundcloud
~~~~~~~~~~
----------
Download playlist from SoundCloud. It accepts URIs starting with soundcloud://.
Download playlist from SoundCloud. It accepts URIs starting with soundcloud://.
.. list-table::
.. list-table::
...
@@ -1133,5 +1141,5 @@ Download playlist from SoundCloud. It accepts URIs starting with soundcloud://.
...
@@ -1133,5 +1141,5 @@ Download playlist from SoundCloud. It accepts URIs starting with soundcloud://.
The setting ``audio_output_format`` forces :program:`MPD` to use one
The setting ``audio_output_format`` forces :program:`MPD` to use one
audio format for all outputs. Doing that is usually not a good idea.
audio format for all outputs. Doing that is usually not a good idea.
...
@@ -526,7 +526,7 @@ of bytes, not bits. Thus, a DSD "bit" rate of 22.5792 MHz (DSD512) is
...
@@ -526,7 +526,7 @@ of bytes, not bits. Thus, a DSD "bit" rate of 22.5792 MHz (DSD512) is
2822400 from :program:`MPD`'s point of view (44100*512/8).
2822400 from :program:`MPD`'s point of view (44100*512/8).
Resampler
Resampler
~~~~~~~~~
^^^^^^^^^
Sometimes, music needs to be resampled before it can be played; for example, CDs use a sample rate of 44,100 Hz while many cheap audio chips can only handle 48,000 Hz. Resampling reduces the quality and consumes a lot of CPU. There are different options, some of them optimized for high quality and others for low CPU usage, but you can't have both at the same time. Often, the resampler is the component that is responsible for most of :program:`MPD`'s CPU usage. Since :program:`MPD` comes with high quality defaults, it may appear that :program:`MPD` consumes more CPU than other software.
Sometimes, music needs to be resampled before it can be played; for example, CDs use a sample rate of 44,100 Hz while many cheap audio chips can only handle 48,000 Hz. Resampling reduces the quality and consumes a lot of CPU. There are different options, some of them optimized for high quality and others for low CPU usage, but you can't have both at the same time. Often, the resampler is the component that is responsible for most of :program:`MPD`'s CPU usage. Since :program:`MPD` comes with high quality defaults, it may appear that :program:`MPD` consumes more CPU than other software.
...
@@ -539,7 +539,7 @@ Client Connections
...
@@ -539,7 +539,7 @@ Client Connections
.. _listeners:
.. _listeners:
Listeners
Listeners
~~~~~~~~~
^^^^^^^^^
The setting :code:`bind_to_address` specifies which addresses
The setting :code:`bind_to_address` specifies which addresses
:program:`MPD` listens on for connections from clients. It can be
:program:`MPD` listens on for connections from clients. It can be
...
@@ -582,7 +582,7 @@ used.
...
@@ -582,7 +582,7 @@ used.
Permissions and Passwords
Permissions and Passwords
~~~~~~~~~~~~~~~~~~~~~~~~~
^^^^^^^^^^^^^^^^^^^^^^^^^
By default, all clients are unauthenticated and have a full set of permissions. This can be restricted with the settings :code:`default_permissions` and :code:`password`.
By default, all clients are unauthenticated and have a full set of permissions. This can be restricted with the settings :code:`default_permissions` and :code:`password`.
...
@@ -645,7 +645,7 @@ Other Settings
...
@@ -645,7 +645,7 @@ Other Settings
Section :ref:`tags` contains a list of supported tags.
Section :ref:`tags` contains a list of supported tags.
The State File
The State File
~~~~~~~~~~~~~~
^^^^^^^^^^^^^^
The state file is a file where :program:`MPD` saves and restores its state (play queue, playback position etc.) to keep it persistent across restarts and reboots. It is an optional setting.
The state file is a file where :program:`MPD` saves and restores its state (play queue, playback position etc.) to keep it persistent across restarts and reboots. It is an optional setting.
...
@@ -663,7 +663,7 @@ The State File
...
@@ -663,7 +663,7 @@ The State File
- Auto-save the state file this number of seconds after each state change. Defaults to 120 (2 minutes).
- Auto-save the state file this number of seconds after each state change. Defaults to 120 (2 minutes).
The Sticker Database
The Sticker Database
~~~~~~~~~~~~~~~~~~~~
^^^^^^^^^^^^^^^^^^^^
"Stickers" are pieces of information attached to songs. Some clients
"Stickers" are pieces of information attached to songs. Some clients
use them to store ratings and other volatile data. This feature
use them to store ratings and other volatile data. This feature
These settings are various limitations to prevent :program:`MPD` from using too many resources (denial of service).
These settings are various limitations to prevent :program:`MPD` from using too many resources (denial of service).
...
@@ -702,7 +702,7 @@ These settings are various limitations to prevent :program:`MPD` from using too
...
@@ -702,7 +702,7 @@ These settings are various limitations to prevent :program:`MPD` from using too
- The maximum size of the output buffer to a client (maximum response size). Default is 8192 (8 MiB).
- The maximum size of the output buffer to a client (maximum response size). Default is 8192 (8 MiB).
Buffer Settings
Buffer Settings
~~~~~~~~~~~~~~~
^^^^^^^^^^^^^^^
Do not change these unless you know what you are doing.
Do not change these unless you know what you are doing.
...
@@ -716,7 +716,7 @@ Do not change these unless you know what you are doing.
...
@@ -716,7 +716,7 @@ Do not change these unless you know what you are doing.
- Adjust the size of the internal audio buffer. Default is 4096 (4 MiB).
- Adjust the size of the internal audio buffer. Default is 4096 (4 MiB).
Zeroconf
Zeroconf
~~~~~~~~
^^^^^^^^
If Zeroconf support (`Avahi <http://avahi.org/>`_ or Apple's Bonjour)
If Zeroconf support (`Avahi <http://avahi.org/>`_ or Apple's Bonjour)
was enabled at compile time with :code:`-Dzeroconf=...`,
was enabled at compile time with :code:`-Dzeroconf=...`,
...
@@ -835,7 +835,7 @@ Depending on the size of your music collection and the speed of the storage, thi
...
@@ -835,7 +835,7 @@ Depending on the size of your music collection and the speed of the storage, thi
To exclude a file from the update, create a file called :file:`.mpdignore` in its parent directory. Each line of that file may contain a list of shell wildcards. Matching files in the current directory and all subdirectories are excluded.
To exclude a file from the update, create a file called :file:`.mpdignore` in its parent directory. Each line of that file may contain a list of shell wildcards. Matching files in the current directory and all subdirectories are excluded.
Mounting other storages into the music directory
Mounting other storages into the music directory
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
:program:`MPD` has various storage plugins of which multiple instances can be "mounted" into the music directory. This way, you can use local music, file servers and USB sticks at the same time. Example:
:program:`MPD` has various storage plugins of which multiple instances can be "mounted" into the music directory. This way, you can use local music, file servers and USB sticks at the same time. Example:
...
@@ -981,18 +981,18 @@ Support
...
@@ -981,18 +981,18 @@ Support
-------
-------
Getting Help
Getting Help
~~~~~~~~~~~~
^^^^^^^^^^^^
The :program:`MPD` project runs a `forum <https://forum.musicpd.org/>`_ and an IRC channel (#mpd on Freenode) for requesting help. Visit the MPD help page for details on how to get help.
The :program:`MPD` project runs a `forum <https://forum.musicpd.org/>`_ and an IRC channel (#mpd on Freenode) for requesting help. Visit the MPD help page for details on how to get help.
Common Problems
Common Problems
~~~~~~~~~~~~~~~
^^^^^^^^^^^^^^^
1. Database
1. Database
^^^^^^^^^^^
"""""""""""
Question: I can't see my music in the MPD database!
Question: I can't see my music in the MPD database!
* Does the MPD user have read permission on all music files, and read+execute permission on all music directories (and all of their parent directories)?
* Does the MPD user have read permission on all music files, and read+execute permission on all music directories (and all of their parent directories)?
...
@@ -1000,22 +1000,22 @@ Question: I can't see my music in the MPD database!
...
@@ -1000,22 +1000,22 @@ Question: I can't see my music in the MPD database!
* Did you enable all relevant decoder plugins at compile time? :command:`mpd --version` will tell you.
* Did you enable all relevant decoder plugins at compile time? :command:`mpd --version` will tell you.
Question: MPD doesn't read ID3 tags!
Question: MPD doesn't read ID3 tags!
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* You probably compiled :program:`MPD` without libid3tag. :command:`mpd --version` will tell you.
* You probably compiled :program:`MPD` without libid3tag. :command:`mpd --version` will tell you.
2. Playback
2. Playback
^^^^^^^^^^^
"""""""""""
Question: I can't hear music on my client!
Question: I can't hear music on my client!
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* That problem usually follows a misunderstanding of the nature of :program:`MPD`. :program:`MPD` is a remote-controlled music player, not a music distribution system. Usually, the speakers are connected to the box where :program:`MPD` runs, and the :program:`MPD` client only sends control commands, but the client does not actually play your music.
* That problem usually follows a misunderstanding of the nature of :program:`MPD`. :program:`MPD` is a remote-controlled music player, not a music distribution system. Usually, the speakers are connected to the box where :program:`MPD` runs, and the :program:`MPD` client only sends control commands, but the client does not actually play your music.
:program:`MPD` has output plugins which allow hearing music on a remote host (such as httpd), but that is not :program:`MPD`'s primary design goal.
:program:`MPD` has output plugins which allow hearing music on a remote host (such as httpd), but that is not :program:`MPD`'s primary design goal.
Question: "Device or resource busy"
Question: "Device or resource busy"
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* This ALSA error means that another program uses your sound hardware exclusively. You can stop that program to allow :program:`MPD` to use it.
* This ALSA error means that another program uses your sound hardware exclusively. You can stop that program to allow :program:`MPD` to use it.
...
@@ -1034,7 +1034,7 @@ Your bug report should contain:
...
@@ -1034,7 +1034,7 @@ Your bug report should contain:
* be clear about what you expect MPD to do, and what is actually happening
* be clear about what you expect MPD to do, and what is actually happening
MPD crashes
MPD crashes
~~~~~~~~~~~
^^^^^^^^^^^
All :program:`MPD` crashes are bugs which must be fixed by a developer, and you should write a bug report. (Many crash bugs are caused by codec libraries used by :program:`MPD`, and then that library must be fixed; but in any case, the :program:`MPD` `bug tracker <https://github.com/MusicPlayerDaemon/MPD/issues>`_ is a good place to report it first if you don't know.)
All :program:`MPD` crashes are bugs which must be fixed by a developer, and you should write a bug report. (Many crash bugs are caused by codec libraries used by :program:`MPD`, and then that library must be fixed; but in any case, the :program:`MPD` `bug tracker <https://github.com/MusicPlayerDaemon/MPD/issues>`_ is a good place to report it first if you don't know.)