From 1648c7aa5baf86583b057943337e4fade8616022 Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Sat, 14 Nov 2009 02:03:03 +0100 Subject: [PATCH] decoder/mikmod: sample rate is configurable The new option "sample_rate" sets the sample rate for libmikmod. --- NEWS | 1 + doc/user.xml | 30 +++++++++++++++++++++++++++++- src/decoder/mikmod_plugin.c | 15 ++++++++++++--- 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
Decoder plugins - +
+ <varname>mikmod</varname> + + + Module player based on MikMod. + + + + + + + Setting + Description + + + + + + sample_rate + + + Sets the sample rate generated by + libmikmod. Default is 44100. + + + + + +
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 =