From 44d260f9116788a6a63242aabdd1434ab22edff0 Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Fri, 4 Jan 2013 23:45:55 +0100 Subject: replay_gain_*: convert to C++ --- Makefile.am | 18 +++--- src/ReplayGainConfig.cxx | 149 +++++++++++++++++++++++++++++++++++++++++++++++ src/ReplayGainInfo.cxx | 51 ++++++++++++++++ src/replay_gain_config.c | 145 --------------------------------------------- src/replay_gain_info.c | 48 --------------- 5 files changed, 209 insertions(+), 202 deletions(-) create mode 100644 src/ReplayGainConfig.cxx create mode 100644 src/ReplayGainInfo.cxx delete mode 100644 src/replay_gain_config.c delete mode 100644 src/replay_gain_info.c diff --git a/Makefile.am b/Makefile.am index 387100dfc..47e665614 100644 --- a/Makefile.am +++ b/Makefile.am @@ -282,8 +282,8 @@ src_mpd_SOURCES = \ src/Queue.cxx src/Queue.hxx \ src/QueuePrint.cxx src/QueuePrint.hxx \ src/QueueSave.cxx src/QueueSave.hxx \ - src/replay_gain_config.c \ - src/replay_gain_info.c \ + src/ReplayGainConfig.cxx \ + src/ReplayGainInfo.cxx \ src/sig_handlers.c \ src/Song.cxx \ src/SongUpdate.cxx \ @@ -1102,7 +1102,7 @@ test_DumpPlaylist_SOURCES = test/DumpPlaylist.cxx \ if HAVE_FLAC test_DumpPlaylist_SOURCES += \ - src/replay_gain_info.c \ + src/ReplayGainInfo.cxx \ src/decoder/FLACMetaData.cxx endif @@ -1119,7 +1119,7 @@ test_run_decoder_SOURCES = test/run_decoder.c \ src/io_thread.c src/io_thread.h \ src/conf.c src/tokenizer.c src/utils.c src/string_util.c src/log.c \ src/tag.c src/tag_pool.c src/tag_handler.c \ - src/replay_gain_info.c \ + src/ReplayGainInfo.cxx \ src/uri.c \ src/fd_util.c \ src/audio_check.c \ @@ -1141,7 +1141,7 @@ test_read_tags_SOURCES = test/read_tags.c \ src/io_thread.c src/io_thread.h \ src/conf.c src/tokenizer.c src/utils.c src/string_util.c src/log.c \ src/tag.c src/tag_pool.c src/tag_handler.c \ - src/replay_gain_info.c \ + src/ReplayGainInfo.cxx \ src/uri.c \ src/fd_util.c \ src/audio_check.c \ @@ -1169,8 +1169,8 @@ test_run_filter_SOURCES = test/run_filter.c \ src/audio_check.c \ src/audio_format.c \ src/audio_parser.c \ - src/replay_gain_config.c \ - src/replay_gain_info.c \ + src/ReplayGainConfig.cxx \ + src/ReplayGainInfo.cxx \ src/AudioCompress/compress.c if ENABLE_DESPOTIFY @@ -1280,8 +1280,8 @@ test_run_output_SOURCES = test/run_output.cxx \ src/filter_plugin.c \ src/filter_config.c \ src/AudioCompress/compress.c \ - src/replay_gain_info.c \ - src/replay_gain_config.c \ + src/ReplayGainInfo.cxx \ + src/ReplayGainConfig.cxx \ src/fd_util.c \ src/server_socket.c diff --git a/src/ReplayGainConfig.cxx b/src/ReplayGainConfig.cxx new file mode 100644 index 000000000..4d3e2f29d --- /dev/null +++ b/src/ReplayGainConfig.cxx @@ -0,0 +1,149 @@ +/* + * Copyright (C) 2003-2013 The Music Player Daemon Project + * http://www.musicpd.org + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#include "config.h" + +extern "C" { +#include "replay_gain_config.h" +#include "conf.h" +#include "idle.h" +} + +#include "Playlist.hxx" +#include "mpd_error.h" + +#include + +#include +#include +#include +#include + +enum replay_gain_mode replay_gain_mode = REPLAY_GAIN_OFF; + +const bool DEFAULT_REPLAYGAIN_LIMIT = true; + +float replay_gain_preamp = 1.0; +float replay_gain_missing_preamp = 1.0; +bool replay_gain_limit; + +const char * +replay_gain_get_mode_string(void) +{ + switch (replay_gain_mode) { + case REPLAY_GAIN_AUTO: + return "auto"; + + case REPLAY_GAIN_OFF: + return "off"; + + case REPLAY_GAIN_TRACK: + return "track"; + + case REPLAY_GAIN_ALBUM: + return "album"; + } + + /* unreachable */ + assert(false); + return "off"; +} + +bool +replay_gain_set_mode_string(const char *p) +{ + assert(p != NULL); + + if (strcmp(p, "off") == 0) + replay_gain_mode = REPLAY_GAIN_OFF; + else if (strcmp(p, "track") == 0) + replay_gain_mode = REPLAY_GAIN_TRACK; + else if (strcmp(p, "album") == 0) + replay_gain_mode = REPLAY_GAIN_ALBUM; + else if (strcmp(p, "auto") == 0) + replay_gain_mode = REPLAY_GAIN_AUTO; + else + return false; + + idle_add(IDLE_OPTIONS); + + return true; +} + +void replay_gain_global_init(void) +{ + const struct config_param *param = config_get_param(CONF_REPLAYGAIN); + + if (param != NULL && !replay_gain_set_mode_string(param->value)) { + MPD_ERROR("replaygain value \"%s\" at line %i is invalid\n", + param->value, param->line); + } + + param = config_get_param(CONF_REPLAYGAIN_PREAMP); + + if (param) { + char *test; + float f = strtod(param->value, &test); + + if (*test != '\0') { + MPD_ERROR("Replaygain preamp \"%s\" is not a number at " + "line %i\n", param->value, param->line); + } + + if (f < -15 || f > 15) { + MPD_ERROR("Replaygain preamp \"%s\" is not between -15 and" + "15 at line %i\n", param->value, param->line); + } + + replay_gain_preamp = pow(10, f / 20.0); + } + + param = config_get_param(CONF_REPLAYGAIN_MISSING_PREAMP); + + if (param) { + char *test; + float f = strtod(param->value, &test); + + if (*test != '\0') { + MPD_ERROR("Replaygain missing preamp \"%s\" is not a number at " + "line %i\n", param->value, param->line); + } + + if (f < -15 || f > 15) { + MPD_ERROR("Replaygain missing preamp \"%s\" is not between -15 and" + "15 at line %i\n", param->value, param->line); + } + + replay_gain_missing_preamp = pow(10, f / 20.0); + } + + replay_gain_limit = config_get_bool(CONF_REPLAYGAIN_LIMIT, DEFAULT_REPLAYGAIN_LIMIT); +} + +enum replay_gain_mode replay_gain_get_real_mode(void) +{ + enum replay_gain_mode rgm; + + rgm = replay_gain_mode; + + if (rgm == REPLAY_GAIN_AUTO) + rgm = g_playlist.queue.random ? REPLAY_GAIN_TRACK : REPLAY_GAIN_ALBUM; + + return rgm; +} diff --git a/src/ReplayGainInfo.cxx b/src/ReplayGainInfo.cxx new file mode 100644 index 000000000..5e5e4ab4b --- /dev/null +++ b/src/ReplayGainInfo.cxx @@ -0,0 +1,51 @@ +/* + * Copyright (C) 2003-2013 The Music Player Daemon Project + * http://www.musicpd.org + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#include "config.h" + +extern "C" { +#include "replay_gain_info.h" +} + +float +replay_gain_tuple_scale(const struct replay_gain_tuple *tuple, float preamp, float missing_preamp, bool peak_limit) +{ + float scale; + + if (replay_gain_tuple_defined(tuple)) { + scale = pow(10.0, tuple->gain / 20.0); + scale *= preamp; + if (scale > 15.0) + scale = 15.0; + + if (peak_limit && scale * tuple->peak > 1.0) + scale = 1.0 / tuple->peak; + } else + scale = missing_preamp; + + return scale; +} + +void +replay_gain_info_complete(struct replay_gain_info *info) +{ + if (!replay_gain_tuple_defined(&info->tuples[REPLAY_GAIN_ALBUM])) + info->tuples[REPLAY_GAIN_ALBUM] = + info->tuples[REPLAY_GAIN_TRACK]; +} diff --git a/src/replay_gain_config.c b/src/replay_gain_config.c deleted file mode 100644 index deaf2b5f8..000000000 --- a/src/replay_gain_config.c +++ /dev/null @@ -1,145 +0,0 @@ -/* - * Copyright (C) 2003-2013 The Music Player Daemon Project - * http://www.musicpd.org - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -#include "config.h" -#include "replay_gain_config.h" -#include "Playlist.hxx" -#include "conf.h" -#include "idle.h" -#include "mpd_error.h" - -#include - -#include -#include -#include -#include - -enum replay_gain_mode replay_gain_mode = REPLAY_GAIN_OFF; - -const bool DEFAULT_REPLAYGAIN_LIMIT = true; - -float replay_gain_preamp = 1.0; -float replay_gain_missing_preamp = 1.0; -bool replay_gain_limit; - -const char * -replay_gain_get_mode_string(void) -{ - switch (replay_gain_mode) { - case REPLAY_GAIN_AUTO: - return "auto"; - - case REPLAY_GAIN_OFF: - return "off"; - - case REPLAY_GAIN_TRACK: - return "track"; - - case REPLAY_GAIN_ALBUM: - return "album"; - } - - /* unreachable */ - assert(false); - return "off"; -} - -bool -replay_gain_set_mode_string(const char *p) -{ - assert(p != NULL); - - if (strcmp(p, "off") == 0) - replay_gain_mode = REPLAY_GAIN_OFF; - else if (strcmp(p, "track") == 0) - replay_gain_mode = REPLAY_GAIN_TRACK; - else if (strcmp(p, "album") == 0) - replay_gain_mode = REPLAY_GAIN_ALBUM; - else if (strcmp(p, "auto") == 0) - replay_gain_mode = REPLAY_GAIN_AUTO; - else - return false; - - idle_add(IDLE_OPTIONS); - - return true; -} - -void replay_gain_global_init(void) -{ - const struct config_param *param = config_get_param(CONF_REPLAYGAIN); - - if (param != NULL && !replay_gain_set_mode_string(param->value)) { - MPD_ERROR("replaygain value \"%s\" at line %i is invalid\n", - param->value, param->line); - } - - param = config_get_param(CONF_REPLAYGAIN_PREAMP); - - if (param) { - char *test; - float f = strtod(param->value, &test); - - if (*test != '\0') { - MPD_ERROR("Replaygain preamp \"%s\" is not a number at " - "line %i\n", param->value, param->line); - } - - if (f < -15 || f > 15) { - MPD_ERROR("Replaygain preamp \"%s\" is not between -15 and" - "15 at line %i\n", param->value, param->line); - } - - replay_gain_preamp = pow(10, f / 20.0); - } - - param = config_get_param(CONF_REPLAYGAIN_MISSING_PREAMP); - - if (param) { - char *test; - float f = strtod(param->value, &test); - - if (*test != '\0') { - MPD_ERROR("Replaygain missing preamp \"%s\" is not a number at " - "line %i\n", param->value, param->line); - } - - if (f < -15 || f > 15) { - MPD_ERROR("Replaygain missing preamp \"%s\" is not between -15 and" - "15 at line %i\n", param->value, param->line); - } - - replay_gain_missing_preamp = pow(10, f / 20.0); - } - - replay_gain_limit = config_get_bool(CONF_REPLAYGAIN_LIMIT, DEFAULT_REPLAYGAIN_LIMIT); -} - -enum replay_gain_mode replay_gain_get_real_mode(void) -{ - enum replay_gain_mode rgm; - - rgm = replay_gain_mode; - - if (rgm == REPLAY_GAIN_AUTO) - rgm = g_playlist.queue.random ? REPLAY_GAIN_TRACK : REPLAY_GAIN_ALBUM; - - return rgm; -} diff --git a/src/replay_gain_info.c b/src/replay_gain_info.c deleted file mode 100644 index 1f09e7a1a..000000000 --- a/src/replay_gain_info.c +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright (C) 2003-2011 The Music Player Daemon Project - * http://www.musicpd.org - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -#include "config.h" -#include "replay_gain_info.h" - -float -replay_gain_tuple_scale(const struct replay_gain_tuple *tuple, float preamp, float missing_preamp, bool peak_limit) -{ - float scale; - - if (replay_gain_tuple_defined(tuple)) { - scale = pow(10.0, tuple->gain / 20.0); - scale *= preamp; - if (scale > 15.0) - scale = 15.0; - - if (peak_limit && scale * tuple->peak > 1.0) - scale = 1.0 / tuple->peak; - } else - scale = missing_preamp; - - return scale; -} - -void -replay_gain_info_complete(struct replay_gain_info *info) -{ - if (!replay_gain_tuple_defined(&info->tuples[REPLAY_GAIN_ALBUM])) - info->tuples[REPLAY_GAIN_ALBUM] = - info->tuples[REPLAY_GAIN_TRACK]; -} -- cgit v1.2.3