Add audio mixer volume setting

This commit is contained in:
twinaphex 2017-06-08 22:58:43 +02:00
parent 8f5f3d15f3
commit cdd7fbeb52
12 changed files with 86 additions and 0 deletions

View file

@ -933,6 +933,33 @@ static void command_event_set_volume(float gain)
audio_set_float(AUDIO_ACTION_VOLUME_GAIN, new_volume);
}
/**
* event_set_mixer_volume:
* @gain : amount of gain to be applied to current volume level.
*
* Adjusts the current audio volume level.
*
**/
static void command_event_set_mixer_volume(float gain)
{
char msg[128];
settings_t *settings = config_get_ptr();
float new_volume = settings->floats.audio_mixer_volume + gain;
new_volume = MAX(new_volume, -80.0f);
new_volume = MIN(new_volume, 12.0f);
configuration_set_float(settings, settings->floats.audio_mixer_volume, new_volume);
snprintf(msg, sizeof(msg), "%s: %.1f dB",
msg_hash_to_str(MSG_AUDIO_VOLUME),
new_volume);
runloop_msg_queue_push(msg, 1, 180, true);
RARCH_LOG("%s\n", msg);
audio_set_float(AUDIO_ACTION_VOLUME_GAIN, new_volume);
}
/**
* command_event_init_controllers:
*
@ -2512,6 +2539,12 @@ bool command_event(enum event_command cmd, void *data)
case CMD_EVENT_VOLUME_DOWN:
command_event_set_volume(-0.5f);
break;
case CMD_EVENT_MIXER_VOLUME_UP:
command_event_set_mixer_volume(0.5f);
break;
case CMD_EVENT_MIXER_VOLUME_DOWN:
command_event_set_mixer_volume(-0.5f);
break;
case CMD_EVENT_SET_FRAME_LIMIT:
rarch_ctl(RARCH_CTL_SET_FRAME_LIMIT, NULL);
break;

View file

@ -215,6 +215,8 @@ enum event_command
CMD_EVENT_PERFCNT_REPORT_FRONTEND_LOG,
CMD_EVENT_VOLUME_UP,
CMD_EVENT_VOLUME_DOWN,
CMD_EVENT_MIXER_VOLUME_UP,
CMD_EVENT_MIXER_VOLUME_DOWN,
CMD_EVENT_DISABLE_OVERRIDES,
CMD_EVENT_RESTORE_DEFAULT_SHADER_PRESET
};

View file

@ -414,6 +414,9 @@ static const float max_timing_skew = 0.05;
/* Default audio volume in dB. (0.0 dB == unity gain). */
static const float audio_volume = 0.0;
/* Default audio volume of the audio mixer in dB. (0.0 dB == unity gain). */
static const float audio_mixer_volume = 0.0;
#ifdef HAVE_WASAPI
/* WASAPI defaults */
static const bool wasapi_exclusive_mode = true;

View file

