Merge branch 'v0.21.x'
This commit is contained in:
commit
604d08b2c6
2
NEWS
2
NEWS
@ -9,6 +9,8 @@ ver 0.22 (not yet released)
|
|||||||
- hdcd: new plugin based on FFmpeg's "af_hdcd" for HDCD playback
|
- hdcd: new plugin based on FFmpeg's "af_hdcd" for HDCD playback
|
||||||
|
|
||||||
ver 0.21.9 (not yet released)
|
ver 0.21.9 (not yet released)
|
||||||
|
* input
|
||||||
|
- buffer: fix deadlock bug
|
||||||
* Android
|
* Android
|
||||||
- fix crash on ARMv7
|
- fix crash on ARMv7
|
||||||
- request storage permission on Android 6+
|
- request storage permission on Android 6+
|
||||||
|
@ -140,7 +140,6 @@ of database.
|
|||||||
.B auto_update_depth <N>
|
.B auto_update_depth <N>
|
||||||
Limit the depth of the directories being watched, 0 means only watch
|
Limit the depth of the directories being watched, 0 means only watch
|
||||||
the music directory itself. There is no limit by default.
|
the music directory itself. There is no limit by default.
|
||||||
.TP
|
|
||||||
.SH REQUIRED AUDIO OUTPUT PARAMETERS
|
.SH REQUIRED AUDIO OUTPUT PARAMETERS
|
||||||
.TP
|
.TP
|
||||||
.B type <type>
|
.B type <type>
|
||||||
@ -164,57 +163,12 @@ Specifies how replay gain is applied. The default is "software",
|
|||||||
which uses an internal software volume control. "mixer" uses the
|
which uses an internal software volume control. "mixer" uses the
|
||||||
configured (hardware) mixer control. "none" disables replay gain on
|
configured (hardware) mixer control. "none" disables replay gain on
|
||||||
this audio output.
|
this audio output.
|
||||||
.SH OPTIONAL ALSA OUTPUT PARAMETERS
|
|
||||||
.TP
|
|
||||||
.B device <dev>
|
|
||||||
This specifies the device to use for audio output. The default is "default".
|
|
||||||
.TP
|
.TP
|
||||||
.B mixer_type <hardware, software or none>
|
.B mixer_type <hardware, software or none>
|
||||||
Specifies which mixer should be used for this audio output: the
|
Specifies which mixer should be used for this audio output: the
|
||||||
hardware mixer (available for ALSA, OSS and PulseAudio), the software
|
hardware mixer (available for ALSA, OSS and PulseAudio), the software
|
||||||
mixer or no mixer ("none"). By default, the hardware mixer is used
|
mixer or no mixer ("none"). By default, the hardware mixer is used
|
||||||
for devices which support it, and none for the others.
|
for devices which support it, and none for the others.
|
||||||
.TP
|
|
||||||
.B mixer_device <mixer dev>
|
|
||||||
This specifies which mixer to use. The default is "default". To use
|
|
||||||
the second sound card in a system, use "hw:1".
|
|
||||||
.TP
|
|
||||||
.B mixer_control <mixer ctrl>
|
|
||||||
This specifies which mixer control to use (sometimes referred to as
|
|
||||||
the "device"). The default is "PCM". Use "amixer scontrols" to see
|
|
||||||
the list of possible controls.
|
|
||||||
.TP
|
|
||||||
.B mixer_index <mixer index>
|
|
||||||
A number identifying the index of the named mixer control. This is
|
|
||||||
probably only useful if your alsa device has more than one
|
|
||||||
identically\-named mixer control. The default is "0". Use "amixer
|
|
||||||
scontrols" to see the list of controls with their indexes.
|
|
||||||
.TP
|
|
||||||
.B auto_resample <yes or no>
|
|
||||||
Setting this to "no" disables ALSA's software resampling, if the
|
|
||||||
hardware does not support a specific sample rate. This lets MPD do
|
|
||||||
the resampling. "yes" is the default and allows ALSA to resample.
|
|
||||||
.TP
|
|
||||||
.B auto_channels <yes or no>
|
|
||||||
Setting this to "no" disables ALSA's channel conversion, if the
|
|
||||||
hardware does not support a specific number of channels. Default: "yes".
|
|
||||||
.TP
|
|
||||||
.B auto_format <yes or no>
|
|
||||||
Setting this to "no" disables ALSA's sample format conversion, if the
|
|
||||||
hardware does not support a specific sample format. Default: "yes".
|
|
||||||
.TP
|
|
||||||
.B buffer_time <time in microseconds>
|
|
||||||
This sets the length of the hardware sample buffer in microseconds. Increasing
|
|
||||||
it may help to reduce or eliminate skipping on certain setups. Most users do
|
|
||||||
not need to change this. The default is 500000 microseconds (0.5 seconds).
|
|
||||||
.TP
|
|
||||||
.B period_time <time in microseconds>
|
|
||||||
This sets the time between hardware sample transfers in microseconds.
|
|
||||||
Increasing this can reduce CPU usage while lowering it can reduce underrun
|
|
||||||
errors on bandwidth-limited devices. Some users have reported good results
|
|
||||||
with this set to 50000, but not all devices support values this high. Most
|
|
||||||
users do not need to change this. The default is 256000000 / sample_rate(kHz),
|
|
||||||
or 5804 microseconds for CD-quality audio.
|
|
||||||
.SH FILES
|
.SH FILES
|
||||||
.TP
|
.TP
|
||||||
.BI ~/.mpdconf
|
.BI ~/.mpdconf
|
||||||
|
@ -178,8 +178,9 @@ of:
|
|||||||
file's time stamp with the given value (ISO 8601 or UNIX
|
file's time stamp with the given value (ISO 8601 or UNIX
|
||||||
time stamp).
|
time stamp).
|
||||||
|
|
||||||
- ``(AudioFormat == 'SAMPLERATE:BITS:CHANNELS')``:
|
- ``(AudioFormat == 'SAMPLERATE:BITS:CHANNELS')``: compares the audio
|
||||||
compares the audio format with the given value.
|
format with the given value. See :ref:`audio_output_format` for a
|
||||||
|
detailed explanation.
|
||||||
|
|
||||||
- ``(AudioFormat =~ 'SAMPLERATE:BITS:CHANNELS')``:
|
- ``(AudioFormat =~ 'SAMPLERATE:BITS:CHANNELS')``:
|
||||||
matches the audio format with the given mask (i.e. one
|
matches the audio format with the given mask (i.e. one
|
||||||
@ -423,7 +424,9 @@ Querying :program:`MPD`'s status
|
|||||||
- ``xfade``: ``crossfade`` in seconds
|
- ``xfade``: ``crossfade`` in seconds
|
||||||
- ``mixrampdb``: ``mixramp`` threshold in dB
|
- ``mixrampdb``: ``mixramp`` threshold in dB
|
||||||
- ``mixrampdelay``: ``mixrampdelay`` in seconds
|
- ``mixrampdelay``: ``mixrampdelay`` in seconds
|
||||||
- ``audio``: The format emitted by the decoder plugin during playback, format: ``*samplerate:bits:channels*``. Check the user manual for a detailed explanation.
|
- ``audio``: The format emitted by the decoder plugin during
|
||||||
|
playback, format: ``samplerate:bits:channels``. See
|
||||||
|
:ref:`audio_output_format` for a detailed explanation.
|
||||||
- ``updating_db``: ``job id``
|
- ``updating_db``: ``job id``
|
||||||
- ``error``: if there is an error, returns message here
|
- ``error``: if there is an error, returns message here
|
||||||
|
|
||||||
|
38
doc/user.rst
38
doc/user.rst
@ -402,14 +402,9 @@ The following table lists the audio_output options valid for all plugins:
|
|||||||
- The name of the plugin
|
- The name of the plugin
|
||||||
* - **name**
|
* - **name**
|
||||||
- The name of the audio output. It is visible to the client. Some plugins also use it internally, e.g. as a name registered in the PULSE server.
|
- The name of the audio output. It is visible to the client. Some plugins also use it internally, e.g. as a name registered in the PULSE server.
|
||||||
* - **format**
|
* - **format samplerate:bits:channels**
|
||||||
- Always open the audio output with the specified audio format samplerate:bits:channels), regardless of the format of the input file. This is optional for most plugins.
|
- Always open the audio output with the specified audio format, regardless of the format of the input file. This is optional for most plugins.
|
||||||
|
See :ref:`audio_output_format` for a detailed description of the value.
|
||||||
Any of the three attributes may be an asterisk to specify that this attribute should not be enforced, example: 48000:16:*. *:*:* is equal to not having a format specification.
|
|
||||||
|
|
||||||
The following values are valid for bits: 8 (signed 8 bit integer samples), 16, 24 (signed 24 bit integer samples padded to 32 bit), 32 (signed 32 bit integer samples), f (32 bit floating point, -1.0 to 1.0), "dsd" means DSD (Direct Stream Digital). For DSD, there are special cases such as "dsd64", which allows you to omit the sample rate (e.g. dsd512:2 for stereo DSD512, i.e. 22.5792 MHz).
|
|
||||||
|
|
||||||
The sample rate is special for DSD: :program:`MPD` counts the number 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).
|
|
||||||
* - **enabed yes|no**
|
* - **enabed yes|no**
|
||||||
- Specifies whether this audio output is enabled when :program:`MPD` is started. By default, all audio outputs are enabled. This is just the default setting when there is no state file; with a state file, the previous state is restored.
|
- Specifies whether this audio output is enabled when :program:`MPD` is started. By default, all audio outputs are enabled. This is just the default setting when there is no state file; with a state file, the previous state is restored.
|
||||||
* - **tags yes|no**
|
* - **tags yes|no**
|
||||||
@ -504,10 +499,31 @@ reference.
|
|||||||
Audio Format Settings
|
Audio Format Settings
|
||||||
---------------------
|
---------------------
|
||||||
|
|
||||||
|
.. _audio_output_format:
|
||||||
|
|
||||||
Global Audio Format
|
Global Audio Format
|
||||||
~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
The setting audio_output_format forces :program:`MPD` to use one audio format for all outputs. Doing that is usually not a good idea. The values are the same as in format in the audio_output section.
|
The setting ``audio_output_format`` forces :program:`MPD` to use one
|
||||||
|
audio format for all outputs. Doing that is usually not a good idea.
|
||||||
|
|
||||||
|
The value is specified as ``samplerate:bits:channels``.
|
||||||
|
|
||||||
|
Any of the three attributes may be an asterisk to specify that this
|
||||||
|
attribute should not be enforced, example: ``48000:16:*``.
|
||||||
|
``*:*:*`` is equal to not having a format specification.
|
||||||
|
|
||||||
|
The following values are valid for bits: ``8`` (signed 8 bit integer
|
||||||
|
samples), ``16``, ``24`` (signed 24 bit integer samples padded to 32
|
||||||
|
bit), ``32`` (signed 32 bit integer samples), ``f`` (32 bit floating
|
||||||
|
point, -1.0 to 1.0), ``dsd`` means DSD (Direct Stream Digital). For
|
||||||
|
DSD, there are special cases such as ``dsd64``, which allows you to
|
||||||
|
omit the sample rate (e.g. ``dsd512:2`` for stereo DSD512,
|
||||||
|
i.e. 22.5792 MHz).
|
||||||
|
|
||||||
|
The sample rate is special for DSD: :program:`MPD` counts the number
|
||||||
|
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).
|
||||||
|
|
||||||
Resampler
|
Resampler
|
||||||
~~~~~~~~~
|
~~~~~~~~~
|
||||||
@ -885,7 +901,7 @@ To verify if :program:`MPD` converts the audio format, enable verbose logging, a
|
|||||||
.. code-block:: none
|
.. code-block:: none
|
||||||
|
|
||||||
decoder: audio_format=44100:24:2, seekable=true
|
decoder: audio_format=44100:24:2, seekable=true
|
||||||
output: opened plugin=alsa name="An ALSA output"audio_format=44100:16:2
|
output: opened plugin=alsa name="An ALSA output" audio_format=44100:16:2
|
||||||
output: converting from 44100:24:2
|
output: converting from 44100:24:2
|
||||||
|
|
||||||
This example shows that a 24 bit file is being played, but the sound chip cannot play 24 bit. It falls back to 16 bit, discarding 8 bit.
|
This example shows that a 24 bit file is being played, but the sound chip cannot play 24 bit. It falls back to 16 bit, discarding 8 bit.
|
||||||
@ -912,7 +928,7 @@ Check list for bit-perfect playback:
|
|||||||
device (:samp:`hw:0,0` or similar).
|
device (:samp:`hw:0,0` or similar).
|
||||||
* Don't use software volume (setting :code:`mixer_type`).
|
* Don't use software volume (setting :code:`mixer_type`).
|
||||||
* Don't force :program:`MPD` to use a specific audio format (settings
|
* Don't force :program:`MPD` to use a specific audio format (settings
|
||||||
:code:`format`, :code:`audio_output_format`).
|
:code:`format`, :ref:`audio_output_format <audio_output_format>`).
|
||||||
* Verify that you are really doing bit-perfect playback using :program:`MPD`'s verbose log and :file:`/proc/asound/card*/pcm*p/sub*/hw_params`. Some DACs can also indicate the audio format.
|
* Verify that you are really doing bit-perfect playback using :program:`MPD`'s verbose log and :file:`/proc/asound/card*/pcm*p/sub*/hw_params`. Some DACs can also indicate the audio format.
|
||||||
|
|
||||||
Direct Stream Digital (DSD)
|
Direct Stream Digital (DSD)
|
||||||
|
@ -165,6 +165,30 @@ BufferedInputStream::RunThread() noexcept
|
|||||||
idle = false;
|
idle = false;
|
||||||
seek = false;
|
seek = false;
|
||||||
client_cond.notify_one();
|
client_cond.notify_one();
|
||||||
|
} else if (!idle && !read_error &&
|
||||||
|
offset != input->GetOffset() &&
|
||||||
|
!IsAvailable()) {
|
||||||
|
/* a past Seek() call was a no-op because data
|
||||||
|
was already available at that position, but
|
||||||
|
now we've reached a new position where
|
||||||
|
there is no more data in the buffer, and
|
||||||
|
our input is reading somewhere else (maybe
|
||||||
|
stuck at the end of the file); to find a
|
||||||
|
way out, we now seek our input to our
|
||||||
|
reading position to be able to fill our
|
||||||
|
buffer */
|
||||||
|
|
||||||
|
try {
|
||||||
|
input->Seek(lock, offset);
|
||||||
|
} catch (...) {
|
||||||
|
/* this is really a seek error, but we
|
||||||
|
register it as a read_error,
|
||||||
|
because seek_error is only checked
|
||||||
|
by Seek(), and at our frontend (our
|
||||||
|
own InputStream interface) is in
|
||||||
|
"read" mode */
|
||||||
|
read_error = std::current_exception();
|
||||||
|
}
|
||||||
} else if (!idle && !read_error &&
|
} else if (!idle && !read_error &&
|
||||||
input->IsAvailable() && !input->IsEOF()) {
|
input->IsAvailable() && !input->IsEOF()) {
|
||||||
const auto read_offset = input->GetOffset();
|
const auto read_offset = input->GetOffset();
|
||||||
|
Loading…
Reference in New Issue
Block a user