diff options
Diffstat (limited to 'apps')
-rw-r--r-- | apps/gui/option_select.c | 6 | ||||
-rw-r--r-- | apps/lang/chinese-simp.lang | 14 | ||||
-rw-r--r-- | apps/lang/chinese-trad.lang | 14 | ||||
-rw-r--r-- | apps/lang/english.lang | 14 | ||||
-rw-r--r-- | apps/menus/sound_menu.c | 41 | ||||
-rw-r--r-- | apps/misc.c | 3 | ||||
-rw-r--r-- | apps/settings.h | 1 | ||||
-rw-r--r-- | apps/settings_list.c | 32 |
8 files changed, 122 insertions, 3 deletions
diff --git a/apps/gui/option_select.c b/apps/gui/option_select.c index d42d08188a..0452467994 100644 --- a/apps/gui/option_select.c +++ b/apps/gui/option_select.c | |||
@@ -345,7 +345,8 @@ static int selection_to_val(const struct settings_list *setting, int selection) | |||
345 | int setting_id = setting->sound_setting->setting; | 345 | int setting_id = setting->sound_setting->setting; |
346 | #ifndef ASCENDING_INT_SETTINGS | 346 | #ifndef ASCENDING_INT_SETTINGS |
347 | step = sound_steps(setting_id); | 347 | step = sound_steps(setting_id); |
348 | max = sound_max(setting_id); | 348 | max = (setting_id == SOUND_VOLUME) ? |
349 | global_settings.volume_limit : sound_max(setting_id); | ||
349 | /* min = sound_min(setting_id); */ | 350 | /* min = sound_min(setting_id); */ |
350 | #else | 351 | #else |
351 | step = -sound_steps(setting_id); | 352 | step = -sound_steps(setting_id); |
@@ -429,7 +430,8 @@ static void val_to_selection(const struct settings_list *setting, int oldvalue, | |||
429 | int setting_id = setting->sound_setting->setting; | 430 | int setting_id = setting->sound_setting->setting; |
430 | int steps = sound_steps(setting_id); | 431 | int steps = sound_steps(setting_id); |
431 | int min = sound_min(setting_id); | 432 | int min = sound_min(setting_id); |
432 | int max = sound_max(setting_id); | 433 | int max = (setting_id == SOUND_VOLUME) ? |
434 | global_settings.volume_limit : sound_max(setting_id); | ||
433 | *nb_items = (max-min)/steps + 1; | 435 | *nb_items = (max-min)/steps + 1; |
434 | #ifndef ASCENDING_INT_SETTINGS | 436 | #ifndef ASCENDING_INT_SETTINGS |
435 | *selected = (max - oldvalue) / steps; | 437 | *selected = (max - oldvalue) / steps; |
diff --git a/apps/lang/chinese-simp.lang b/apps/lang/chinese-simp.lang index 4c3dd3c18f..e90ec510d2 100644 --- a/apps/lang/chinese-simp.lang +++ b/apps/lang/chinese-simp.lang | |||
@@ -13039,3 +13039,17 @@ | |||
13039 | *: "扫描媒体时扫描指定文件夹" | 13039 | *: "扫描媒体时扫描指定文件夹" |
13040 | </voice> | 13040 | </voice> |
13041 | </phrase> | 13041 | </phrase> |
13042 | <phrase> | ||
13043 | id: LANG_VOLUME_LIMIT | ||
13044 | desc: in sound_settings | ||
13045 | user: core | ||
13046 | <source> | ||
13047 | *: "Maximum Volume Limit" | ||
13048 | </source> | ||
13049 | <dest> | ||
13050 | *: "音量限制" | ||
13051 | </dest> | ||
13052 | <voice> | ||
13053 | *: "音量限制" | ||
13054 | </voice> | ||
13055 | </phrase> | ||
diff --git a/apps/lang/chinese-trad.lang b/apps/lang/chinese-trad.lang index f8dc5c38d6..0d0b68d1e5 100644 --- a/apps/lang/chinese-trad.lang +++ b/apps/lang/chinese-trad.lang | |||
@@ -11240,3 +11240,17 @@ | |||
11240 | *: "檔案大小" | 11240 | *: "檔案大小" |
11241 | </voice> | 11241 | </voice> |
11242 | </phrase> | 11242 | </phrase> |
11243 | <phrase> | ||
11244 | id: LANG_VOLUME_LIMIT | ||
11245 | desc: in sound_settings | ||
11246 | user: core | ||
11247 | <source> | ||
11248 | *: "Maximum Volume Limit" | ||
11249 | </source> | ||
11250 | <dest> | ||
11251 | *: "音量限制" | ||
11252 | </dest> | ||
11253 | <voice> | ||
11254 | *: "音量限制" | ||
11255 | </voice> | ||
11256 | </phrase> | ||
diff --git a/apps/lang/english.lang b/apps/lang/english.lang index dcad532f7a..d7f4476be6 100644 --- a/apps/lang/english.lang +++ b/apps/lang/english.lang | |||
@@ -13178,3 +13178,17 @@ | |||
13178 | *: "Slow" | 13178 | *: "Slow" |
13179 | </voice> | 13179 | </voice> |
13180 | </phrase> | 13180 | </phrase> |
13181 | <phrase> | ||
13182 | id: LANG_VOLUME_LIMIT | ||
13183 | desc: in sound_settings | ||
13184 | user: core | ||
13185 | <source> | ||
13186 | *: "Maximum Volume Limit" | ||
13187 | </source> | ||
13188 | <dest> | ||
13189 | *: "Maximum Volume Limit" | ||
13190 | </dest> | ||
13191 | <voice> | ||
13192 | *: "Maximum Volume Limit" | ||
13193 | </voice> | ||
13194 | </phrase> | ||
diff --git a/apps/menus/sound_menu.c b/apps/menus/sound_menu.c index 28cc257193..8913266a5f 100644 --- a/apps/menus/sound_menu.c +++ b/apps/menus/sound_menu.c | |||
@@ -34,10 +34,50 @@ | |||
34 | #include "menu_common.h" | 34 | #include "menu_common.h" |
35 | #include "splash.h" | 35 | #include "splash.h" |
36 | #include "kernel.h" | 36 | #include "kernel.h" |
37 | #include "talk.h" | ||
38 | #include "option_select.h" | ||
39 | #include "misc.h" | ||
40 | |||
41 | static int32_t get_dec_talkid(int value, int unit) | ||
42 | { | ||
43 | return TALK_ID_DECIMAL(value, 1, unit); | ||
44 | } | ||
45 | |||
46 | static int volume_limit_callback(int action,const struct menu_item_ex *this_item) | ||
47 | { | ||
48 | (void)this_item; | ||
49 | |||
50 | static struct int_setting volume_limit_int_setting; | ||
51 | volume_limit_int_setting.option_callback = NULL; | ||
52 | volume_limit_int_setting.unit = UNIT_DB; | ||
53 | volume_limit_int_setting.min = sound_min(SOUND_VOLUME); | ||
54 | volume_limit_int_setting.max = sound_max(SOUND_VOLUME); | ||
55 | volume_limit_int_setting.step = sound_steps(SOUND_VOLUME); | ||
56 | volume_limit_int_setting.formatter = NULL; | ||
57 | volume_limit_int_setting.get_talk_id = get_dec_talkid; | ||
58 | |||
59 | struct settings_list setting; | ||
60 | setting.flags = F_BANFROMQS|F_INT_SETTING|F_T_INT|F_NO_WRAP; | ||
61 | setting.lang_id = LANG_VOLUME_LIMIT; | ||
62 | setting.default_val.int_ = sound_max(SOUND_VOLUME); | ||
63 | setting.int_setting = &volume_limit_int_setting; | ||
64 | |||
65 | switch (action) | ||
66 | { | ||
67 | case ACTION_ENTER_MENUITEM: | ||
68 | setting.setting = &global_settings.volume_limit; | ||
69 | option_screen(&setting, NULL, false, ID2P(LANG_VOLUME_LIMIT)); | ||
70 | case ACTION_EXIT_MENUITEM: /* on exit */ | ||
71 | setvol(); | ||
72 | break; | ||
73 | } | ||
74 | return action; | ||
75 | } | ||
37 | 76 | ||
38 | /***********************************/ | 77 | /***********************************/ |
39 | /* SOUND MENU */ | 78 | /* SOUND MENU */ |
40 | MENUITEM_SETTING(volume, &global_settings.volume, NULL); | 79 | MENUITEM_SETTING(volume, &global_settings.volume, NULL); |
80 | MENUITEM_SETTING(volume_limit, &global_settings.volume_limit, volume_limit_callback); | ||
41 | #ifdef AUDIOHW_HAVE_BASS | 81 | #ifdef AUDIOHW_HAVE_BASS |
42 | MENUITEM_SETTING(bass, &global_settings.bass, | 82 | MENUITEM_SETTING(bass, &global_settings.bass, |
43 | #ifdef HAVE_SW_TONE_CONTROLS | 83 | #ifdef HAVE_SW_TONE_CONTROLS |
@@ -171,6 +211,7 @@ static int timestretch_callback(int action,const struct menu_item_ex *this_item) | |||
171 | 211 | ||
172 | MAKE_MENU(sound_settings, ID2P(LANG_SOUND_SETTINGS), NULL, Icon_Audio, | 212 | MAKE_MENU(sound_settings, ID2P(LANG_SOUND_SETTINGS), NULL, Icon_Audio, |
173 | &volume | 213 | &volume |
214 | ,&volume_limit | ||
174 | #ifdef AUDIOHW_HAVE_BASS | 215 | #ifdef AUDIOHW_HAVE_BASS |
175 | ,&bass | 216 | ,&bass |
176 | #endif | 217 | #endif |
diff --git a/apps/misc.c b/apps/misc.c index e746c432e6..fa33bb5c4f 100644 --- a/apps/misc.c +++ b/apps/misc.c | |||
@@ -793,6 +793,9 @@ void setvol(void) | |||
793 | global_settings.volume = min_vol; | 793 | global_settings.volume = min_vol; |
794 | if (global_settings.volume > max_vol) | 794 | if (global_settings.volume > max_vol) |
795 | global_settings.volume = max_vol; | 795 | global_settings.volume = max_vol; |
796 | if (global_settings.volume > global_settings.volume_limit) | ||
797 | global_settings.volume = global_settings.volume_limit; | ||
798 | |||
796 | sound_set_volume(global_settings.volume); | 799 | sound_set_volume(global_settings.volume); |
797 | global_status.last_volume_change = current_tick; | 800 | global_status.last_volume_change = current_tick; |
798 | settings_save(); | 801 | settings_save(); |
diff --git a/apps/settings.h b/apps/settings.h index 087ff0cb45..62ae038385 100644 --- a/apps/settings.h +++ b/apps/settings.h | |||
@@ -828,6 +828,7 @@ struct user_settings | |||
828 | #ifdef HAVE_PLAY_FREQ | 828 | #ifdef HAVE_PLAY_FREQ |
829 | int play_frequency; /* core audio output frequency selection */ | 829 | int play_frequency; /* core audio output frequency selection */ |
830 | #endif | 830 | #endif |
831 | int volume_limit; /* maximum volume limit */ | ||
831 | }; | 832 | }; |
832 | 833 | ||
833 | /** global variables **/ | 834 | /** global variables **/ |
diff --git a/apps/settings_list.c b/apps/settings_list.c index bd2bfce36f..01bc5c53f4 100644 --- a/apps/settings_list.c +++ b/apps/settings_list.c | |||
@@ -661,9 +661,39 @@ static int32_t hotkey_getlang(int value, int unit) | |||
661 | return get_hotkey_lang_id(value); | 661 | return get_hotkey_lang_id(value); |
662 | } | 662 | } |
663 | #endif /* HAVE_HOTKEY */ | 663 | #endif /* HAVE_HOTKEY */ |
664 | |||
665 | /* volume limiter */ | ||
666 | static void volume_limit_load_from_cfg(void* var, char*value) | ||
667 | { | ||
668 | *(int*)var = atoi(value); | ||
669 | } | ||
670 | static char* volume_limit_write_to_cfg(void* setting, char*buf, int buf_len) | ||
671 | { | ||
672 | int current = *(int*)setting; | ||
673 | snprintf(buf, buf_len, "%d", current); | ||
674 | return buf; | ||
675 | } | ||
676 | static bool volume_limit_is_changed(void* setting, void* defaultval) | ||
677 | { | ||
678 | int current = *(int*)setting; | ||
679 | |||
680 | if ((int*)defaultval == NULL) | ||
681 | *(int*)defaultval = sound_max(SOUND_VOLUME); | ||
682 | return (current != sound_max(SOUND_VOLUME)); | ||
683 | } | ||
684 | static void volume_limit_set_default(void* setting, void* defaultval) | ||
685 | { | ||
686 | (void)defaultval; | ||
687 | *(int*)setting = sound_max(SOUND_VOLUME); | ||
688 | } | ||
689 | |||
664 | const struct settings_list settings[] = { | 690 | const struct settings_list settings[] = { |
665 | /* sound settings */ | 691 | /* sound settings */ |
666 | SOUND_SETTING(F_NO_WRAP,volume, LANG_VOLUME, "volume", SOUND_VOLUME), | 692 | SOUND_SETTING(F_NO_WRAP, volume, LANG_VOLUME, "volume", SOUND_VOLUME), |
693 | CUSTOM_SETTING(F_NO_WRAP, volume_limit, LANG_VOLUME_LIMIT, | ||
694 | NULL, "volume limit", | ||
695 | volume_limit_load_from_cfg, volume_limit_write_to_cfg, | ||
696 | volume_limit_is_changed, volume_limit_set_default), | ||
667 | SOUND_SETTING(0, balance, LANG_BALANCE, "balance", SOUND_BALANCE), | 697 | SOUND_SETTING(0, balance, LANG_BALANCE, "balance", SOUND_BALANCE), |
668 | /* Tone controls */ | 698 | /* Tone controls */ |
669 | #ifdef AUDIOHW_HAVE_BASS | 699 | #ifdef AUDIOHW_HAVE_BASS |