@ -1270,6 +1270,7 @@ static struct config_float_setting *populate_settings_float(settings_t *settings
SETTING_FLOAT("audio_rate_control_delta", audio_get_float_ptr(AUDIO_ACTION_RATE_CONTROL_DELTA), true, rate_control_delta, false);
SETTING_FLOAT("audio_max_timing_skew", &settings->floats.audio_max_timing_skew, true, max_timing_skew, false);
SETTING_FLOAT("audio_volume", &settings->floats.audio_volume, true, audio_volume, false);
SETTING_FLOAT("audio_mixer_volume", &settings->floats.audio_mixer_volume, true, audio_mixer_volume, false);
#ifdef HAVE_OVERLAY
SETTING_FLOAT("input_overlay_opacity", &settings->floats.input_overlay_opacity, true, 0.7f, false);
SETTING_FLOAT("input_overlay_scale", &settings->floats.input_overlay_scale, true, 1.0f, false);
@ -1532,6 +1533,7 @@ static void config_set_defaults(void)
settings->uints.audio_latency = g_defaults.settings.out_latency;
audio_set_float(AUDIO_ACTION_VOLUME_GAIN, settings->floats.audio_volume);
audio_set_float(AUDIO_ACTION_MIXER_VOLUME_GAIN, settings->floats.audio_mixer_volume);
settings->rewind_buffer_size = rewind_buffer_size;
@ -2441,6 +2443,7 @@ static bool config_load_file(const char *path, bool set_defaults,
settings->uints.video_swap_interval = MIN(settings->uints.video_swap_interval, 4);
audio_set_float(AUDIO_ACTION_VOLUME_GAIN, settings->floats.audio_volume);
audio_set_float(AUDIO_ACTION_MIXER_VOLUME_GAIN, settings->floats.audio_mixer_volume);
if (string_is_empty(settings->paths.path_content_history))
{

View file

@ -231,6 +231,7 @@ typedef struct settings
float audio_max_timing_skew;
float audio_volume; /* dB scale. */
float audio_mixer_volume; /* dB scale. */
float input_overlay_opacity;
float input_overlay_scale;

View file

@ -1233,3 +1233,5 @@ MSG_HASH(MENU_ENUM_LABEL_ADD_TO_MIXER_AND_COLLECTION,
"audio_add_to_mixer_and_collection")
MSG_HASH(MENU_ENUM_LABEL_FILTER_BY_CURRENT_CORE,
"filter_by_current_Core")
MSG_HASH(MENU_ENUM_LABEL_AUDIO_MIXER_VOLUME,
"audio_mixer_volume")

View file

@ -3017,3 +3017,15 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_ADD_TO_MIXER_AND_COLLECTION,
"Add to mixer")
MSG_HASH(MENU_ENUM_LABEL_VALUE_FILTER_BY_CURRENT_CORE,
"Filter by current core")
MSG_HASH(
MSG_AUDIO_MIXER_VOLUME,
"Global audio mixer volume"
)
MSG_HASH(
MENU_ENUM_SUBLABEL_AUDIO_MIXER_VOLUME,
"Global audio mixer volume (in dB). 0 dB is normal volume, and no gain is applied."
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_AUDIO_MIXER_VOLUME,
"Audio Mixer Volume Level (dB)"
)

View file

@ -105,6 +105,7 @@ default_sublabel_macro(action_bind_sublabel_input_poll_type_behavior, MENU_
default_sublabel_macro(action_bind_sublabel_input_all_users_control_menu, MENU_ENUM_SUBLABEL_INPUT_ALL_USERS_CONTROL_MENU)
default_sublabel_macro(action_bind_sublabel_input_bind_timeout, MENU_ENUM_SUBLABEL_INPUT_BIND_TIMEOUT)
default_sublabel_macro(action_bind_sublabel_audio_volume, MENU_ENUM_SUBLABEL_AUDIO_VOLUME)
default_sublabel_macro(action_bind_sublabel_audio_mixer_volume, MENU_ENUM_SUBLABEL_AUDIO_MIXER_VOLUME)
default_sublabel_macro(action_bind_sublabel_audio_sync, MENU_ENUM_SUBLABEL_AUDIO_SYNC)
default_sublabel_macro(action_bind_sublabel_axis_threshold, MENU_ENUM_SUBLABEL_INPUT_AXIS_THRESHOLD)
default_sublabel_macro(action_bind_sublabel_input_turbo_period, MENU_ENUM_SUBLABEL_INPUT_TURBO_PERIOD)
@ -1037,6 +1038,9 @@ int menu_cbs_init_bind_sublabel(menu_file_list_cbs_t *cbs,
case MENU_ENUM_LABEL_AUDIO_VOLUME:
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_audio_volume);
break;
case MENU_ENUM_LABEL_AUDIO_MIXER_VOLUME:
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_audio_mixer_volume);
break;
case MENU_ENUM_LABEL_INPUT_ALL_USERS_CONTROL_MENU:
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_input_all_users_control_menu);
break;

View file

@ -5647,6 +5647,9 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, void *data)
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_AUDIO_VOLUME,
PARSE_ONLY_FLOAT, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_AUDIO_MIXER_VOLUME,
PARSE_ONLY_FLOAT, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_SYSTEM_BGM_ENABLE,
PARSE_ONLY_BOOL, false);

View file

@ -1688,6 +1688,9 @@ void general_write_handler(void *data)
case MENU_ENUM_LABEL_AUDIO_VOLUME:
audio_set_float(AUDIO_ACTION_VOLUME_GAIN, *setting->value.target.fraction);
break;
case MENU_ENUM_LABEL_AUDIO_MIXER_VOLUME:
audio_set_float(AUDIO_ACTION_MIXER_VOLUME_GAIN, *setting->value.target.fraction);
break;
case MENU_ENUM_LABEL_AUDIO_LATENCY:
case MENU_ENUM_LABEL_AUDIO_DEVICE:
case MENU_ENUM_LABEL_AUDIO_OUTPUT_RATE:
@ -3816,6 +3819,20 @@ static bool setting_append_list(
general_read_handler);
menu_settings_list_current_add_range(list, list_info, -80, 12, 1.0, true, true);
CONFIG_FLOAT(
list, list_info,
&settings->floats.audio_mixer_volume,
MENU_ENUM_LABEL_AUDIO_MIXER_VOLUME,
MENU_ENUM_LABEL_VALUE_AUDIO_MIXER_VOLUME,
audio_mixer_volume,
"%.1f",
&group_info,
&subgroup_info,
parent_group,
general_write_handler,
general_read_handler);
menu_settings_list_current_add_range(list, list_info, -80, 12, 1.0, true, true);
#ifdef __CELLOS_LV2__
CONFIG_BOOL(
list, list_info,

View file

@ -170,6 +170,7 @@ enum msg_hash_enums
MSG_NETPLAY_CHANGED_NICK,
MSG_AUTODETECT,
MSG_AUDIO_VOLUME,
MSG_AUDIO_MIXER_VOLUME,
MSG_LIBRETRO_FRONTEND,
MSG_CAPABILITIES,
MSG_DEVICE_CONFIGURED_IN_PORT,
@ -974,6 +975,7 @@ enum msg_hash_enums
MENU_LABEL(AUDIO_MUTE),
MENU_LABEL(AUDIO_SYNC),
MENU_LABEL(AUDIO_VOLUME),
MENU_LABEL(AUDIO_MIXER_VOLUME),
MENU_LABEL(AUDIO_RATE_CONTROL_DELTA),
MENU_LABEL(AUDIO_LATENCY),
MENU_LABEL(AUDIO_WASAPI_EXCLUSIVE_MODE),

View file

@ -325,6 +325,10 @@
# Gain can be controlled in runtime with input_volume_up/input_volume_down.
# audio_volume = 0.0
# Audio mixer volume. Volume is expressed in dB.
# 0 dB is normal volume. No gain will be applied.
# audio_mixer_volume = 0.0
#### Overlay
# Defines a directory where overlays are kept for easy access.