diff --git a/frontend/menu/menu_common.c b/frontend/menu/menu_common.c index ba53a85970..603738c523 100644 --- a/frontend/menu/menu_common.c +++ b/frontend/menu/menu_common.c @@ -1986,6 +1986,8 @@ void menu_populate_entries(void *data, unsigned menu_type) #endif #ifdef _XBOX1 file_list_push(rgui->selection_buf, "Volume Level", RGUI_SETTINGS_AUDIO_VOLUME_LEVEL, 0); +#else + file_list_push(rgui->selection_buf, "Volume Level", RGUI_SETTINGS_AUDIO_VOLUME, 0); #endif #ifdef HAVE_RSOUND file_list_push(rgui->selection_buf, "RSound Server IP Address", RGUI_SETTINGS_RSOUND_SERVER_IP_ADDRESS, 0); diff --git a/frontend/menu/menu_common.h b/frontend/menu/menu_common.h index fc123f5fd4..08b3454b34 100644 --- a/frontend/menu/menu_common.h +++ b/frontend/menu/menu_common.h @@ -140,7 +140,8 @@ typedef enum RGUI_SETTINGS_RESTART_GAME, RGUI_SETTINGS_AUDIO_MUTE, RGUI_SETTINGS_AUDIO_CONTROL_RATE_DELTA, - RGUI_SETTINGS_AUDIO_VOLUME_LEVEL, + RGUI_SETTINGS_AUDIO_VOLUME_LEVEL, // XBOX1 only it seems. FIXME: Refactor this? + RGUI_SETTINGS_AUDIO_VOLUME, RGUI_SETTINGS_CUSTOM_BGM_CONTROL_ENABLE, RGUI_SETTINGS_RSOUND_SERVER_IP_ADDRESS, RGUI_SETTINGS_ZIP_EXTRACT, diff --git a/frontend/menu/menu_settings.c b/frontend/menu/menu_settings.c index 742d02dc21..724acbe0fa 100644 --- a/frontend/menu/menu_settings.c +++ b/frontend/menu/menu_settings.c @@ -536,6 +536,28 @@ int menu_set_settings(void *data, unsigned setting, unsigned action) g_settings.audio.rate_control = true; } break; + case RGUI_SETTINGS_AUDIO_VOLUME: + { + float db_delta = 0.0f; + if (action == RGUI_ACTION_START) + { + g_extern.audio_data.volume_db = 0.0f; + g_extern.audio_data.volume_gain = 1.0f; + } + else if (action == RGUI_ACTION_LEFT) + db_delta -= 1.0f; + else if (action == RGUI_ACTION_RIGHT) + db_delta += 1.0f; + + if (db_delta != 0.0f) + { + g_extern.audio_data.volume_db += db_delta; + g_extern.audio_data.volume_db = max(g_extern.audio_data.volume_db, -80.0f); + g_extern.audio_data.volume_db = min(g_extern.audio_data.volume_db, 12.0f); + g_extern.audio_data.volume_gain = db_to_gain(g_extern.audio_data.volume_db); + } + break; + } case RGUI_SETTINGS_DEBUG_TEXT: if (action == RGUI_ACTION_START) g_settings.fps_show = false; @@ -1881,6 +1903,9 @@ void menu_set_settings_label(char *type_str, size_t type_str_size, unsigned *w, strlcpy(type_str, (g_extern.console.sound.volume_level) ? "Loud" : "Normal", type_str_size); break; #endif + case RGUI_SETTINGS_AUDIO_VOLUME: + snprintf(type_str, type_str_size, "%.1f dB", g_extern.audio_data.volume_db); + break; case RGUI_SETTINGS_RSOUND_SERVER_IP_ADDRESS: strlcpy(type_str, g_settings.audio.device, type_str_size); break; diff --git a/retroarch.c b/retroarch.c index abff5b0300..186c4e328c 100644 --- a/retroarch.c +++ b/retroarch.c @@ -2669,10 +2669,8 @@ static void check_volume(void) db_change -= 0.5f; g_extern.audio_data.volume_db += db_change; - if (g_extern.audio_data.volume_db > 12.0f) - g_extern.audio_data.volume_db = 12.0f; - else if (g_extern.audio_data.volume_db < -80.0f) - g_extern.audio_data.volume_db = -80.0f; + g_extern.audio_data.volume_db = max(g_extern.audio_data.volume_db, -80.0f); + g_extern.audio_data.volume_db = min(g_extern.audio_data.volume_db, 12.0f); char msg[256]; snprintf(msg, sizeof(msg), "Volume: %.1f dB", g_extern.audio_data.volume_db);