diff --git a/config.def.h b/config.def.h index f4f2eb2cb3..90153d1ae9 100644 --- a/config.def.h +++ b/config.def.h @@ -1150,6 +1150,11 @@ #define DEFAULT_WASAPI_SH_BUFFER_LENGTH 0 #endif +#if TARGET_OS_IOS +/* Respect silent mode (false will render audio in silent mode) */ +#define DEFAULT_AUDIO_RESPECT_SILENT_MODE true +#endif + /* Automatically mute audio when fast forward * is enabled */ #define DEFAULT_AUDIO_FASTFORWARD_MUTE false diff --git a/configuration.c b/configuration.c index a3e3eccfa1..b417a174ff 100644 --- a/configuration.c +++ b/configuration.c @@ -1772,6 +1772,9 @@ static struct config_bool_setting *populate_settings_bool( SETTING_BOOL("audio_mute_enable", audio_get_bool_ptr(AUDIO_ACTION_MUTE_ENABLE), true, false, false); #ifdef HAVE_AUDIOMIXER SETTING_BOOL("audio_mixer_mute_enable", audio_get_bool_ptr(AUDIO_ACTION_MIXER_MUTE_ENABLE), true, false, false); +#endif +#if TARGET_OS_IOS + SETTING_BOOL("audio_respect_silent_mode", &settings->bools.audio_respect_silent_mode, true, DEFAULT_AUDIO_RESPECT_SILENT_MODE, false); #endif SETTING_BOOL("audio_fastforward_mute", &settings->bools.audio_fastforward_mute, true, DEFAULT_AUDIO_FASTFORWARD_MUTE, false); SETTING_BOOL("audio_fastforward_speedup", &settings->bools.audio_fastforward_speedup, true, DEFAULT_AUDIO_FASTFORWARD_SPEEDUP, false); diff --git a/configuration.h b/configuration.h index 2a2a6929e6..7610a04d18 100644 --- a/configuration.h +++ b/configuration.h @@ -630,6 +630,9 @@ typedef struct settings bool audio_rate_control; bool audio_fastforward_mute; bool audio_fastforward_speedup; +#ifdef TARGET_OS_IOS + bool audio_respect_silent_mode; +#endif #ifdef HAVE_WASAPI bool audio_wasapi_exclusive_mode; diff --git a/intl/msg_hash_lbl.h b/intl/msg_hash_lbl.h index 21a1826280..d1e0454778 100644 --- a/intl/msg_hash_lbl.h +++ b/intl/msg_hash_lbl.h @@ -275,6 +275,10 @@ MSG_HASH( MENU_ENUM_LABEL_AUDIO_MUTE, "audio_mute_enable" ) +MSG_HASH( + MENU_ENUM_LABEL_AUDIO_RESPECT_SILENT_MODE, + "audio_respect_silent_mode" + ) MSG_HASH( MENU_ENUM_LABEL_AUDIO_FASTFORWARD_MUTE, "audio_fastforward_mute" diff --git a/intl/msg_hash_us.h b/intl/msg_hash_us.h index 3ee86773e2..88cc637f74 100644 --- a/intl/msg_hash_us.h +++ b/intl/msg_hash_us.h @@ -2633,6 +2633,14 @@ MSG_HASH( MENU_ENUM_SUBLABEL_AUDIO_MIXER_MUTE, "Mute mixer audio." ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_AUDIO_RESPECT_SILENT_MODE, + "Respect Silent Mode" + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_AUDIO_RESPECT_SILENT_MODE, + "Mute all audio in Silent Mode." + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_AUDIO_FASTFORWARD_MUTE, "Mute When Fast-Forwarding" diff --git a/menu/cbs/menu_cbs_sublabel.c b/menu/cbs/menu_cbs_sublabel.c index b85b0a0a5e..20e4ae0eaa 100644 --- a/menu/cbs/menu_cbs_sublabel.c +++ b/menu/cbs/menu_cbs_sublabel.c @@ -516,6 +516,9 @@ DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_audio_mute, MENU_ #ifdef HAVE_AUDIOMIXER DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_audio_mixer_mute, MENU_ENUM_SUBLABEL_AUDIO_MIXER_MUTE) #endif +#if TARGET_OS_IOS +DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_audio_respect_silent_mode, MENU_ENUM_SUBLABEL_AUDIO_RESPECT_SILENT_MODE) +#endif DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_audio_fastforward_mute, MENU_ENUM_SUBLABEL_AUDIO_FASTFORWARD_MUTE) DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_audio_fastforward_speedup, MENU_ENUM_SUBLABEL_AUDIO_FASTFORWARD_SPEEDUP) DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_camera_allow, MENU_ENUM_SUBLABEL_CAMERA_ALLOW) @@ -4512,6 +4515,11 @@ int menu_cbs_init_bind_sublabel(menu_file_list_cbs_t *cbs, BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_audio_mixer_mute); #endif break; +#if TARGET_OS_IOS + case MENU_ENUM_LABEL_AUDIO_RESPECT_SILENT_MODE: + BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_audio_respect_silent_mode); + break; +#endif case MENU_ENUM_LABEL_AUDIO_FASTFORWARD_MUTE: BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_audio_fastforward_mute); break; diff --git a/menu/menu_displaylist.c b/menu/menu_displaylist.c index c96c779fc7..bebbe61d88 100644 --- a/menu/menu_displaylist.c +++ b/menu/menu_displaylist.c @@ -7292,6 +7292,7 @@ unsigned menu_displaylist_build_list( {MENU_ENUM_LABEL_MENU_SOUNDS, PARSE_ACTION, true }, {MENU_ENUM_LABEL_AUDIO_MUTE, PARSE_ONLY_BOOL, true }, {MENU_ENUM_LABEL_AUDIO_MIXER_MUTE, PARSE_ONLY_BOOL, true }, + {MENU_ENUM_LABEL_AUDIO_RESPECT_SILENT_MODE, PARSE_ONLY_BOOL, true }, {MENU_ENUM_LABEL_AUDIO_FASTFORWARD_MUTE, PARSE_ONLY_BOOL, true }, {MENU_ENUM_LABEL_AUDIO_FASTFORWARD_SPEEDUP, PARSE_ONLY_BOOL, true }, {MENU_ENUM_LABEL_AUDIO_VOLUME, PARSE_ONLY_FLOAT, false }, diff --git a/menu/menu_setting.c b/menu/menu_setting.c index 15ba96c0e9..70e5a519cb 100644 --- a/menu/menu_setting.c +++ b/menu/menu_setting.c @@ -13774,6 +13774,26 @@ static bool setting_append_list( SD_FLAG_LAKKA_ADVANCED ); #endif + +#if TARGET_OS_IOS + CONFIG_BOOL( + list, list_info, + &settings->bools.audio_respect_silent_mode, + MENU_ENUM_LABEL_AUDIO_RESPECT_SILENT_MODE, + MENU_ENUM_LABEL_VALUE_AUDIO_RESPECT_SILENT_MODE, + DEFAULT_AUDIO_RESPECT_SILENT_MODE, + MENU_ENUM_LABEL_VALUE_OFF, + MENU_ENUM_LABEL_VALUE_ON, + &group_info, + &subgroup_info, + parent_group, + general_write_handler, + general_read_handler, + SD_FLAG_NONE + ); + +#endif + CONFIG_BOOL( list, list_info, &settings->bools.audio_fastforward_mute, diff --git a/msg_hash.h b/msg_hash.h index bade27472b..8c708a109e 100644 --- a/msg_hash.h +++ b/msg_hash.h @@ -2132,6 +2132,7 @@ enum msg_hash_enums MENU_LABEL(AUDIO_DSP_PLUGIN_REMOVE), MENU_LABEL(AUDIO_MUTE), MENU_LABEL(AUDIO_MIXER_MUTE), + MENU_LABEL(AUDIO_RESPECT_SILENT_MODE), MENU_LABEL(AUDIO_FASTFORWARD_MUTE), MENU_LABEL(AUDIO_FASTFORWARD_SPEEDUP), MENU_LABEL(AUDIO_SYNC), diff --git a/ui/drivers/ui_cocoatouch.m b/ui/drivers/ui_cocoatouch.m index ff19359238..d19e035657 100644 --- a/ui/drivers/ui_cocoatouch.m +++ b/ui/drivers/ui_cocoatouch.m @@ -459,7 +459,6 @@ enum - (void)applicationDidFinishLaunching:(UIApplication *)application { - NSError *error; char arguments[] = "retroarch"; char *argv[] = {arguments, NULL}; int argc = 1; @@ -471,7 +470,6 @@ enum self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; [self.window makeKeyAndVisible]; - [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryAmbient error:&error]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleAudioSessionInterruption:) name:AVAudioSessionInterruptionNotification object:[AVAudioSession sharedInstance]]; [self refreshSystemConfig]; @@ -507,9 +505,15 @@ enum - (void)applicationDidBecomeActive:(UIApplication *)application { rarch_start_draw_observer(); + NSError *error; settings_t *settings = config_get_ptr(); bool ui_companion_start_on_boot = settings->bools.ui_companion_start_on_boot; + if (settings->bools.audio_respect_silent_mode) + [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryAmbient error:&error]; + else + [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:&error]; + if (!ui_companion_start_on_boot) [self showGameView]; }