1
0
Fork 0
forked from len0rd/rockbox

Replace limiter with dynamic range compressor

git-svn-id: svn://svn.rockbox.org/rockbox/trunk@22832 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Jeffrey Goode 2009-09-25 15:46:38 +00:00
parent b9a17dd0ce
commit cf19ba5599
21 changed files with 577 additions and 507 deletions

View file

@ -356,6 +356,34 @@ static void crossfeed_cross_set(int val)
global_settings.crossfeed_hf_cutoff);
}
static void compressor_set(int val)
{
(void)val;
dsp_set_compressor(global_settings.compressor_threshold,
global_settings.compressor_ratio,
global_settings.compressor_makeup_gain,
global_settings.compressor_knee,
global_settings.compressor_release_time);
}
static const char* auto_formatter(char *buffer, size_t buffer_size,
int val, const char *unit)
{
if (val == -1)
return str(LANG_AUTO);
else
snprintf(buffer, buffer_size, "%d %s", val, unit);
return buffer;
}
static int32_t auto_getlang(int value, int unit)
{
if (value == -1)
return LANG_AUTO;
else
return TALK_ID(value, unit);
}
static const char* db_format(char* buffer, size_t buffer_size, int value,
const char* unit)
{
@ -1256,11 +1284,29 @@ const struct settings_list settings[] = {
OFFON_SETTING(F_SOUNDSETTING, timestretch_enabled, LANG_TIMESTRETCH, false,
"timestretch enabled", dsp_timestretch_enable),
/* limiter */
INT_SETTING_NOWRAP(F_SOUNDSETTING, limiter_level,
LANG_COMPRESSOR, 0,
"limiter level", UNIT_DB, 0, MAX_LIMITER_GAIN,
5, db_format, get_dec_talkid, dsp_set_limiter),
/* compressor */
INT_SETTING_NOWRAP(F_SOUNDSETTING, compressor_threshold,
LANG_COMPRESSOR_THRESHOLD, 0,
"compressor threshold", UNIT_DB, 0, -24,
-3, formatter_unit_0_is_off, getlang_unit_0_is_off, compressor_set),
CHOICE_SETTING(F_SOUNDSETTING|F_NO_WRAP, compressor_ratio,
LANG_COMPRESSOR_RATIO, 1, "compressor ratio",
"2:1,4:1,6:1,10:1,limit", compressor_set, 5,
ID2P(LANG_COMPRESSOR_RATIO_2), ID2P(LANG_COMPRESSOR_RATIO_4),
ID2P(LANG_COMPRESSOR_RATIO_6), ID2P(LANG_COMPRESSOR_RATIO_10),
ID2P(LANG_COMPRESSOR_RATIO_LIMIT)),
INT_SETTING_NOWRAP(F_SOUNDSETTING, compressor_makeup_gain,
LANG_COMPRESSOR_GAIN, -1,
"compressor makeup gain", UNIT_DB, -1, 20,
1, auto_formatter, auto_getlang, compressor_set),
CHOICE_SETTING(F_SOUNDSETTING|F_NO_WRAP, compressor_knee,
LANG_COMPRESSOR_KNEE, 1, "compressor knee",
"hard knee,soft knee", compressor_set, 2,
ID2P(LANG_COMPRESSOR_HARD_KNEE), ID2P(LANG_COMPRESSOR_SOFT_KNEE)),
INT_SETTING_NOWRAP(F_SOUNDSETTING, compressor_release_time,
LANG_COMPRESSOR_RELEASE, 100,
"compressor release time", UNIT_MS, 20, 200,
10, NULL, NULL, compressor_set),
#endif
#ifdef HAVE_WM8758
SOUND_SETTING(F_NO_WRAP, bass_cutoff, LANG_BASS_CUTOFF,