2 * Copyright (C) 2003-2010 The Music Player Daemon Project
3 * http://www.musicpd.org
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
15 * You should have received a copy of the GNU General Public License along
16 * with this program; if not, write to the Free Software Foundation, Inc.,
17 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
21 #include "replay_gain_config.h"
32 static const char *const replay_gain_mode_names
[] = {
33 [REPLAY_GAIN_ALBUM
] = "album",
34 [REPLAY_GAIN_TRACK
] = "track",
37 enum replay_gain_mode replay_gain_mode
= REPLAY_GAIN_OFF
;
39 float replay_gain_preamp
= 1.0;
40 float replay_gain_missing_preamp
= 1.0;
43 replay_gain_get_mode_string(void)
45 switch (replay_gain_mode
) {
49 case REPLAY_GAIN_TRACK
:
52 case REPLAY_GAIN_ALBUM
:
62 replay_gain_set_mode_string(const char *p
)
66 if (strcmp(p
, "off") == 0)
67 replay_gain_mode
= REPLAY_GAIN_OFF
;
68 else if (strcmp(p
, "track") == 0)
69 replay_gain_mode
= REPLAY_GAIN_TRACK
;
70 else if (strcmp(p
, "album") == 0)
71 replay_gain_mode
= REPLAY_GAIN_ALBUM
;
75 idle_add(IDLE_OPTIONS
);
80 void replay_gain_global_init(void)
82 const struct config_param
*param
= config_get_param(CONF_REPLAYGAIN
);
84 if (param
!= NULL
&& !replay_gain_set_mode_string(param
->value
)) {
85 g_error("replaygain value \"%s\" at line %i is invalid\n",
86 param
->value
, param
->line
);
89 param
= config_get_param(CONF_REPLAYGAIN_PREAMP
);
93 float f
= strtod(param
->value
, &test
);
96 g_error("Replaygain preamp \"%s\" is not a number at "
97 "line %i\n", param
->value
, param
->line
);
100 if (f
< -15 || f
> 15) {
101 g_error("Replaygain preamp \"%s\" is not between -15 and"
102 "15 at line %i\n", param
->value
, param
->line
);
105 replay_gain_preamp
= pow(10, f
/ 20.0);
108 param
= config_get_param(CONF_REPLAYGAIN_MISSING_PREAMP
);
112 float f
= strtod(param
->value
, &test
);
115 g_error("Replaygain missing preamp \"%s\" is not a number at "
116 "line %i\n", param
->value
, param
->line
);
119 if (f
< -15 || f
> 15) {
120 g_error("Replaygain missing preamp \"%s\" is not between -15 and"
121 "15 at line %i\n", param
->value
, param
->line
);
124 replay_gain_missing_preamp
= pow(10, f
/ 20.0);