diff --git a/doc/user.rst b/doc/user.rst index 872afe020..f6536da33 100644 --- a/doc/user.rst +++ b/doc/user.rst @@ -1056,6 +1056,8 @@ Plays audio CDs using libcdio. The URI has the form: "cdda://[DEVICE][/TRACK]". - Description * - **default_byte_order little_endian|big_endian** - If the CD drive does not specify a byte order, MPD assumes it is the CPU's native byte order. This setting allows overriding this. + * - **speed N** + - Request CDParanoia cap the extraction speed to Nx normal CD audio rotation speed, keeping the drive quiet. curl ~~~~ diff --git a/src/input/plugins/CdioParanoiaInputPlugin.cxx b/src/input/plugins/CdioParanoiaInputPlugin.cxx index 4b08cf990..eeba659b8 100644 --- a/src/input/plugins/CdioParanoiaInputPlugin.cxx +++ b/src/input/plugins/CdioParanoiaInputPlugin.cxx @@ -104,6 +104,7 @@ class CdioParanoiaInputStream final : public InputStream { static constexpr Domain cdio_domain("cdio"); static bool default_reverse_endian; +static unsigned speed = 0; static void input_cdio_init(EventLoop &, const ConfigBlock &block) @@ -118,6 +119,7 @@ input_cdio_init(EventLoop &, const ConfigBlock &block) throw FormatRuntimeError("Unrecognized 'default_byte_order' setting: %s", value); } + speed = block.GetBlockValue("speed",0u); } struct cdio_uri { @@ -209,6 +211,10 @@ input_cdio_open(const char *uri, } cdda_verbose_set(drv, CDDA_MESSAGE_FORGETIT, CDDA_MESSAGE_FORGETIT); + if (speed > 0) { + FormatDebug(cdio_domain,"Attempting to set CD speed to %dx",speed); + cdda_speed_set(drv,speed); + } if (0 != cdio_cddap_open(drv)) { cdio_cddap_close_no_free_cdio(drv);