aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--NEWS1
-rw-r--r--doc/user.xml30
-rw-r--r--src/decoder/mikmod_plugin.c15
3 files changed, 42 insertions, 4 deletions
diff --git a/NEWS b/NEWS
index 6cef6bb90..8ef43961d 100644
--- a/NEWS
+++ b/NEWS
@@ -20,6 +20,7 @@ ver 0.16 (20??/??/??)
- ffmpeg: convert metadata to generic format
- sndfile: new decoder plugin based on libsndfile
- flac: load external cue sheet when no internal one
+ - mikmod: sample rate is configurable
- mpg123: new decoder plugin based on libmpg123
- sidplay: support sub-tunes
- sidplay: implemented songlength database
diff --git a/doc/user.xml b/doc/user.xml
index 500a74b67..09868eb33 100644
--- a/doc/user.xml
+++ b/doc/user.xml
@@ -590,7 +590,35 @@ cd mpd-version</programlisting>
<section>
<title>Decoder plugins</title>
- <para></para>
+ <section>
+ <title><varname>mikmod</varname></title>
+
+ <para>
+ Module player based on MikMod.
+ </para>
+
+ <informaltable>
+ <tgroup cols="2">
+ <thead>
+ <row>
+ <entry>Setting</entry>
+ <entry>Description</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry>
+ <varname>sample_rate</varname>
+ </entry>
+ <entry>
+ Sets the sample rate generated by
+ <filename>libmikmod</filename>. Default is 44100.
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </informaltable>
+ </section>
</section>
<section>
diff --git a/src/decoder/mikmod_plugin.c b/src/decoder/mikmod_plugin.c
index 720196333..74eb48ee9 100644
--- a/src/decoder/mikmod_plugin.c
+++ b/src/decoder/mikmod_plugin.c
@@ -100,11 +100,20 @@ static MDRIVER drv_mpd = {
VC_VoiceRealVolume
};
+static unsigned mikmod_sample_rate;
+
static bool
-mikmod_decoder_init(G_GNUC_UNUSED const struct config_param *param)
+mikmod_decoder_init(const struct config_param *param)
{
+ unsigned sample_rate;
static char params[] = "";
+ mikmod_sample_rate = config_get_block_unsigned(param, "sample_rate",
+ 44100);
+ if (!audio_valid_sample_rate(mikmod_sample_rate))
+ g_error("Invalid sample rate in line %d: %u",
+ param->line, sample_rate);
+
md_device = 0;
md_reverb = 0;
@@ -112,7 +121,7 @@ mikmod_decoder_init(G_GNUC_UNUSED const struct config_param *param)
MikMod_RegisterAllLoaders();
md_pansep = 64;
- md_mixfreq = 44100;
+ md_mixfreq = mikmod_sample_rate;
md_mode = (DMODE_SOFT_MUSIC | DMODE_INTERP | DMODE_STEREO |
DMODE_16BITS);
@@ -155,7 +164,7 @@ mikmod_decoder_file_decode(struct decoder *decoder, const char *path_fs)
/* Prevent module from looping forever */
handle->loop = 0;
- audio_format_init(&audio_format, 44100, 16, 2);
+ audio_format_init(&audio_format, mikmod_sample_rate, 16, 2);
assert(audio_format_valid(&audio_format));
secPerByte =