From d5a3a9aea6ce251df7a0334ac6e507672a4bab22 Mon Sep 17 00:00:00 2001
From: Leonardo Demartino <deeleek@gmail.com>
Date: Thu, 29 Feb 2024 08:54:55 -0300
Subject: [PATCH] Fix low volume sound output on iOS when Play and Record
 category is used.

---
 platform/ios/app_delegate.mm | 12 +++++++-----
 1 file changed, 7 insertions(+), 5 deletions(-)

diff --git a/platform/ios/app_delegate.mm b/platform/ios/app_delegate.mm
index 32ebf7be441..5a0c57be930 100644
--- a/platform/ios/app_delegate.mm
+++ b/platform/ios/app_delegate.mm
@@ -105,11 +105,17 @@ static ViewController *mainViewController = nil;
 
 	// Initialize with default Ambient category.
 	AVAudioSessionCategory category = AVAudioSessionCategoryAmbient;
+	AVAudioSessionCategoryOptions options = 0;
+
+	if (GLOBAL_GET("audio/general/ios/mix_with_others")) {
+		options |= AVAudioSessionCategoryOptionMixWithOthers;
+	}
 
 	if (sessionCategorySetting == SESSION_CATEGORY_MULTI_ROUTE) {
 		category = AVAudioSessionCategoryMultiRoute;
 	} else if (sessionCategorySetting == SESSION_CATEGORY_PLAY_AND_RECORD) {
 		category = AVAudioSessionCategoryPlayAndRecord;
+		options |= AVAudioSessionCategoryOptionDefaultToSpeaker;
 	} else if (sessionCategorySetting == SESSION_CATEGORY_PLAYBACK) {
 		category = AVAudioSessionCategoryPlayback;
 	} else if (sessionCategorySetting == SESSION_CATEGORY_RECORD) {
@@ -118,11 +124,7 @@ static ViewController *mainViewController = nil;
 		category = AVAudioSessionCategorySoloAmbient;
 	}
 
-	if (GLOBAL_GET("audio/general/ios/mix_with_others")) {
-		[[AVAudioSession sharedInstance] setCategory:category withOptions:AVAudioSessionCategoryOptionMixWithOthers error:nil];
-	} else {
-		[[AVAudioSession sharedInstance] setCategory:category error:nil];
-	}
+	[[AVAudioSession sharedInstance] setCategory:category withOptions:options error:nil];
 
 	return YES;
 }