summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--apps/menus/eq_menu.c552
-rw-r--r--apps/plugins/settings_dumper.c2
-rw-r--r--apps/settings.c2
-rw-r--r--apps/settings_list.c139
-rw-r--r--apps/settings_list.h6
-rw-r--r--lib/rbcodec/dsp/eq.h5
-rw-r--r--lib/rbcodec/dsp/eqs/Acoustic.cfg40
-rw-r--r--lib/rbcodec/dsp/eqs/Bass.cfg40
-rw-r--r--lib/rbcodec/dsp/eqs/Classical.cfg40
-rw-r--r--lib/rbcodec/dsp/eqs/Club.cfg40
-rw-r--r--lib/rbcodec/dsp/eqs/Dance.cfg40
-rw-r--r--lib/rbcodec/dsp/eqs/Default.cfg40
-rw-r--r--lib/rbcodec/dsp/eqs/Disco.cfg40
-rw-r--r--lib/rbcodec/dsp/eqs/Electronic.cfg40
-rw-r--r--lib/rbcodec/dsp/eqs/Flat.cfg40
-rw-r--r--lib/rbcodec/dsp/eqs/Headphones.cfg40
-rw-r--r--lib/rbcodec/dsp/eqs/Hip-Hop.cfg40
-rw-r--r--lib/rbcodec/dsp/eqs/Jazz.cfg40
-rw-r--r--lib/rbcodec/dsp/eqs/Live.cfg40
-rw-r--r--lib/rbcodec/dsp/eqs/Lounge.cfg40
-rw-r--r--lib/rbcodec/dsp/eqs/Party.cfg40
-rw-r--r--lib/rbcodec/dsp/eqs/Pop.cfg40
-rw-r--r--lib/rbcodec/dsp/eqs/R&B.cfg40
-rw-r--r--lib/rbcodec/dsp/eqs/Reggae.cfg40
-rw-r--r--lib/rbcodec/dsp/eqs/Rock.cfg40
-rw-r--r--lib/rbcodec/dsp/eqs/Ska.cfg40
-rw-r--r--lib/rbcodec/dsp/eqs/Soft.cfg40
-rw-r--r--lib/rbcodec/dsp/eqs/Techno.cfg40
-rw-r--r--lib/rbcodec/dsp/eqs/Vocal.cfg40
29 files changed, 661 insertions, 965 deletions
diff --git a/apps/menus/eq_menu.c b/apps/menus/eq_menu.c
index 2f3d6b62c7..8285850155 100644
--- a/apps/menus/eq_menu.c
+++ b/apps/menus/eq_menu.c
@@ -27,6 +27,7 @@
#include "system.h"
#include "kernel.h"
#include "lcd.h"
+#include "list.h"
#include "menu.h"
#include "action.h"
#include "mp3_playback.h"
@@ -46,6 +47,8 @@
#include "menu_common.h"
#include "viewport.h"
#include "exported_menus.h"
+#include "pcmbuf.h"
+#include "option_select.h"
/*
* Utility functions
@@ -70,8 +73,8 @@ const char* eq_precut_format(char* buffer, size_t buffer_size, int value, const
*/
static void eq_apply(void)
{
- dsp_eq_enable(global_settings.eq_enabled);
- dsp_set_eq_precut(global_settings.eq_precut);
+ dsp_eq_enable(global_settings.eq_enabled);
+ dsp_set_eq_precut(global_settings.eq_precut);
/* Update all bands */
for(int i = 0; i < EQ_NUM_BANDS; i++) {
dsp_set_eq_coefs(i, &global_settings.eq_band_settings[i]);
@@ -96,239 +99,315 @@ static int eq_setting_callback(int action, const struct menu_item_ex *this_item)
MENUITEM_SETTING(eq_enable, &global_settings.eq_enabled, eq_setting_callback);
MENUITEM_SETTING(eq_precut, &global_settings.eq_precut, eq_setting_callback);
-MENUITEM_SETTING(cutoff_0, &global_settings.eq_band_settings[0].cutoff,
- eq_setting_callback);
-MENUITEM_SETTING(cutoff_1, &global_settings.eq_band_settings[1].cutoff,
- eq_setting_callback);
-MENUITEM_SETTING(cutoff_2, &global_settings.eq_band_settings[2].cutoff,
- eq_setting_callback);
-MENUITEM_SETTING(cutoff_3, &global_settings.eq_band_settings[3].cutoff,
- eq_setting_callback);
-MENUITEM_SETTING(cutoff_4, &global_settings.eq_band_settings[4].cutoff,
- eq_setting_callback);
-MENUITEM_SETTING(cutoff_5, &global_settings.eq_band_settings[5].cutoff,
- eq_setting_callback);
-MENUITEM_SETTING(cutoff_6, &global_settings.eq_band_settings[6].cutoff,
- eq_setting_callback);
-MENUITEM_SETTING(cutoff_7, &global_settings.eq_band_settings[7].cutoff,
- eq_setting_callback);
-MENUITEM_SETTING(cutoff_8, &global_settings.eq_band_settings[8].cutoff,
- eq_setting_callback);
-MENUITEM_SETTING(cutoff_9, &global_settings.eq_band_settings[9].cutoff,
- eq_setting_callback);
-
-MENUITEM_SETTING(q_0, &global_settings.eq_band_settings[0].q,
- eq_setting_callback);
-MENUITEM_SETTING(q_1, &global_settings.eq_band_settings[1].q,
- eq_setting_callback);
-MENUITEM_SETTING(q_2, &global_settings.eq_band_settings[2].q,
- eq_setting_callback);
-MENUITEM_SETTING(q_3, &global_settings.eq_band_settings[3].q,
- eq_setting_callback);
-MENUITEM_SETTING(q_4, &global_settings.eq_band_settings[4].q,
- eq_setting_callback);
-MENUITEM_SETTING(q_5, &global_settings.eq_band_settings[5].q,
- eq_setting_callback);
-MENUITEM_SETTING(q_6, &global_settings.eq_band_settings[6].q,
- eq_setting_callback);
-MENUITEM_SETTING(q_7, &global_settings.eq_band_settings[7].q,
- eq_setting_callback);
-MENUITEM_SETTING(q_8, &global_settings.eq_band_settings[8].q,
- eq_setting_callback);
-MENUITEM_SETTING(q_9, &global_settings.eq_band_settings[9].q,
- eq_setting_callback);
-
-MENUITEM_SETTING(gain_0, &global_settings.eq_band_settings[0].gain,
- eq_setting_callback);
-MENUITEM_SETTING(gain_1, &global_settings.eq_band_settings[1].gain,
- eq_setting_callback);
-MENUITEM_SETTING(gain_2, &global_settings.eq_band_settings[2].gain,
- eq_setting_callback);
-MENUITEM_SETTING(gain_3, &global_settings.eq_band_settings[3].gain,
- eq_setting_callback);
-MENUITEM_SETTING(gain_4, &global_settings.eq_band_settings[4].gain,
- eq_setting_callback);
-MENUITEM_SETTING(gain_5, &global_settings.eq_band_settings[5].gain,
- eq_setting_callback);
-MENUITEM_SETTING(gain_6, &global_settings.eq_band_settings[6].gain,
- eq_setting_callback);
-MENUITEM_SETTING(gain_7, &global_settings.eq_band_settings[7].gain,
- eq_setting_callback);
-MENUITEM_SETTING(gain_8, &global_settings.eq_band_settings[8].gain,
- eq_setting_callback);
-MENUITEM_SETTING(gain_9, &global_settings.eq_band_settings[9].gain,
- eq_setting_callback);
-
-static char* gainitem_get_name(int selected_item, void * data, char *buffer)
+static char* gainitem_get_name(int selected_item, void *data, char *buffer, size_t len)
{
- (void)selected_item;
- int *setting = (int*)data;
- snprintf(buffer, MAX_PATH, str(LANG_EQUALIZER_GAIN_ITEM), *setting);
+ (void)data;
+ snprintf(buffer, len, str(LANG_EQUALIZER_GAIN_ITEM),
+ global_settings.eq_band_settings[selected_item].cutoff);
+
return buffer;
}
-static int gainitem_speak_item(int selected_item, void * data)
+static int gainitem_speak_item(int selected_item, void *data)
{
- (void)selected_item;
- int *setting = (int*)data;
- talk_number(*setting, false);
+ (void)data;
+ talk_number(global_settings.eq_band_settings[selected_item].cutoff, false);
talk_id(LANG_EQUALIZER_GAIN_ITEM, true);
return 0;
}
-static int do_option(void * param)
+static enum themable_icons gainitem_get_icon(int selected_item, void * data)
{
- const struct menu_item_ex *setting = (const struct menu_item_ex*)param;
- lowlatency_callback(ACTION_ENTER_MENUITEM, setting);
- do_setting_from_menu(setting, NULL);
- eq_apply();
- lowlatency_callback(ACTION_EXIT_MENUITEM, setting);
- return 0;
+ (void)selected_item;
+ (void)data;
+
+ return Icon_Menu_functioncall;
}
-MENUITEM_FUNCTION_DYNTEXT(gain_item_0, MENU_FUNC_USEPARAM,
- do_option, (void*)&gain_0,
- gainitem_get_name, gainitem_speak_item,
- &global_settings.eq_band_settings[0].cutoff,
- NULL, Icon_NOICON);
-MENUITEM_FUNCTION_DYNTEXT(gain_item_1, MENU_FUNC_USEPARAM,
- do_option, (void*)&gain_1,
- gainitem_get_name, gainitem_speak_item,
- &global_settings.eq_band_settings[1].cutoff,
- NULL, Icon_NOICON);
-MENUITEM_FUNCTION_DYNTEXT(gain_item_2, MENU_FUNC_USEPARAM,
- do_option, (void*)&gain_2,
- gainitem_get_name, gainitem_speak_item,
- &global_settings.eq_band_settings[2].cutoff,
- NULL, Icon_NOICON);
-MENUITEM_FUNCTION_DYNTEXT(gain_item_3, MENU_FUNC_USEPARAM,
- do_option, (void*)&gain_3,
- gainitem_get_name, gainitem_speak_item,
- &global_settings.eq_band_settings[3].cutoff,
- NULL, Icon_NOICON);
-MENUITEM_FUNCTION_DYNTEXT(gain_item_4, MENU_FUNC_USEPARAM,
- do_option, (void*)&gain_4,
- gainitem_get_name, gainitem_speak_item,
- &global_settings.eq_band_settings[4].cutoff,
- NULL, Icon_NOICON);
-MENUITEM_FUNCTION_DYNTEXT(gain_item_5, MENU_FUNC_USEPARAM,
- do_option, (void*)&gain_5,
- gainitem_get_name, gainitem_speak_item,
- &global_settings.eq_band_settings[5].cutoff,
- NULL, Icon_NOICON);
-MENUITEM_FUNCTION_DYNTEXT(gain_item_6, MENU_FUNC_USEPARAM,
- do_option, (void*)&gain_6,
- gainitem_get_name, gainitem_speak_item,
- &global_settings.eq_band_settings[6].cutoff,
- NULL, Icon_NOICON);
-MENUITEM_FUNCTION_DYNTEXT(gain_item_7, MENU_FUNC_USEPARAM,
- do_option, (void*)&gain_7,
- gainitem_get_name, gainitem_speak_item,
- &global_settings.eq_band_settings[7].cutoff,
- NULL, Icon_NOICON);
-MENUITEM_FUNCTION_DYNTEXT(gain_item_8, MENU_FUNC_USEPARAM,
- do_option, (void*)&gain_8,
- gainitem_get_name, gainitem_speak_item,
- &global_settings.eq_band_settings[8].cutoff,
- NULL, Icon_NOICON);
-MENUITEM_FUNCTION_DYNTEXT(gain_item_9, MENU_FUNC_USEPARAM,
- do_option, (void*)&gain_9,
- gainitem_get_name, gainitem_speak_item,
- &global_settings.eq_band_settings[9].cutoff,
- NULL, Icon_NOICON);
-
-MAKE_MENU(gain_menu, ID2P(LANG_EQUALIZER_GAIN), NULL, Icon_NOICON, &gain_item_0,
- &gain_item_1, &gain_item_2, &gain_item_3, &gain_item_4,
- &gain_item_5, &gain_item_6, &gain_item_7, &gain_item_8,
- &gain_item_9);
-
-static const struct menu_item_ex *band_items[8][3] = {
- { &cutoff_1, &q_1, &gain_1 },
- { &cutoff_2, &q_2, &gain_2 },
- { &cutoff_3, &q_3, &gain_3 },
- { &cutoff_4, &q_4, &gain_4 },
- { &cutoff_5, &q_5, &gain_5 },
- { &cutoff_6, &q_6, &gain_6 },
- { &cutoff_7, &q_7, &gain_7 },
- { &cutoff_8, &q_8, &gain_8 }
+static const char* db_format(char* buffer, size_t buffer_size, int value,
+ const char* unit)
+{
+ int v = abs(value);
+
+ snprintf(buffer, buffer_size, "%s%d.%d %s", value < 0 ? "-" : "",
+ v / 10, v % 10, unit);
+ return buffer;
+}
+
+static int32_t get_dec_talkid(int value, int unit)
+{
+ return TALK_ID_DECIMAL(value, 1, unit);
+}
+
+static const struct int_setting gain_int_setting = {
+ .option_callback = NULL,
+ .unit = UNIT_DB,
+ .min = EQ_GAIN_MIN,
+ .max = EQ_GAIN_MAX,
+ .step = EQ_GAIN_STEP,
+ .formatter = db_format,
+ .get_talk_id = get_dec_talkid,
+};
+
+static const struct int_setting q_int_setting = {
+ .option_callback = NULL,
+ .unit = UNIT_INT,
+ .min = EQ_Q_MIN,
+ .max = EQ_Q_MAX,
+ .step = EQ_Q_STEP,
+ .formatter = eq_q_format,
+ .get_talk_id = get_dec_talkid,
+};
+
+static const struct int_setting cutoff_int_setting = {
+ .option_callback = NULL,
+ .unit = UNIT_HERTZ,
+ .min = EQ_CUTOFF_MIN,
+ .max = EQ_CUTOFF_MAX,
+ .step = EQ_CUTOFF_STEP,
+ .formatter = NULL,
+ .get_talk_id = NULL,
};
-static char* centerband_get_name(int selected_item, void * data, char *buffer)
+static int simplelist_action_callback(int action, struct gui_synclist *lists)
{
- (void)selected_item;
- int band = (intptr_t)data;
- snprintf(buffer, MAX_PATH, str(LANG_EQUALIZER_BAND_PEAK), band);
- return buffer;
+ (void)lists;
+ if (action == ACTION_STD_OK)
+ return ACTION_STD_CANCEL;
+ return action;
}
-static int centerband_speak_item(int selected_item, void * data)
+static int eq_do_simple_menu(void * param)
{
- (void)selected_item;
- int band = (intptr_t)data;
- talk_id(LANG_EQUALIZER_BAND_PEAK, false);
- talk_number(band, true);
+ (void)param;
+ struct simplelist_info info;
+ struct settings_list setting;
+ char title[MAX_PATH];
+
+ simplelist_info_init(&info, str(LANG_EQUALIZER_GAIN), EQ_NUM_BANDS, NULL);
+ info.get_name = (list_get_name*)gainitem_get_name;
+ info.get_talk = gainitem_speak_item;
+ info.get_icon = gainitem_get_icon;
+ info.action_callback = simplelist_action_callback;
+ info.selection = -1;
+ info.title_icon = Icon_Submenu;
+ setting.flags = F_BANFROMQS|F_INT_SETTING|F_T_INT|F_NO_WRAP;
+ setting.lang_id = LANG_GAIN;
+ setting.default_val.int_ = 0;
+ setting.int_setting = &gain_int_setting;
+
+ while (true)
+ {
+ simplelist_show_list(&info);
+ if (info.selection < 0)
+ break;
+ pcmbuf_set_low_latency(true);
+ setting.setting = &global_settings.eq_band_settings[info.selection].gain;
+ option_screen(&setting, NULL, false,
+ gainitem_get_name(info.selection, NULL, title, MAX_PATH));
+ eq_apply();
+ pcmbuf_set_low_latency(false);
+ }
return 0;
}
+MENUITEM_FUNCTION(gain_menu, 0, ID2P(LANG_EQUALIZER_GAIN), eq_do_simple_menu,
+ NULL, NULL, Icon_Submenu);
-static int do_center_band_menu(void* param)
+static void selection_to_banditem(int selection, int expanded_band, int *band, int *item)
{
- int band = (intptr_t)param;
- struct menu_item_ex menu;
- struct menu_callback_with_desc cb_and_desc;
- char desc[MAX_PATH];
-
- cb_and_desc.menu_callback = NULL;
- snprintf(desc, MAX_PATH, str(LANG_EQUALIZER_BAND_PEAK), band);
- cb_and_desc.desc = desc;
- cb_and_desc.icon_id = Icon_EQ;
- menu.flags = MT_MENU|(3<<MENU_COUNT_SHIFT)|MENU_HAS_DESC;
- menu.submenus = band_items[band-1];
- menu.callback_and_desc = &cb_and_desc;
- do_menu(&menu, NULL, NULL, false);
- return 0;
+ int diff = selection - expanded_band;
+
+ if (expanded_band < 0 || diff < 0)
+ {
+ *item = 0;
+ *band = selection;
+ }
+ else if (diff < 4)
+ {
+ *item = selection - expanded_band;
+ *band = expanded_band;
+ }
+ else
+ {
+ *item = 0;
+ *band = expanded_band + diff - 3;
+ }
}
-MAKE_MENU(band_0_menu, ID2P(LANG_EQUALIZER_BAND_LOW_SHELF), NULL,
- Icon_EQ, &cutoff_0, &q_0, &gain_0);
-MENUITEM_FUNCTION_DYNTEXT(band_1_menu, MENU_FUNC_USEPARAM,
- do_center_band_menu, (void*)1,
- centerband_get_name, centerband_speak_item,
- (void*)1, NULL, Icon_EQ);
-MENUITEM_FUNCTION_DYNTEXT(band_2_menu, MENU_FUNC_USEPARAM,
- do_center_band_menu, (void*)2,
- centerband_get_name, centerband_speak_item,
- (void*)2, NULL, Icon_EQ);
-MENUITEM_FUNCTION_DYNTEXT(band_3_menu, MENU_FUNC_USEPARAM,
- do_center_band_menu, (void*)3,
- centerband_get_name, centerband_speak_item,
- (void*)3, NULL, Icon_EQ);
-MENUITEM_FUNCTION_DYNTEXT(band_4_menu, MENU_FUNC_USEPARAM,
- do_center_band_menu, (void*)4,
- centerband_get_name, centerband_speak_item,
- (void*)4, NULL, Icon_EQ);
-MENUITEM_FUNCTION_DYNTEXT(band_5_menu, MENU_FUNC_USEPARAM,
- do_center_band_menu, (void*)5,
- centerband_get_name, centerband_speak_item,
- (void*)5, NULL, Icon_EQ);
-MENUITEM_FUNCTION_DYNTEXT(band_6_menu, MENU_FUNC_USEPARAM,
- do_center_band_menu, (void*)6,
- centerband_get_name, centerband_speak_item,
- (void*)6, NULL, Icon_EQ);
-MENUITEM_FUNCTION_DYNTEXT(band_7_menu, MENU_FUNC_USEPARAM,
- do_center_band_menu, (void*)7,
- centerband_get_name, centerband_speak_item,
- (void*)7, NULL, Icon_EQ);
-MENUITEM_FUNCTION_DYNTEXT(band_8_menu, MENU_FUNC_USEPARAM,
- do_center_band_menu, (void*)8,
- centerband_get_name, centerband_speak_item,
- (void*)8, NULL, Icon_EQ);
-MAKE_MENU(band_9_menu, ID2P(LANG_EQUALIZER_BAND_HIGH_SHELF), NULL,
- Icon_EQ, &cutoff_9, &q_9, &gain_9);
-
-MAKE_MENU(advanced_eq_menu_, ID2P(LANG_EQUALIZER_ADVANCED), NULL, Icon_EQ,
- &band_0_menu, &band_1_menu, &band_2_menu, &band_3_menu, &band_4_menu,
- &band_5_menu, &band_6_menu, &band_7_menu, &band_8_menu, &band_9_menu);
+static char *advancedmenu_item_get_name(int selected_item, void *data, char *buffer, size_t len)
+{
+ (void)len;
+ int band;
+ int item;
+ char *lang = NULL;
+ selection_to_banditem(selected_item, *(intptr_t*)data, &band, &item);
+
+ strcpy(buffer, "\t");
+ switch (item)
+ {
+ case 0: /* Band title */
+ if (band == 0)
+ return str(LANG_EQUALIZER_BAND_LOW_SHELF);
+ else if (band == EQ_NUM_BANDS - 1)
+ return str(LANG_EQUALIZER_BAND_HIGH_SHELF);
+ else
+ {
+ snprintf(buffer, MAX_PATH, str(LANG_EQUALIZER_BAND_PEAK), band);
+ return buffer;
+ }
+ break;
+ case 1: /* cutoff */
+ if (band == 0)
+ lang = str(LANG_EQUALIZER_BAND_CUTOFF);
+ else if (band == EQ_NUM_BANDS - 1)
+ lang = str(LANG_EQUALIZER_BAND_CUTOFF);
+ else
+ lang = str(LANG_EQUALIZER_BAND_CENTER);
+ break;
+ case 2: /* Q */
+ lang = str(LANG_EQUALIZER_BAND_Q);
+ break;
+ case 3: /* Gain */
+ lang = str(LANG_GAIN);
+ break;
+ }
+
+ return strcat(buffer, lang);;
+}
+
+static int advancedmenu_speak_item(int selected_item, void *data)
+{
+ (void)data;
+ int band;
+ int item;
+ int lang = -1;
+
+ selection_to_banditem(selected_item, *(intptr_t*)data, &band, &item);
+
+ switch (item)
+ {
+ case 0: /* Band title */
+ if (band == 0)
+ lang = LANG_EQUALIZER_BAND_LOW_SHELF;
+ else if (band == EQ_NUM_BANDS - 1)
+ lang = LANG_EQUALIZER_BAND_HIGH_SHELF;
+ else
+ {
+ talk_id(LANG_EQUALIZER_BAND_PEAK, false);
+ talk_number(band, true);
+ return -1;
+ }
+ break;
+ case 1: /* cutoff */
+ if (band == 0)
+ lang = LANG_EQUALIZER_BAND_CUTOFF;
+ else if (band == EQ_NUM_BANDS - 1)
+ lang = LANG_EQUALIZER_BAND_CUTOFF;
+ else
+ lang = LANG_EQUALIZER_BAND_CENTER;
+ break;
+ case 2: /* Q */
+ lang = LANG_EQUALIZER_BAND_Q;
+ break;
+ case 3: /* Gain */
+ lang = LANG_GAIN;
+ break;
+ }
+ talk_id(lang, true);
+ return -1;
+}
+
+static enum themable_icons advancedmenu_get_icon(int selected_item, void * data)
+{
+ (void)data;
+ int band;
+ int item;
+
+ selection_to_banditem(selected_item, *(intptr_t*)data, &band, &item);
+
+ if (item == 0)
+ return Icon_Submenu;
+ else
+ return Icon_Menu_setting;
+}
+extern struct eq_band_setting eq_defaults[EQ_NUM_BANDS];
+
+static int eq_do_advanced_menu(void * param)
+{
+ (void)param;
+ struct simplelist_info info;
+ struct settings_list setting;
+ char title[MAX_PATH];
+ int band, item;
+ intptr_t selected_band = -1;
+
+ simplelist_info_init(&info, str(LANG_EQUALIZER_ADVANCED),
+ EQ_NUM_BANDS, &selected_band);
+ info.get_name = (list_get_name*)advancedmenu_item_get_name;
+ info.get_talk = advancedmenu_speak_item;
+ info.get_icon = advancedmenu_get_icon;
+ info.action_callback = simplelist_action_callback;
+ info.selection = -1;
+ info.title_icon = Icon_EQ;
+ setting.flags = F_BANFROMQS|F_INT_SETTING|F_T_INT|F_NO_WRAP;
+
+ while (true)
+ {
+ simplelist_show_list(&info);
+ if (info.selection < 0)
+ break;
+ selection_to_banditem(info.selection, selected_band, &band, &item);
+ switch (item)
+ {
+ case 0: /* title, do nothing */
+ {
+ int extra;
+ if (selected_band == band)
+ {
+ extra = 0;
+ selected_band = -1;
+ }
+ else
+ {
+ extra = 3;
+ selected_band = band;
+ }
+ info.selection = band;
+ info.count = EQ_NUM_BANDS + extra;
+ continue;
+ }
+ case 1: /* cutoff */
+ if (band == 0 || band == EQ_NUM_BANDS - 1)
+ setting.lang_id = LANG_EQUALIZER_BAND_CUTOFF;
+ else
+ setting.lang_id = LANG_EQUALIZER_BAND_CENTER;
+ setting.default_val.int_ = eq_defaults[band].cutoff;
+ setting.int_setting = &cutoff_int_setting;
+ break;
+ case 2: /* Q */
+ setting.lang_id = LANG_EQUALIZER_BAND_Q;
+ setting.default_val.int_ = eq_defaults[band].q;
+ setting.int_setting = &q_int_setting;
+ break;
+ case 3: /* Gain */
+ setting.lang_id = LANG_GAIN;
+ setting.default_val.int_ = eq_defaults[band].gain;
+ setting.int_setting = &gain_int_setting;
+ break;
+ }
+ pcmbuf_set_low_latency(true);
+ setting.setting = &global_settings.eq_band_settings[band].gain;
+ advancedmenu_item_get_name(info.selection, &selected_band, title, MAX_PATH);
+
+ option_screen(&setting, NULL, false, title[0] == '\t' ? &title[1] : title);
+ eq_apply();
+ pcmbuf_set_low_latency(false);
+ }
+ return 0;
+}
+MENUITEM_FUNCTION(advanced_menu, 0, ID2P(LANG_EQUALIZER_ADVANCED),
+ eq_do_advanced_menu, NULL, NULL, Icon_EQ);
enum eq_slider_mode {
GAIN,
@@ -361,12 +440,12 @@ static int draw_eq_slider(struct screen * screen, int x, int y,
steps = EQ_Q_MAX - EQ_Q_MIN;
min_item = q - EQ_Q_STEP - EQ_Q_MIN;
max_item = q + EQ_Q_STEP - EQ_Q_MIN;
- break;
+ break;
case CUTOFF:
steps = EQ_CUTOFF_MAX - EQ_CUTOFF_MIN;
min_item = cutoff - EQ_CUTOFF_FAST_STEP * 2;
max_item = cutoff + EQ_CUTOFF_FAST_STEP * 2;
- break;
+ break;
case GAIN:
default:
steps = EQ_GAIN_MAX - EQ_GAIN_MIN;
@@ -383,7 +462,7 @@ static int draw_eq_slider(struct screen * screen, int x, int y,
if (band == 0) {
screen->putsxy(x1, y1, "LS: ");
screen->getstringsize("LS:", &w, &h);
- } else if (band == 9) {
+ } else if (band == EQ_NUM_BANDS - 1) {
screen->putsxy(x1, y1, "HS: ");
screen->getstringsize("HS:", &w, &h);
} else {
@@ -425,7 +504,7 @@ static int draw_eq_slider(struct screen * screen, int x, int y,
screen->set_drawmode(DRMODE_SOLID | DRMODE_INVERSEVID);
else
screen->set_drawmode(DRMODE_SOLID);
-
+
snprintf(buf, sizeof(buf), "%5d%s", cutoff,
screen->lcdwidth >= 160 ? "Hz" : "");
screen->getstringsize(buf, &w, &h);
@@ -453,9 +532,9 @@ static void draw_eq_sliders(struct screen * screen, int x, int y,
{
int height = y;
- start_item = MIN(start_item, 10 - nb_eq_sliders);
+ start_item = MIN(start_item, EQ_NUM_BANDS - nb_eq_sliders);
- for (int i = 0; i < 10; i++) {
+ for (int i = 0; i < EQ_NUM_BANDS; i++) {
struct eq_band_setting *setting = &global_settings.eq_band_settings[i];
int cutoff = setting->cutoff;
int q = setting->q;
@@ -473,9 +552,9 @@ static void draw_eq_sliders(struct screen * screen, int x, int y,
}
}
- if (nb_eq_sliders != 10)
+ if (nb_eq_sliders != EQ_NUM_BANDS)
gui_scrollbar_draw(screen, 0, y, SCROLLBAR_SIZE - 1,
- screen->lcdheight - y, 10,
+ screen->lcdheight - y, EQ_NUM_BANDS,
start_item, start_item + nb_eq_sliders,
VERTICAL);
return;
@@ -514,16 +593,16 @@ bool eq_menu_graphical(void)
if (height > screens[i].lcdheight)
nb_eq_sliders[i]--;
- if (nb_eq_sliders[i] > 10)
- nb_eq_sliders[i] = 10;
+ if (nb_eq_sliders[i] > EQ_NUM_BANDS)
+ nb_eq_sliders[i] = EQ_NUM_BANDS;
}
y = h + 1;
-
+
/* Start off editing gain on the first band */
mode = GAIN;
current_band = 0;
-
+
while (!exit_request) {
FOR_NB_SCREENS(i)
{
@@ -538,7 +617,7 @@ bool eq_menu_graphical(void)
fast_step = EQ_GAIN_FAST_STEP;
min = EQ_GAIN_MIN;
max = EQ_GAIN_MAX;
-
+
snprintf(buf, sizeof(buf), str(LANG_SYSFONT_EQUALIZER_EDIT_MODE),
str(LANG_SYSFONT_GAIN), "(dB)");
@@ -572,12 +651,12 @@ bool eq_menu_graphical(void)
}
/* Draw scrollbar if needed */
- if (nb_eq_sliders[i] != 10)
+ if (nb_eq_sliders[i] != EQ_NUM_BANDS)
{
if (current_band == 0) {
start_item = 0;
} else if (current_band == 9) {
- start_item = 10 - nb_eq_sliders[i];
+ start_item = EQ_NUM_BANDS - nb_eq_sliders[i];
} else {
start_item = current_band - 1;
}
@@ -592,7 +671,7 @@ bool eq_menu_graphical(void)
screens[i].update();
}
-
+
button = get_action(CONTEXT_SETTINGS_EQ,TIMEOUT_BLOCK);
switch (button) {
@@ -630,14 +709,12 @@ bool eq_menu_graphical(void)
case ACTION_STD_PREVREPEAT:
current_band--;
if (current_band < 0)
- current_band = 9; /* wrap around */
+ current_band = EQ_NUM_BANDS - 1; /* wrap around */
break;
case ACTION_STD_NEXT:
case ACTION_STD_NEXTREPEAT:
- current_band++;
- if (current_band > 9)
- current_band = 0; /* wrap around */
+ current_band = (current_band + 1) % EQ_NUM_BANDS;
break;
case ACTION_STD_OK:
@@ -657,7 +734,7 @@ bool eq_menu_graphical(void)
}
break;
}
-
+
/* Update the filter if the user changed something */
if (has_changed) {
dsp_set_eq_coefs(current_band,
@@ -667,7 +744,7 @@ bool eq_menu_graphical(void)
}
/* Reset screen settings */
- FOR_NB_SCREENS(i)
+ FOR_NB_SCREENS(i)
{
screens[i].setfont(FONT_UI);
screens[i].clear_display();
@@ -682,19 +759,18 @@ static bool eq_save_preset(void)
/* make sure that the eq is enabled for setting saving */
bool enabled = global_settings.eq_enabled;
global_settings.eq_enabled = true;
-
+
bool result = settings_save_config(SETTINGS_SAVE_EQPRESET);
-
+
global_settings.eq_enabled = enabled;
return result;
}
-
/* Allows browsing of preset files */
static struct browse_folder_info eqs = { EQS_DIR, SHOW_CFG };
MENUITEM_FUNCTION(eq_graphical, 0, ID2P(LANG_EQUALIZER_GRAPHICAL),
- (int(*)(void))eq_menu_graphical, NULL, lowlatency_callback,
+ (int(*)(void))eq_menu_graphical, NULL, lowlatency_callback,
Icon_EQ);
MENUITEM_FUNCTION(eq_save, 0, ID2P(LANG_EQUALIZER_SAVE),
(int(*)(void))eq_save_preset, NULL, NULL, Icon_NOICON);
@@ -703,6 +779,6 @@ MENUITEM_FUNCTION(eq_browse, MENU_FUNC_USEPARAM, ID2P(LANG_EQUALIZER_BROWSE),
Icon_NOICON);
MAKE_MENU(equalizer_menu, ID2P(LANG_EQUALIZER), NULL, Icon_EQ,
- &eq_enable, &eq_graphical, &eq_precut, &gain_menu,
- &advanced_eq_menu_, &eq_save, &eq_browse);
+ &eq_enable, &eq_graphical, &eq_precut, &gain_menu,
+ &advanced_menu, &eq_save, &eq_browse);
diff --git a/apps/plugins/settings_dumper.c b/apps/plugins/settings_dumper.c
index 381cdeebaa..66bfa65b0f 100644
--- a/apps/plugins/settings_dumper.c
+++ b/apps/plugins/settings_dumper.c
@@ -37,6 +37,8 @@ static void write_setting(const struct settings_list *setting, int fd, unsigned
F_EQSETTING|
F_SOUNDSETTING)))
return;
+ else if (setting->flags&F_DEPRECATED)
+ return;
setting_count++;
if (setting_count%10 == 0)
rb->fdprintf(fd, "\r\n");
diff --git a/apps/settings.c b/apps/settings.c
index e2a6efa3d8..1bb6c74b43 100644
--- a/apps/settings.c
+++ b/apps/settings.c
@@ -547,6 +547,8 @@ static bool settings_write_config(const char* filename, int options)
if (settings[i].cfg_name == NULL)
continue;
value[0] = '\0';
+ if (settings[i].flags & F_DEPRECATED)
+ continue;
switch (options)
{
diff --git a/apps/settings_list.c b/apps/settings_list.c
index 2b27516d1c..cc4012ec14 100644
--- a/apps/settings_list.c
+++ b/apps/settings_list.c
@@ -470,6 +470,66 @@ static int32_t get_precut_talkid(int value, int unit)
return TALK_ID_DECIMAL(-value, 1, unit);
}
+struct eq_band_setting eq_defaults[EQ_NUM_BANDS] = {
+ { 32, 7, 0 },
+ { 64, 10, 0 },
+ { 125, 10, 0 },
+ { 250, 10, 0 },
+ { 500, 10, 0 },
+ { 1000, 10, 0 },
+ { 2000, 10, 0 },
+ { 4000, 10, 0 },
+ { 8000, 10, 0 },
+ { 16000, 7, 0 },
+};
+
+static void eq_load_from_cfg(void *setting, char *value)
+{
+ struct eq_band_setting *eq = setting;
+ char *val_end, *end;
+
+ val_end = value + strlen(value);
+
+ /* cutoff/center */
+ end = strchr(value, ',');
+ if (!end) return;
+ *end = '\0';
+ eq->cutoff = atoi(value);
+
+ /* q */
+ value = end + 1;
+ if (value > val_end) return;
+ end = strchr(value, ',');
+ if (!end) return;
+ *end = '\0';
+ eq->q = atoi(value);
+
+ /* gain */
+ value = end + 1;
+ if (value > val_end) return;
+ eq->gain = atoi(value);
+}
+
+static char* eq_write_to_cfg(void *setting, char *buf, int buf_len)
+{
+ struct eq_band_setting *eq = setting;
+
+ snprintf(buf, buf_len, "%d, %d, %d", eq->cutoff, eq->q, eq->gain);
+ return buf;
+}
+
+static bool eq_is_changed(void *setting, void *defaultval)
+{
+ struct eq_band_setting *eq = setting;
+
+ return memcmp(eq, defaultval, sizeof(struct eq_band_setting));
+}
+
+static void eq_set_default(void* setting, void* defaultval)
+{
+ memcpy(setting, defaultval, sizeof(struct eq_band_setting));
+}
+
#endif
#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F)
static void set_mdb_enable(bool value)
@@ -1435,103 +1495,122 @@ const struct settings_list settings[] = {
/* equalizer */
OFFON_SETTING(F_EQSETTING, eq_enabled, LANG_EQUALIZER_ENABLED, false,
"eq enabled", NULL),
+
INT_SETTING_NOWRAP(F_EQSETTING, eq_precut, LANG_EQUALIZER_PRECUT, 0,
"eq precut", UNIT_DB, 0, 240, 5, eq_precut_format,
get_precut_talkid, dsp_set_eq_precut),
+
/* 0..32768 Hz */
- INT_SETTING_NOWRAP(F_EQSETTING, eq_band_settings[0].cutoff, LANG_EQUALIZER_BAND_CUTOFF,
+ INT_SETTING_NOWRAP(F_DEPRECATED|F_EQSETTING, eq_band_settings[0].cutoff, LANG_EQUALIZER_BAND_CUTOFF,
32, "eq band 0 cutoff", UNIT_HERTZ, EQ_CUTOFF_MIN,
EQ_CUTOFF_MAX, EQ_CUTOFF_STEP, NULL, NULL, NULL),
- INT_SETTING_NOWRAP(F_EQSETTING, eq_band_settings[1].cutoff, LANG_EQUALIZER_BAND_CENTER,
+ INT_SETTING_NOWRAP(F_DEPRECATED|F_EQSETTING, eq_band_settings[1].cutoff, LANG_EQUALIZER_BAND_CENTER,
64, "eq band 1 cutoff", UNIT_HERTZ, EQ_CUTOFF_MIN,
EQ_CUTOFF_MAX, EQ_CUTOFF_STEP, NULL, NULL, NULL),
- INT_SETTING_NOWRAP(F_EQSETTING, eq_band_settings[2].cutoff, LANG_EQUALIZER_BAND_CENTER,
+ INT_SETTING_NOWRAP(F_DEPRECATED|F_EQSETTING, eq_band_settings[2].cutoff, LANG_EQUALIZER_BAND_CENTER,
125, "eq band 2 cutoff", UNIT_HERTZ, EQ_CUTOFF_MIN,
EQ_CUTOFF_MAX, EQ_CUTOFF_STEP, NULL, NULL, NULL),
- INT_SETTING_NOWRAP(F_EQSETTING, eq_band_settings[3].cutoff, LANG_EQUALIZER_BAND_CENTER,
+ INT_SETTING_NOWRAP(F_DEPRECATED|F_EQSETTING, eq_band_settings[3].cutoff, LANG_EQUALIZER_BAND_CENTER,
250, "eq band 3 cutoff", UNIT_HERTZ, EQ_CUTOFF_MIN,
EQ_CUTOFF_MAX, EQ_CUTOFF_STEP, NULL, NULL, NULL),
- INT_SETTING_NOWRAP(F_EQSETTING, eq_band_settings[4].cutoff, LANG_EQUALIZER_BAND_CENTER,
+ INT_SETTING_NOWRAP(F_DEPRECATED|F_EQSETTING, eq_band_settings[4].cutoff, LANG_EQUALIZER_BAND_CENTER,
500, "eq band 4 cutoff", UNIT_HERTZ, EQ_CUTOFF_MIN,
EQ_CUTOFF_MAX, EQ_CUTOFF_STEP, NULL, NULL, NULL),
- INT_SETTING_NOWRAP(F_EQSETTING, eq_band_settings[5].cutoff, LANG_EQUALIZER_BAND_CENTER,
+ INT_SETTING_NOWRAP(F_DEPRECATED|F_EQSETTING, eq_band_settings[5].cutoff, LANG_EQUALIZER_BAND_CENTER,
1000, "eq band 5 cutoff", UNIT_HERTZ, EQ_CUTOFF_MIN,
EQ_CUTOFF_MAX, EQ_CUTOFF_STEP, NULL, NULL, NULL),
- INT_SETTING_NOWRAP(F_EQSETTING, eq_band_settings[6].cutoff, LANG_EQUALIZER_BAND_CENTER,
+ INT_SETTING_NOWRAP(F_DEPRECATED|F_EQSETTING, eq_band_settings[6].cutoff, LANG_EQUALIZER_BAND_CENTER,
2000, "eq band 6 cutoff", UNIT_HERTZ, EQ_CUTOFF_MIN,
EQ_CUTOFF_MAX, EQ_CUTOFF_STEP, NULL, NULL, NULL),
- INT_SETTING_NOWRAP(F_EQSETTING, eq_band_settings[7].cutoff, LANG_EQUALIZER_BAND_CENTER,
+ INT_SETTING_NOWRAP(F_DEPRECATED|F_EQSETTING, eq_band_settings[7].cutoff, LANG_EQUALIZER_BAND_CENTER,
4000, "eq band 7 cutoff", UNIT_HERTZ, EQ_CUTOFF_MIN,
EQ_CUTOFF_MAX, EQ_CUTOFF_STEP, NULL, NULL, NULL),
- INT_SETTING_NOWRAP(F_EQSETTING, eq_band_settings[8].cutoff, LANG_EQUALIZER_BAND_CENTER,
+ INT_SETTING_NOWRAP(F_DEPRECATED|F_EQSETTING, eq_band_settings[8].cutoff, LANG_EQUALIZER_BAND_CENTER,
8000, "eq band 8 cutoff", UNIT_HERTZ, EQ_CUTOFF_MIN,
EQ_CUTOFF_MAX, EQ_CUTOFF_STEP, NULL, NULL, NULL),
- INT_SETTING_NOWRAP(F_EQSETTING, eq_band_settings[9].cutoff, LANG_EQUALIZER_BAND_CUTOFF,
+ INT_SETTING_NOWRAP(F_DEPRECATED|F_EQSETTING, eq_band_settings[9].cutoff, LANG_EQUALIZER_BAND_CUTOFF,
16000, "eq band 9 cutoff", UNIT_HERTZ, EQ_CUTOFF_MIN,
EQ_CUTOFF_MAX, EQ_CUTOFF_STEP, NULL, NULL, NULL),
/* 0..64 (or 0.0 to 6.4) */
- INT_SETTING_NOWRAP(F_EQSETTING, eq_band_settings[0].q, LANG_EQUALIZER_BAND_Q, 7,
+ INT_SETTING_NOWRAP(F_DEPRECATED|F_EQSETTING, eq_band_settings[0].q, LANG_EQUALIZER_BAND_Q, 7,
"eq band 0 q", UNIT_INT, EQ_Q_MIN, EQ_Q_MAX, EQ_Q_STEP,
eq_q_format, get_dec_talkid, NULL),
- INT_SETTING_NOWRAP(F_EQSETTING, eq_band_settings[1].q, LANG_EQUALIZER_BAND_Q, 10,
+ INT_SETTING_NOWRAP(F_DEPRECATED|F_EQSETTING, eq_band_settings[1].q, LANG_EQUALIZER_BAND_Q, 10,
"eq band 1 q", UNIT_INT, EQ_Q_MIN, EQ_Q_MAX, EQ_Q_STEP,
eq_q_format, get_dec_talkid, NULL),
- INT_SETTING_NOWRAP(F_EQSETTING, eq_band_settings[2].q, LANG_EQUALIZER_BAND_Q, 10,
+ INT_SETTING_NOWRAP(F_DEPRECATED|F_EQSETTING, eq_band_settings[2].q, LANG_EQUALIZER_BAND_Q, 10,
"eq band 2 q", UNIT_INT, EQ_Q_MIN, EQ_Q_MAX, EQ_Q_STEP,
eq_q_format, get_dec_talkid, NULL),
- INT_SETTING_NOWRAP(F_EQSETTING, eq_band_settings[3].q, LANG_EQUALIZER_BAND_Q, 10,
+ INT_SETTING_NOWRAP(F_DEPRECATED|F_EQSETTING, eq_band_settings[3].q, LANG_EQUALIZER_BAND_Q, 10,
"eq band 3 q", UNIT_INT, EQ_Q_MIN, EQ_Q_MAX, EQ_Q_STEP,
eq_q_format, get_dec_talkid, NULL),
- INT_SETTING_NOWRAP(F_EQSETTING, eq_band_settings[4].q, LANG_EQUALIZER_BAND_Q, 10,
+ INT_SETTING_NOWRAP(F_DEPRECATED|F_EQSETTING, eq_band_settings[4].q, LANG_EQUALIZER_BAND_Q, 10,
"eq band 4 q", UNIT_INT, EQ_Q_MIN, EQ_Q_MAX, EQ_Q_STEP,
eq_q_format, get_dec_talkid, NULL),
- INT_SETTING_NOWRAP(F_EQSETTING, eq_band_settings[5].q, LANG_EQUALIZER_BAND_Q, 10,
+ INT_SETTING_NOWRAP(F_DEPRECATED|F_EQSETTING, eq_band_settings[5].q, LANG_EQUALIZER_BAND_Q, 10,
"eq band 5 q", UNIT_INT, EQ_Q_MIN, EQ_Q_MAX, EQ_Q_STEP,
eq_q_format, get_dec_talkid, NULL),
- INT_SETTING_NOWRAP(F_EQSETTING, eq_band_settings[6].q, LANG_EQUALIZER_BAND_Q, 10,
+ INT_SETTING_NOWRAP(F_DEPRECATED|F_EQSETTING, eq_band_settings[6].q, LANG_EQUALIZER_BAND_Q, 10,
"eq band 6 q", UNIT_INT, EQ_Q_MIN, EQ_Q_MAX, EQ_Q_STEP,
eq_q_format, get_dec_talkid, NULL),
- INT_SETTING_NOWRAP(F_EQSETTING, eq_band_settings[7].q, LANG_EQUALIZER_BAND_Q, 10,
+ INT_SETTING_NOWRAP(F_DEPRECATED|F_EQSETTING, eq_band_settings[7].q, LANG_EQUALIZER_BAND_Q, 10,
"eq band 7 q", UNIT_INT, EQ_Q_MIN, EQ_Q_MAX, EQ_Q_STEP,
eq_q_format, get_dec_talkid, NULL),
- INT_SETTING_NOWRAP(F_EQSETTING, eq_band_settings[8].q, LANG_EQUALIZER_BAND_Q, 10,
+ INT_SETTING_NOWRAP(F_DEPRECATED|F_EQSETTING, eq_band_settings[8].q, LANG_EQUALIZER_BAND_Q, 10,
"eq band 8 q", UNIT_INT, EQ_Q_MIN, EQ_Q_MAX, EQ_Q_STEP,
eq_q_format, get_dec_talkid, NULL),
- INT_SETTING_NOWRAP(F_EQSETTING, eq_band_settings[9].q, LANG_EQUALIZER_BAND_Q, 7,
+ INT_SETTING_NOWRAP(F_DEPRECATED|F_EQSETTING, eq_band_settings[9].q, LANG_EQUALIZER_BAND_Q, 7,
"eq band 9 q", UNIT_INT, EQ_Q_MIN, EQ_Q_MAX, EQ_Q_STEP,
eq_q_format, get_dec_talkid, NULL),
/* -240..240 (or -24db to +24db) */
- INT_SETTING_NOWRAP(F_EQSETTING, eq_band_settings[0].gain, LANG_GAIN, 0,
+ INT_SETTING_NOWRAP(F_DEPRECATED|F_EQSETTING, eq_band_settings[0].gain, LANG_GAIN, 0,
"eq band 0 gain", UNIT_DB, EQ_GAIN_MIN, EQ_GAIN_MAX,
EQ_GAIN_STEP, db_format, get_dec_talkid, NULL),
- INT_SETTING_NOWRAP(F_EQSETTING, eq_band_settings[1].gain, LANG_GAIN, 0,
+ INT_SETTING_NOWRAP(F_DEPRECATED|F_EQSETTING, eq_band_settings[1].gain, LANG_GAIN, 0,
"eq band 1 gain", UNIT_DB, EQ_GAIN_MIN, EQ_GAIN_MAX,
EQ_GAIN_STEP, db_format, get_dec_talkid, NULL),
- INT_SETTING_NOWRAP(F_EQSETTING, eq_band_settings[2].gain, LANG_GAIN, 0,
+ INT_SETTING_NOWRAP(F_DEPRECATED|F_EQSETTING, eq_band_settings[2].gain, LANG_GAIN, 0,
"eq band 2 gain", UNIT_DB, EQ_GAIN_MIN, EQ_GAIN_MAX,
EQ_GAIN_STEP, db_format, get_dec_talkid, NULL),
- INT_SETTING_NOWRAP(F_EQSETTING, eq_band_settings[3].gain, LANG_GAIN, 0,
+ INT_SETTING_NOWRAP(F_DEPRECATED|F_EQSETTING, eq_band_settings[3].gain, LANG_GAIN, 0,
"eq band 3 gain", UNIT_DB, EQ_GAIN_MIN, EQ_GAIN_MAX,
EQ_GAIN_STEP, db_format, get_dec_talkid, NULL),
- INT_SETTING_NOWRAP(F_EQSETTING, eq_band_settings[4].gain, LANG_GAIN, 0,
+ INT_SETTING_NOWRAP(F_DEPRECATED|F_EQSETTING, eq_band_settings[4].gain, LANG_GAIN, 0,
"eq band 4 gain", UNIT_DB, EQ_GAIN_MIN, EQ_GAIN_MAX,
EQ_GAIN_STEP, db_format, get_dec_talkid, NULL),
- INT_SETTING_NOWRAP(F_EQSETTING, eq_band_settings[5].gain, LANG_GAIN, 0,
+ INT_SETTING_NOWRAP(F_DEPRECATED|F_EQSETTING, eq_band_settings[5].gain, LANG_GAIN, 0,
"eq band 5 gain", UNIT_DB, EQ_GAIN_MIN, EQ_GAIN_MAX,
EQ_GAIN_STEP, db_format, get_dec_talkid, NULL),
- INT_SETTING_NOWRAP(F_EQSETTING, eq_band_settings[6].gain, LANG_GAIN, 0,
+ INT_SETTING_NOWRAP(F_DEPRECATED|F_EQSETTING, eq_band_settings[6].gain, LANG_GAIN, 0,
"eq band 6 gain", UNIT_DB, EQ_GAIN_MIN, EQ_GAIN_MAX,
EQ_GAIN_STEP, db_format, get_dec_talkid, NULL),
- INT_SETTING_NOWRAP(F_EQSETTING, eq_band_settings[7].gain, LANG_GAIN, 0,
+ INT_SETTING_NOWRAP(F_DEPRECATED|F_EQSETTING, eq_band_settings[7].gain, LANG_GAIN, 0,
"eq band 7 gain", UNIT_DB, EQ_GAIN_MIN, EQ_GAIN_MAX,
EQ_GAIN_STEP, db_format, get_dec_talkid, NULL),
- INT_SETTING_NOWRAP(F_EQSETTING, eq_band_settings[8].gain, LANG_GAIN, 0,
+ INT_SETTING_NOWRAP(F_DEPRECATED|F_EQSETTING, eq_band_settings[8].gain, LANG_GAIN, 0,
"eq band 8 gain", UNIT_DB, EQ_GAIN_MIN, EQ_GAIN_MAX,
EQ_GAIN_STEP, db_format, get_dec_talkid, NULL),
- INT_SETTING_NOWRAP(F_EQSETTING, eq_band_settings[9].gain, LANG_GAIN, 0,
+ INT_SETTING_NOWRAP(F_DEPRECATED|F_EQSETTING, eq_band_settings[9].gain, LANG_GAIN, 0,
"eq band 9 gain", UNIT_DB, EQ_GAIN_MIN, EQ_GAIN_MAX,
EQ_GAIN_STEP, db_format, get_dec_talkid, NULL),
+#define EQ_BAND(id, string) \
+ CUSTOM_SETTING(F_EQSETTING, eq_band_settings[id], -1, \
+ &eq_defaults[id], string, \
+ eq_load_from_cfg, eq_write_to_cfg, \
+ eq_is_changed, eq_set_default)
+ EQ_BAND(0, "eq low shelf filter"),
+ EQ_BAND(1, "eq peak filter 1"),
+ EQ_BAND(2, "eq peak filter 2"),
+ EQ_BAND(3, "eq peak filter 3"),
+ EQ_BAND(4, "eq peak filter 4"),
+ EQ_BAND(5, "eq peak filter 5"),
+ EQ_BAND(6, "eq peak filter 6"),
+ EQ_BAND(7, "eq peak filter 7"),
+ EQ_BAND(8, "eq peak filter 8"),
+ EQ_BAND(9, "eq high shelf filter"),
+#undef EQ_BAND
+
/* dithering */
OFFON_SETTING(F_SOUNDSETTING, dithering_enabled, LANG_DITHERING, false,
"dithering enabled", dsp_dither_enable),
diff --git a/apps/settings_list.h b/apps/settings_list.h
index 5cefcf6dc2..66b20ca6ca 100644
--- a/apps/settings_list.h
+++ b/apps/settings_list.h
@@ -152,10 +152,10 @@ struct custom_setting {
#define F_PADTITLE 0x800 /* pad the title with spaces to force it to scroll */
#define F_NO_WRAP 0x1000 /* used if the list should not wrap */
-#define F_BANFROMQS 0x80000000 /* ban the setting from the quickscreen items */
-
+#define F_BANFROMQS 0x80000000 /* ban the setting from the quickscreen items */
+#define F_DEPRECATED 0x40000000 /* DEPRECATED setting, don't write to .cfg */
struct settings_list {
- uint32_t flags; /* B___ _SER TFFF NNN_ _ATW PTVC IFRB STTT */
+ uint32_t flags; /* BD__ _SER TFFF NNN_ _ATW PTVC IFRB STTT */
void *setting;
int lang_id; /* -1 for none */
union storage_type default_val;
diff --git a/lib/rbcodec/dsp/eq.h b/lib/rbcodec/dsp/eq.h
index 9b670d748a..9bb5f91ca5 100644
--- a/lib/rbcodec/dsp/eq.h
+++ b/lib/rbcodec/dsp/eq.h
@@ -21,10 +21,7 @@
#ifndef _EQ_H
#define _EQ_H
-/* => support from 3 to 32 bands, inclusive
- * Menus and screens must be updated to support changing this from 5
- * without modifying other stuff (remove comment when this is no longer
- * true :-) */
+/* => support from 3 to 32 bands */
#define EQ_NUM_BANDS 10
struct eq_band_setting
diff --git a/lib/rbcodec/dsp/eqs/Acoustic.cfg b/lib/rbcodec/dsp/eqs/Acoustic.cfg
index fd30094119..72dbc48ae3 100644
--- a/lib/rbcodec/dsp/eqs/Acoustic.cfg
+++ b/lib/rbcodec/dsp/eqs/Acoustic.cfg
@@ -1,32 +1,12 @@
eq enabled: on
eq precut: 45
-eq band 0 cutoff: 32
-eq band 0 q: 7
-eq band 0 gain: 45
-eq band 1 cutoff: 64
-eq band 1 q: 10
-eq band 1 gain: 45
-eq band 2 cutoff: 125
-eq band 2 q: 10
-eq band 2 gain: 10
-eq band 3 cutoff: 250
-eq band 3 q: 10
-eq band 3 gain: 10
-eq band 4 cutoff: 500
-eq band 4 q: 10
-eq band 4 gain: 15
-eq band 5 cutoff: 1000
-eq band 5 q: 10
-eq band 5 gain: 15
-eq band 6 cutoff: 2000
-eq band 6 q: 10
-eq band 6 gain: 30
-eq band 7 cutoff: 4000
-eq band 7 q: 10
-eq band 7 gain: 30
-eq band 8 cutoff: 8000
-eq band 8 q: 10
-eq band 8 gain: 20
-eq band 9 cutoff: 16000
-eq band 9 q: 7
-eq band 9 gain: 20
+eq low shelf filter: 32, 7, 45
+eq peak filter 1: 64, 10, 45
+eq peak filter 2: 125, 10, 10
+eq peak filter 3: 250, 10, 10
+eq peak filter 4: 500, 10, 15
+eq peak filter 5: 1000, 10, 15
+eq peak filter 6: 2000, 10, 30
+eq peak filter 7: 4000, 10, 30
+eq peak filter 8: 8000, 10, 20
+eq high shelf filter: 16000, 7, 20
diff --git a/lib/rbcodec/dsp/eqs/Bass.cfg b/lib/rbcodec/dsp/eqs/Bass.cfg
index 3f122f1343..162874ef94 100644
--- a/lib/rbcodec/dsp/eqs/Bass.cfg
+++ b/lib/rbcodec/dsp/eqs/Bass.cfg
@@ -1,32 +1,12 @@
eq enabled: on
eq precut: 50
-eq band 0 cutoff: 32
-eq band 0 q: 7
-eq band 0 gain: 50
-eq band 1 cutoff: 64
-eq band 1 q: 10
-eq band 1 gain: 50
-eq band 2 cutoff: 125
-eq band 2 q: 10
-eq band 2 gain: 35
-eq band 3 cutoff: 250
-eq band 3 q: 10
-eq band 3 gain: 35
-eq band 4 cutoff: 500
-eq band 4 q: 10
-eq band 4 gain: 15
-eq band 5 cutoff: 1000
-eq band 5 q: 10
-eq band 5 gain: 15
-eq band 6 cutoff: 2000
-eq band 6 q: 10
-eq band 6 gain: 5
-eq band 7 cutoff: 4000
-eq band 7 q: 10
-eq band 7 gain: 5
-eq band 8 cutoff: 8000
-eq band 8 q: 10
-eq band 8 gain: -5
-eq band 9 cutoff: 16000
-eq band 9 q: 7
-eq band 9 gain: -5
+eq low shelf filter: 32, 7, 50
+eq peak filter 1: 64, 10, 50
+eq peak filter 2: 125, 10, 35
+eq peak filter 3: 250, 10, 35
+eq peak filter 4: 500, 10, 15
+eq peak filter 5: 1000, 10, 15
+eq peak filter 6: 2000, 10, 5
+eq peak filter 7: 4000, 10, 5
+eq peak filter 8: 8000, 10, -5
+eq high shelf filter: 16000, 7, -5
diff --git a/lib/rbcodec/dsp/eqs/Classical.cfg b/lib/rbcodec/dsp/eqs/Classical.cfg
index ba95adb4f8..956cb1ecd1 100644
--- a/lib/rbcodec/dsp/eqs/Classical.cfg
+++ b/lib/rbcodec/dsp/eqs/Classical.cfg
@@ -1,32 +1,12 @@
eq enabled: on
eq precut: 0
-eq band 0 cutoff: 32
-eq band 0 q: 7
-eq band 0 gain: 0
-eq band 1 cutoff: 64
-eq band 1 q: 10
-eq band 1 gain: 0
-eq band 2 cutoff: 125
-eq band 2 q: 10
-eq band 2 gain: 0
-eq band 3 cutoff: 250
-eq band 3 q: 10
-eq band 3 gain: 0
-eq band 4 cutoff: 500
-eq band 4 q: 10
-eq band 4 gain: 0
-eq band 5 cutoff: 1000
-eq band 5 q: 10
-eq band 5 gain: 0
-eq band 6 cutoff: 2000
-eq band 6 q: 10
-eq band 6 gain: 0
-eq band 7 cutoff: 4000
-eq band 7 q: 10
-eq band 7 gain: -70
-eq band 8 cutoff: 8000
-eq band 8 q: 10
-eq band 8 gain: -70
-eq band 9 cutoff: 16000
-eq band 9 q: 7
-eq band 9 gain: -70
+eq low shelf filter: 32, 7, 0
+eq peak filter 1: 64, 10, 0
+eq peak filter 2: 125, 10, 0
+eq peak filter 3: 250, 10, 0
+eq peak filter 4: 500, 10, 0
+eq peak filter 5: 1000, 10, 0
+eq peak filter 6: 2000, 10, 0
+eq peak filter 7: 4000, 10, -70
+eq peak filter 8: 8000, 10, -70
+eq high shelf filter: 16000, 7, -70
diff --git a/lib/rbcodec/dsp/eqs/Club.cfg b/lib/rbcodec/dsp/eqs/Club.cfg
index 5e20ca2fe7..f9c350298f 100644
--- a/lib/rbcodec/dsp/eqs/Club.cfg
+++ b/lib/rbcodec/dsp/eqs/Club.cfg
@@ -1,32 +1,12 @@
eq enabled: on
eq precut: 80
-eq band 0 cutoff: 32
-eq band 0 q: 7
-eq band 0 gain: 0
-eq band 1 cutoff: 64
-eq band 1 q: 10
-eq band 1 gain: 0
-eq band 2 cutoff: 125
-eq band 2 q: 10
-eq band 2 gain: 80
-eq band 3 cutoff: 250
-eq band 3 q: 10
-eq band 3 gain: 55
-eq band 4 cutoff: 500
-eq band 4 q: 10
-eq band 4 gain: 55
-eq band 5 cutoff: 1000
-eq band 5 q: 10
-eq band 5 gain: 55
-eq band 6 cutoff: 2000
-eq band 6 q: 10
-eq band 6 gain: 30
-eq band 7 cutoff: 4000
-eq band 7 q: 10
-eq band 7 gain: 0
-eq band 8 cutoff: 8000
-eq band 8 q: 10
-eq band 8 gain: 0
-eq band 9 cutoff: 16000
-eq band 9 q: 7
-eq band 9 gain: 0
+eq low shelf filter: 32, 7, 0
+eq peak filter 1: 64, 10, 0
+eq peak filter 2: 125, 10, 80
+eq peak filter 3: 250, 10, 55
+eq peak filter 4: 500, 10, 55
+eq peak filter 5: 1000, 10, 55
+eq peak filter 6: 2000, 10, 30
+eq peak filter 7: 4000, 10, 0
+eq peak filter 8: 8000, 10, 0
+eq high shelf filter: 16000, 7, 0
diff --git a/lib/rbcodec/dsp/eqs/Dance.cfg b/lib/rbcodec/dsp/eqs/Dance.cfg
index 6c262924f2..b387245aae 100644
--- a/lib/rbcodec/dsp/eqs/Dance.cfg
+++ b/lib/rbcodec/dsp/eqs/Dance.cfg
@@ -1,32 +1,12 @@
eq enabled: on
eq precut: 95
-eq band 0 cutoff: 32
-eq band 0 q: 7
-eq band 0 gain: 95
-eq band 1 cutoff: 64
-eq band 1 q: 10
-eq band 1 gain: 70
-eq band 2 cutoff: 125
-eq band 2 q: 10
-eq band 2 gain: 25
-eq band 3 cutoff: 250
-eq band 3 q: 10
-eq band 3 gain: 0
-eq band 4 cutoff: 500
-eq band 4 q: 10
-eq band 4 gain: 0
-eq band 5 cutoff: 1000
-eq band 5 q: 10
-eq band 5 gain: -55
-eq band 6 cutoff: 2000
-eq band 6 q: 10
-eq band 6 gain: -70
-eq band 7 cutoff: 4000
-eq band 7 q: 10
-eq band 7 gain: -70
-eq band 8 cutoff: 8000
-eq band 8 q: 10
-eq band 8 gain: 0
-eq band 9 cutoff: 16000
-eq band 9 q: 7
-eq band 9 gain: 0
+eq low shelf filter: 32, 7, 95
+eq peak filter 1: 64, 10, 70
+eq peak filter 2: 125, 10, 25
+eq peak filter 3: 250, 10, 0
+eq peak filter 4: 500, 10, 0
+eq peak filter 5: 1000, 10, -55
+eq peak filter 6: 2000, 10, -70
+eq peak filter 7: 4000, 10, -70
+eq peak filter 8: 8000, 10, 0
+eq high shelf filter: 16000, 7, 0
diff --git a/lib/rbcodec/dsp/eqs/Default.cfg b/lib/rbcodec/dsp/eqs/Default.cfg
index c6579c7513..baf3c59069 100644
--- a/lib/rbcodec/dsp/eqs/Default.cfg
+++ b/lib/rbcodec/dsp/eqs/Default.cfg
@@ -1,32 +1,12 @@
eq enabled: off
eq precut: 0
-eq band 0 cutoff: 32
-eq band 0 q: 7
-eq band 0 gain: 0
-eq band 1 cutoff: 64
-eq band 1 q: 10
-eq band 1 gain: 0
-eq band 2 cutoff: 125
-eq band 2 q: 10
-eq band 2 gain: 0
-eq band 3 cutoff: 250
-eq band 3 q: 10
-eq band 3 gain: 0
-eq band 4 cutoff: 500
-eq band 4 q: 10
-eq band 4 gain: 0
-eq band 5 cutoff: 1000
-eq band 5 q: 10
-eq band 5 gain: 0
-eq band 6 cutoff: 2000
-eq band 6 q: 10
-eq band 6 gain: 0
-eq band 7 cutoff: 4000
-eq band 7 q: 10
-eq band 7 gain: 0
-eq band 8 cutoff: 8000
-eq band 8 q: 10
-eq band 8 gain: 0
-eq band 9 cutoff: 16000
-eq band 9 q: 7
-eq band 9 gain: 0
+eq low shelf filter: 32, 7, 0
+eq peak filter 1: 64, 10, 0
+eq peak filter 2: 125, 10, 0
+eq peak filter 3: 250, 10, 0
+eq peak filter 4: 500, 10, 0
+eq peak filter 5: 1000, 10, 0
+eq peak filter 6: 2000, 10, 0
+eq peak filter 7: 4000, 10, 0
+eq peak filter 8: 8000, 10, 0
+eq high shelf filter: 16000, 7, 0
diff --git a/lib/rbcodec/dsp/eqs/Disco.cfg b/lib/rbcodec/dsp/eqs/Disco.cfg
index 12f4b36af5..c43a29e798 100644
--- a/lib/rbcodec/dsp/eqs/Disco.cfg
+++ b/lib/rbcodec/dsp/eqs/Disco.cfg
@@ -1,32 +1,12 @@
eq enabled: on
eq precut: 45
-eq band 0 cutoff: 32
-eq band 0 q: 7
-eq band 0 gain: 30
-eq band 1 cutoff: 64
-eq band 1 q: 10
-eq band 1 gain: 30
-eq band 2 cutoff: 125
-eq band 2 q: 10
-eq band 2 gain: 10
-eq band 3 cutoff: 250
-eq band 3 q: 10
-eq band 3 gain: 10
-eq band 4 cutoff: 500
-eq band 4 q: 10
-eq band 4 gain: 45
-eq band 5 cutoff: 1000
-eq band 5 q: 10
-eq band 5 gain: 45
-eq band 6 cutoff: 2000
-eq band 6 q: 10
-eq band 6 gain: 25
-eq band 7 cutoff: 4000
-eq band 7 q: 10
-eq band 7 gain: 25
-eq band 8 cutoff: 8000
-eq band 8 q: 10
-eq band 8 gain: 10
-eq band 9 cutoff: 16000
-eq band 9 q: 7
-eq band 9 gain: 10
+eq low shelf filter: 32, 7, 30
+eq peak filter 1: 64, 10, 30
+eq peak filter 2: 125, 10, 10
+eq peak filter 3: 250, 10, 10
+eq peak filter 4: 500, 10, 45
+eq peak filter 5: 1000, 10, 45
+eq peak filter 6: 2000, 10, 25
+eq peak filter 7: 4000, 10, 25
+eq peak filter 8: 8000, 10, 10
+eq high shelf filter: 16000, 7, 10
diff --git a/lib/rbcodec/dsp/eqs/Electronic.cfg b/lib/rbcodec/dsp/eqs/Electronic.cfg
index e710706607..545a2161de 100644
--- a/lib/rbcodec/dsp/eqs/Electronic.cfg
+++ b/lib/rbcodec/dsp/eqs/Electronic.cfg
@@ -1,32 +1,12 @@
eq enabled: on
eq precut: 55
-eq band 0 cutoff: 32
-eq band 0 q: 7
-eq band 0 gain: 45
-eq band 1 cutoff: 64
-eq band 1 q: 10
-eq band 1 gain: 45
-eq band 2 cutoff: 125
-eq band 2 q: 10
-eq band 2 gain: 5
-eq band 3 cutoff: 250
-eq band 3 q: 10
-eq band 3 gain: 5
-eq band 4 cutoff: 500
-eq band 4 q: 10
-eq band 4 gain: 25
-eq band 5 cutoff: 1000
-eq band 5 q: 10
-eq band 5 gain: 25
-eq band 6 cutoff: 2000
-eq band 6 q: 10
-eq band 6 gain: 15
-eq band 7 cutoff: 4000
-eq band 7 q: 10
-eq band 7 gain: 15
-eq band 8 cutoff: 8000
-eq band 8 q: 10
-eq band 8 gain: 0
-eq band 9 cutoff: 16000
-eq band 9 q: 7
-eq band 9 gain: 55
+eq low shelf filter: 32, 7, 45
+eq peak filter 1: 64, 10, 45
+eq peak filter 2: 125, 10, 5
+eq peak filter 3: 250, 10, 5
+eq peak filter 4: 500, 10, 25
+eq peak filter 5: 1000, 10, 25
+eq peak filter 6: 2000, 10, 15
+eq peak filter 7: 4000, 10, 15
+eq peak filter 8: 8000, 10, 0
+eq high shelf filter: 16000, 7, 55
diff --git a/lib/rbcodec/dsp/eqs/Flat.cfg b/lib/rbcodec/dsp/eqs/Flat.cfg
index 9e52cb86e6..7e2cc32bdd 100644
--- a/lib/rbcodec/dsp/eqs/Flat.cfg
+++ b/lib/rbcodec/dsp/eqs/Flat.cfg
@@ -1,32 +1,12 @@
eq enabled: on
eq precut: 0
-eq band 0 cutoff: 32
-eq band 0 q: 7
-eq band 0 gain: 0
-eq band 1 cutoff: 64
-eq band 1 q: 10
-eq band 1 gain: 0
-eq band 2 cutoff: 125
-eq band 2 q: 10
-eq band 2 gain: 0
-eq band 3 cutoff: 250
-eq band 3 q: 10
-eq band 3 gain: 0
-eq band 4 cutoff: 500
-eq band 4 q: 10
-eq band 4 gain: 0
-eq band 5 cutoff: 1000
-eq band 5 q: 10
-eq band 5 gain: 0
-eq band 6 cutoff: 2000
-eq band 6 q: 10
-eq band 6 gain: 0
-eq band 7 cutoff: 4000
-eq band 7 q: 10
-eq band 7 gain: 0
-eq band 8 cutoff: 8000
-eq band 8 q: 10
-eq band 8 gain: 0
-eq band 9 cutoff: 16000
-eq band 9 q: 7
-eq band 9 gain: 0
+eq low shelf filter: 32, 7, 0
+eq peak filter 1: 64, 10, 0
+eq peak filter 2: 125, 10, 0
+eq peak filter 3: 250, 10, 0
+eq peak filter 4: 500, 10, 0
+eq peak filter 5: 1000, 10, 0
+eq peak filter 6: 2000, 10, 0
+eq peak filter 7: 4000, 10, 0
+eq peak filter 8: 8000, 10, 0
+eq high shelf filter: 16000, 7, 0
diff --git a/lib/rbcodec/dsp/eqs/Headphones.cfg b/lib/rbcodec/dsp/eqs/Headphones.cfg
index 0720a599d1..27d038cce6 100644
--- a/lib/rbcodec/dsp/eqs/Headphones.cfg
+++ b/lib/rbcodec/dsp/eqs/Headphones.cfg
@@ -1,32 +1,12 @@
eq enabled: on
eq precut: 145
-eq band 0 cutoff: 32
-eq band 0 q: 7
-eq band 0 gain: 50
-eq band 1 cutoff: 64
-eq band 1 q: 10
-eq band 1 gain: 110
-eq band 2 cutoff: 125
-eq band 2 q: 10
-eq band 2 gain: 55
-eq band 3 cutoff: 250
-eq band 3 q: 10
-eq band 3 gain: -30
-eq band 4 cutoff: 500
-eq band 4 q: 10
-eq band 4 gain: -25
-eq band 5 cutoff: 1000
-eq band 5 q: 10
-eq band 5 gain: 15
-eq band 6 cutoff: 2000
-eq band 6 q: 10
-eq band 6 gain: 50
-eq band 7 cutoff: 4000
-eq band 7 q: 10
-eq band 7 gain: 95
-eq band 8 cutoff: 8000
-eq band 8 q: 10
-eq band 8 gain: 130
-eq band 9 cutoff: 16000
-eq band 9 q: 7
-eq band 9 gain: 145
+eq low shelf filter: 32, 7, 50
+eq peak filter 1: 64, 10, 110
+eq peak filter 2: 125, 10, 55
+eq peak filter 3: 250, 10, -30
+eq peak filter 4: 500, 10, -25
+eq peak filter 5: 1000, 10, 15
+eq peak filter 6: 2000, 10, 50
+eq peak filter 7: 4000, 10, 95
+eq peak filter 8: 8000, 10, 130
+eq high shelf filter: 16000, 7, 145
diff --git a/lib/rbcodec/dsp/eqs/Hip-Hop.cfg b/lib/rbcodec/dsp/eqs/Hip-Hop.cfg
index 54f11fb364..fac476d3a0 100644
--- a/lib/rbcodec/dsp/eqs/Hip-Hop.cfg
+++ b/lib/rbcodec/dsp/eqs/Hip-Hop.cfg
@@ -1,32 +1,12 @@
eq enabled: on
eq precut: 65
-eq band 0 cutoff: 32
-eq band 0 q: 7
-eq band 0 gain: 65
-eq band 1 cutoff: 64
-eq band 1 q: 10
-eq band 1 gain: 65
-eq band 2 cutoff: 125
-eq band 2 q: 10
-eq band 2 gain: 25
-eq band 3 cutoff: 250
-eq band 3 q: 10
-eq band 3 gain: 25
-eq band 4 cutoff: 500
-eq band 4 q: 10
-eq band 4 gain: -10
-eq band 5 cutoff: 1000
-eq band 5 q: 10
-eq band 5 gain: -10
-eq band 6 cutoff: 2000
-eq band 6 q: 10
-eq band 6 gain: 15
-eq band 7 cutoff: 4000
-eq band 7 q: 10
-eq band 7 gain: 15
-eq band 8 cutoff: 8000
-eq band 8 q: 10
-eq band 8 gain: 35
-eq band 9 cutoff: 16000
-eq band 9 q: 7
-eq band 9 gain: 35
+eq low shelf filter: 32, 7, 65
+eq peak filter 1: 64, 10, 65
+eq peak filter 2: 125, 10, 25
+eq peak filter 3: 250, 10, 25
+eq peak filter 4: 500, 10, -10
+eq peak filter 5: 1000, 10, -10
+eq peak filter 6: 2000, 10, 15
+eq peak filter 7: 4000, 10, 15
+eq peak filter 8: 8000, 10, 35
+eq high shelf filter: 16000, 7, 35
diff --git a/lib/rbcodec/dsp/eqs/Jazz.cfg b/lib/rbcodec/dsp/eqs/Jazz.cfg
index 04c1e346cd..c57f1be9f5 100644
--- a/lib/rbcodec/dsp/eqs/Jazz.cfg
+++ b/lib/rbcodec/dsp/eqs/Jazz.cfg
@@ -1,32 +1,12 @@
eq enabled: on
eq precut: 60
-eq band 0 cutoff: 32
-eq band 0 q: 7
-eq band 0 gain: 40
-eq band 1 cutoff: 64
-eq band 1 q: 10
-eq band 1 gain: 40
-eq band 2 cutoff: 125
-eq band 2 q: 10
-eq band 2 gain: 15
-eq band 3 cutoff: 250
-eq band 3 q: 10
-eq band 3 gain: 15
-eq band 4 cutoff: 500
-eq band 4 q: 10
-eq band 4 gain: -25
-eq band 5 cutoff: 1000
-eq band 5 q: 10
-eq band 5 gain: -25
-eq band 6 cutoff: 2000
-eq band 6 q: 10
-eq band 6 gain: 5
-eq band 7 cutoff: 4000
-eq band 7 q: 10
-eq band 7 gain: 5
-eq band 8 cutoff: 8000
-eq band 8 q: 10
-eq band 8 gain: 60
-eq band 9 cutoff: 16000
-eq band 9 q: 7
-eq band 9 gain: 60
+eq low shelf filter: 32, 7, 40
+eq peak filter 1: 64, 10, 40
+eq peak filter 2: 125, 10, 15
+eq peak filter 3: 250, 10, 15
+eq peak filter 4: 500, 10, -25
+eq peak filter 5: 1000, 10, -25
+eq peak filter 6: 2000, 10, 5
+eq peak filter 7: 4000, 10, 5
+eq peak filter 8: 8000, 10, 60
+eq high shelf filter: 16000, 7, 60
diff --git a/lib/rbcodec/dsp/eqs/Live.cfg b/lib/rbcodec/dsp/eqs/Live.cfg
index 67585421f2..b4377a6ca1 100644
--- a/lib/rbcodec/dsp/eqs/Live.cfg
+++ b/lib/rbcodec/dsp/eqs/Live.cfg
@@ -1,32 +1,12 @@
eq enabled: on
eq precut: 55
-eq band 0 cutoff: 32
-eq band 0 q: 7
-eq band 0 gain: -50
-eq band 1 cutoff: 64
-eq band 1 q: 10
-eq band 1 gain: 0
-eq band 2 cutoff: 125
-eq band 2 q: 10
-eq band 2 gain: 40
-eq band 3 cutoff: 250
-eq band 3 q: 10
-eq band 3 gain: 55
-eq band 4 cutoff: 500
-eq band 4 q: 10
-eq band 4 gain: 55
-eq band 5 cutoff: 1000
-eq band 5 q: 10
-eq band 5 gain: 55
-eq band 6 cutoff: 2000
-eq band 6 q: 10
-eq band 6 gain: 40
-eq band 7 cutoff: 4000
-eq band 7 q: 10
-eq band 7 gain: 25
-eq band 8 cutoff: 8000
-eq band 8 q: 10
-eq band 8 gain: 25
-eq band 9 cutoff: 16000
-eq band 9 q: 7
-eq band 9 gain: 25
+eq low shelf filter: 32, 7, -50
+eq peak filter 1: 64, 10, 0
+eq peak filter 2: 125, 10, 40
+eq peak filter 3: 250, 10, 55
+eq peak filter 4: 500, 10, 55
+eq peak filter 5: 1000, 10, 55
+eq peak filter 6: 2000, 10, 40
+eq peak filter 7: 4000, 10, 25
+eq peak filter 8: 8000, 10, 25
+eq high shelf filter: 16000, 7, 25
diff --git a/lib/rbcodec/dsp/eqs/Lounge.cfg b/lib/rbcodec/dsp/eqs/Lounge.cfg
index cac40eb907..90510e16f6 100644
--- a/lib/rbcodec/dsp/eqs/Lounge.cfg
+++ b/lib/rbcodec/dsp/eqs/Lounge.cfg
@@ -1,32 +1,12 @@
eq enabled: on
eq precut: 20
-eq band 0 cutoff: 32
-eq band 0 q: 7
-eq band 0 gain: -25
-eq band 1 cutoff: 64
-eq band 1 q: 10
-eq band 1 gain: -25
-eq band 2 cutoff: 125
-eq band 2 q: 10
-eq band 2 gain: 5
-eq band 3 cutoff: 250
-eq band 3 q: 10
-eq band 3 gain: 5
-eq band 4 cutoff: 500
-eq band 4 q: 10
-eq band 4 gain: 20
-eq band 5 cutoff: 1000
-eq band 5 q: 10
-eq band 5 gain: 20
-eq band 6 cutoff: 2000
-eq band 6 q: 10
-eq band 6 gain: -15
-eq band 7 cutoff: 4000
-eq band 7 q: 10
-eq band 7 gain: -15
-eq band 8 cutoff: 8000
-eq band 8 q: 10
-eq band 8 gain: 15
-eq band 9 cutoff: 16000
-eq band 9 q: 7
-eq band 9 gain: 15
+eq low shelf filter: 32, 7, -25
+eq peak filter 1: 64, 10, -25
+eq peak filter 2: 125, 10, 5
+eq peak filter 3: 250, 10, 5
+eq peak filter 4: 500, 10, 20
+eq peak filter 5: 1000, 10, 20
+eq peak filter 6: 2000, 10, -15
+eq peak filter 7: 4000, 10, -15
+eq peak filter 8: 8000, 10, 15
+eq high shelf filter: 16000, 7, 15
diff --git a/lib/rbcodec/dsp/eqs/Party.cfg b/lib/rbcodec/dsp/eqs/Party.cfg
index 6f6001afc8..c97ae8d085 100644
--- a/lib/rbcodec/dsp/eqs/Party.cfg
+++ b/lib/rbcodec/dsp/eqs/Party.cfg
@@ -1,32 +1,12 @@
eq enabled: on
eq precut: 70
-eq band 0 cutoff: 32
-eq band 0 q: 7
-eq band 0 gain: 70
-eq band 1 cutoff: 64
-eq band 1 q: 10
-eq band 1 gain: 70
-eq band 2 cutoff: 125
-eq band 2 q: 10
-eq band 2 gain: 0
-eq band 3 cutoff: 250
-eq band 3 q: 10
-eq band 3 gain: 0
-eq band 4 cutoff: 500
-eq band 4 q: 10
-eq band 4 gain: 0
-eq band 5 cutoff: 1000
-eq band 5 q: 10
-eq band 5 gain: 0
-eq band 6 cutoff: 2000
-eq band 6 q: 10
-eq band 6 gain: 0
-eq band 7 cutoff: 4000
-eq band 7 q: 10
-eq band 7 gain: 0
-eq band 8 cutoff: 8000
-eq band 8 q: 10
-eq band 8 gain: 70
-eq band 9 cutoff: 16000
-eq band 9 q: 7
-eq band 9 gain: 70
+eq low shelf filter: 32, 7, 70
+eq peak filter 1: 64, 10, 70
+eq peak filter 2: 125, 10, 0
+eq peak filter 3: 250, 10, 0
+eq peak filter 4: 500, 10, 0
+eq peak filter 5: 1000, 10, 0
+eq peak filter 6: 2000, 10, 0
+eq peak filter 7: 4000, 10, 0
+eq peak filter 8: 8000, 10, 70
+eq high shelf filter: 16000, 7, 70
diff --git a/lib/rbcodec/dsp/eqs/Pop.cfg b/lib/rbcodec/dsp/eqs/Pop.cfg
index 2584065f06..cab887fb9f 100644
--- a/lib/rbcodec/dsp/eqs/Pop.cfg
+++ b/lib/rbcodec/dsp/eqs/Pop.cfg
@@ -1,32 +1,12 @@
eq enabled: on
eq precut: 80
-eq band 0 cutoff: 32
-eq band 0 q: 7
-eq band 0 gain: -15
-eq band 1 cutoff: 64
-eq band 1 q: 10
-eq band 1 gain: 50
-eq band 2 cutoff: 125
-eq band 2 q: 10
-eq band 2 gain: 70
-eq band 3 cutoff: 250
-eq band 3 q: 10
-eq band 3 gain: 80
-eq band 4 cutoff: 500
-eq band 4 q: 10
-eq band 4 gain: 55
-eq band 5 cutoff: 1000
-eq band 5 q: 10
-eq band 5 gain: 0
-eq band 6 cutoff: 2000
-eq band 6 q: 10
-eq band 6 gain: -25
-eq band 7 cutoff: 4000
-eq band 7 q: 10
-eq band 7 gain: -25
-eq band 8 cutoff: 8000
-eq band 8 q: 10
-eq band 8 gain: 15
-eq band 9 cutoff: 16000
-eq band 9 q: 7
-eq band 9 gain: 15
+eq low shelf filter: 32, 7, -15
+eq peak filter 1: 64, 10, 50
+eq peak filter 2: 125, 10, 70
+eq peak filter 3: 250, 10, 80
+eq peak filter 4: 500, 10, 55
+eq peak filter 5: 1000, 10, 0
+eq peak filter 6: 2000, 10, -25
+eq peak filter 7: 4000, 10, -25
+eq peak filter 8: 8000, 10, 15
+eq high shelf filter: 16000, 7, 15
diff --git a/lib/rbcodec/dsp/eqs/R&B.cfg b/lib/rbcodec/dsp/eqs/R&B.cfg
index 283e02ac9e..c521af9bcf 100644
--- a/lib/rbcodec/dsp/eqs/R&B.cfg
+++ b/lib/rbcodec/dsp/eqs/R&B.cfg
@@ -1,32 +1,12 @@
eq enabled: on
eq precut: 45
-eq band 0 cutoff: 32
-eq band 0 q: 7
-eq band 0 gain: 35
-eq band 1 cutoff: 64
-eq band 1 q: 10
-eq band 1 gain: 35
-eq band 2 cutoff: 125
-eq band 2 q: 10
-eq band 2 gain: 45
-eq band 3 cutoff: 250
-eq band 3 q: 10
-eq band 3 gain: 45
-eq band 4 cutoff: 500
-eq band 4 q: 10
-eq band 4 gain: 5
-eq band 5 cutoff: 1000
-eq band 5 q: 10
-eq band 5 gain: 5
-eq band 6 cutoff: 2000
-eq band 6 q: 10
-eq band 6 gain: 25
-eq band 7 cutoff: 4000
-eq band 7 q: 10
-eq band 7 gain: 25
-eq band 8 cutoff: 8000
-eq band 8 q: 10
-eq band 8 gain: 30
-eq band 9 cutoff: 16000
-eq band 9 q: 7
-eq band 9 gain: 30
+eq low shelf filter: 32, 7, 35
+eq peak filter 1: 64, 10, 35
+eq peak filter 2: 125, 10, 45
+eq peak filter 3: 250, 10, 45
+eq peak filter 4: 500, 10, 5
+eq peak filter 5: 1000, 10, 5
+eq peak filter 6: 2000, 10, 25
+eq peak filter 7: 4000, 10, 25
+eq peak filter 8: 8000, 10, 30
+eq high shelf filter: 16000, 7, 30
diff --git a/lib/rbcodec/dsp/eqs/Reggae.cfg b/lib/rbcodec/dsp/eqs/Reggae.cfg
index 11def53612..9137b60491 100644
--- a/lib/rbcodec/dsp/eqs/Reggae.cfg
+++ b/lib/rbcodec/dsp/eqs/Reggae.cfg
@@ -1,32 +1,12 @@
eq enabled: on
eq precut: 65
-eq band 0 cutoff: 32
-eq band 0 q: 7
-eq band 0 gain: 0
-eq band 1 cutoff: 64
-eq band 1 q: 10
-eq band 1 gain: 0
-eq band 2 cutoff: 125
-eq band 2 q: 10
-eq band 2 gain: 0
-eq band 3 cutoff: 250
-eq band 3 q: 10
-eq band 3 gain: -55
-eq band 4 cutoff: 500
-eq band 4 q: 10
-eq band 4 gain: 0
-eq band 5 cutoff: 1000
-eq band 5 q: 10
-eq band 5 gain: 65
-eq band 6 cutoff: 2000
-eq band 6 q: 10
-eq band 6 gain: 65
-eq band 7 cutoff: 4000
-eq band 7 q: 10
-eq band 7 gain: 0
-eq band 8 cutoff: 8000
-eq band 8 q: 10
-eq band 8 gain: 0
-eq band 9 cutoff: 16000
-eq band 9 q: 7
-eq band 9 gain: 0
+eq low shelf filter: 32, 7, 0
+eq peak filter 1: 64, 10, 0
+eq peak filter 2: 125, 10, 0
+eq peak filter 3: 250, 10, -55
+eq peak filter 4: 500, 10, 0
+eq peak filter 5: 1000, 10, 65
+eq peak filter 6: 2000, 10, 65
+eq peak filter 7: 4000, 10, 0
+eq peak filter 8: 8000, 10, 0
+eq high shelf filter: 16000, 7, 0
diff --git a/lib/rbcodec/dsp/eqs/Rock.cfg b/lib/rbcodec/dsp/eqs/Rock.cfg
index 788c8b89af..5e3e9918d2 100644
--- a/lib/rbcodec/dsp/eqs/Rock.cfg
+++ b/lib/rbcodec/dsp/eqs/Rock.cfg
@@ -1,32 +1,12 @@
eq enabled: on
eq precut: 110
-eq band 0 cutoff: 32
-eq band 0 q: 7
-eq band 0 gain: 80
-eq band 1 cutoff: 64
-eq band 1 q: 10
-eq band 1 gain: 50
-eq band 2 cutoff: 125
-eq band 2 q: 10
-eq band 2 gain: -55
-eq band 3 cutoff: 250
-eq band 3 q: 10
-eq band 3 gain: -80
-eq band 4 cutoff: 500
-eq band 4 q: 10
-eq band 4 gain: -30
-eq band 5 cutoff: 1000
-eq band 5 q: 10
-eq band 5 gain: 40
-eq band 6 cutoff: 2000
-eq band 6 q: 10
-eq band 6 gain: 90
-eq band 7 cutoff: 4000
-eq band 7 q: 10
-eq band 7 gain: 110
-eq band 8 cutoff: 8000
-eq band 8 q: 10
-eq band 8 gain: 110
-eq band 9 cutoff: 16000
-eq band 9 q: 7
-eq band 9 gain: 110
+eq low shelf filter: 32, 7, 80
+eq peak filter 1: 64, 10, 50
+eq peak filter 2: 125, 10, -55
+eq peak filter 3: 250, 10, -80
+eq peak filter 4: 500, 10, -30
+eq peak filter 5: 1000, 10, 40
+eq peak filter 6: 2000, 10, 90
+eq peak filter 7: 4000, 10, 110
+eq peak filter 8: 8000, 10, 110
+eq high shelf filter: 16000, 7, 110
diff --git a/lib/rbcodec/dsp/eqs/Ska.cfg b/lib/rbcodec/dsp/eqs/Ska.cfg
index b0848ad78f..542f011438 100644
--- a/lib/rbcodec/dsp/eqs/Ska.cfg
+++ b/lib/rbcodec/dsp/eqs/Ska.cfg
@@ -1,32 +1,12 @@
eq enabled: on
eq precut: 110
-eq band 0 cutoff: 32
-eq band 0 q: 7
-eq band 0 gain: -25
-eq band 1 cutoff: 64
-eq band 1 q: 10
-eq band 1 gain: -50
-eq band 2 cutoff: 125
-eq band 2 q: 10
-eq band 2 gain: -40
-eq band 3 cutoff: 250
-eq band 3 q: 10
-eq band 3 gain: 0
-eq band 4 cutoff: 500
-eq band 4 q: 10
-eq band 4 gain: 40
-eq band 5 cutoff: 1000
-eq band 5 q: 10
-eq band 5 gain: 55
-eq band 6 cutoff: 2000
-eq band 6 q: 10
-eq band 6 gain: 90
-eq band 7 cutoff: 4000
-eq band 7 q: 10
-eq band 7 gain: 95
-eq band 8 cutoff: 8000
-eq band 8 q: 10
-eq band 8 gain: 110
-eq band 9 cutoff: 16000
-eq band 9 q: 7
-eq band 9 gain: 95
+eq low shelf filter: 32, 7, -25
+eq peak filter 1: 64, 10, -50
+eq peak filter 2: 125, 10, -40
+eq peak filter 3: 250, 10, 0
+eq peak filter 4: 500, 10, 40
+eq peak filter 5: 1000, 10, 55
+eq peak filter 6: 2000, 10, 90
+eq peak filter 7: 4000, 10, 95
+eq peak filter 8: 8000, 10, 110
+eq high shelf filter: 16000, 7, 95
diff --git a/lib/rbcodec/dsp/eqs/Soft.cfg b/lib/rbcodec/dsp/eqs/Soft.cfg
index e9f0f03f51..a2b5ede3d0 100644
--- a/lib/rbcodec/dsp/eqs/Soft.cfg
+++ b/lib/rbcodec/dsp/eqs/Soft.cfg
@@ -1,32 +1,12 @@
eq enabled: on
eq precut: 120
-eq band 0 cutoff: 32
-eq band 0 q: 7
-eq band 0 gain: 50
-eq band 1 cutoff: 64
-eq band 1 q: 10
-eq band 1 gain: 15
-eq band 2 cutoff: 125
-eq band 2 q: 10
-eq band 2 gain: 0
-eq band 3 cutoff: 250
-eq band 3 q: 10
-eq band 3 gain: -25
-eq band 4 cutoff: 500
-eq band 4 q: 10
-eq band 4 gain: 0
-eq band 5 cutoff: 1000
-eq band 5 q: 10
-eq band 5 gain: 40
-eq band 6 cutoff: 2000
-eq band 6 q: 10
-eq band 6 gain: 80
-eq band 7 cutoff: 4000
-eq band 7 q: 10
-eq band 7 gain: 95
-eq band 8 cutoff: 8000
-eq band 8 q: 10
-eq band 8 gain: 110
-eq band 9 cutoff: 16000
-eq band 9 q: 7
-eq band 9 gain: 120
+eq low shelf filter: 32, 7, 50
+eq peak filter 1: 64, 10, 15
+eq peak filter 2: 125, 10, 0
+eq peak filter 3: 250, 10, -25
+eq peak filter 4: 500, 10, 0
+eq peak filter 5: 1000, 10, 40
+eq peak filter 6: 2000, 10, 80
+eq peak filter 7: 4000, 10, 95
+eq peak filter 8: 8000, 10, 110
+eq high shelf filter: 16000, 7, 120
diff --git a/lib/rbcodec/dsp/eqs/Techno.cfg b/lib/rbcodec/dsp/eqs/Techno.cfg
index 1125d49914..96ef79e2c7 100644
--- a/lib/rbcodec/dsp/eqs/Techno.cfg
+++ b/lib/rbcodec/dsp/eqs/Techno.cfg
@@ -1,32 +1,12 @@
eq enabled: on
eq precut: 95
-eq band 0 cutoff: 32
-eq band 0 q: 7
-eq band 0 gain: 80
-eq band 1 cutoff: 64
-eq band 1 q: 10
-eq band 1 gain: 55
-eq band 2 cutoff: 125
-eq band 2 q: 10
-eq band 2 gain: 0
-eq band 3 cutoff: 250
-eq band 3 q: 10
-eq band 3 gain: -55
-eq band 4 cutoff: 500
-eq band 4 q: 10
-eq band 4 gain: -50
-eq band 5 cutoff: 1000
-eq band 5 q: 10
-eq band 5 gain: 0
-eq band 6 cutoff: 2000
-eq band 6 q: 10
-eq band 6 gain: 80
-eq band 7 cutoff: 4000
-eq band 7 q: 10
-eq band 7 gain: 95
-eq band 8 cutoff: 8000
-eq band 8 q: 10
-eq band 8 gain: 95
-eq band 9 cutoff: 16000
-eq band 9 q: 7
-eq band 9 gain: 90
+eq low shelf filter: 32, 7, 80
+eq peak filter 1: 64, 10, 55
+eq peak filter 2: 125, 10, 0
+eq peak filter 3: 250, 10, -55
+eq peak filter 4: 500, 10, -50
+eq peak filter 5: 1000, 10, 0
+eq peak filter 6: 2000, 10, 80
+eq peak filter 7: 4000, 10, 95
+eq peak filter 8: 8000, 10, 95
+eq high shelf filter: 16000, 7, 90
diff --git a/lib/rbcodec/dsp/eqs/Vocal.cfg b/lib/rbcodec/dsp/eqs/Vocal.cfg
index fa8fd89a19..80b1139ffa 100644
--- a/lib/rbcodec/dsp/eqs/Vocal.cfg
+++ b/lib/rbcodec/dsp/eqs/Vocal.cfg
@@ -1,32 +1,12 @@
eq enabled: on
eq precut: 45
-eq band 0 cutoff: 32
-eq band 0 q: 7
-eq band 0 gain: -45
-eq band 1 cutoff: 64
-eq band 1 q: 10
-eq band 1 gain: -45
-eq band 2 cutoff: 125
-eq band 2 q: 10
-eq band 2 gain: 5
-eq band 3 cutoff: 250
-eq band 3 q: 10
-eq band 3 gain: 5
-eq band 4 cutoff: 500
-eq band 4 q: 10
-eq band 4 gain: 45
-eq band 5 cutoff: 1000
-eq band 5 q: 10
-eq band 5 gain: 45
-eq band 6 cutoff: 2000
-eq band 6 q: 10
-eq band 6 gain: 20
-eq band 7 cutoff: 4000
-eq band 7 q: 10
-eq band 7 gain: 20
-eq band 8 cutoff: 8000
-eq band 8 q: 10
-eq band 8 gain: 0
-eq band 9 cutoff: 16000
-eq band 9 q: 7
-eq band 9 gain: 0
+eq low shelf filter: 32, 7, -45
+eq peak filter 1: 64, 10, -45
+eq peak filter 2: 125, 10, 5
+eq peak filter 3: 250, 10, 5
+eq peak filter 4: 500, 10, 45
+eq peak filter 5: 1000, 10, 45
+eq peak filter 6: 2000, 10, 20
+eq peak filter 7: 4000, 10, 20
+eq peak filter 8: 8000, 10, 0
+eq high shelf filter: 16000, 7, 0