diff --git a/Engine/Build/Commit.gitdeps.xml b/Engine/Build/Commit.gitdeps.xml
index cfc7ec7e2798..af2353910d43 100644
--- a/Engine/Build/Commit.gitdeps.xml
+++ b/Engine/Build/Commit.gitdeps.xml
@@ -39578,7 +39578,7 @@
-
+
@@ -42872,6 +42872,7 @@
+
@@ -64114,7 +64115,6 @@
-
@@ -69657,7 +69657,6 @@
-
@@ -71867,6 +71866,7 @@
+
diff --git a/Engine/Plugins/Online/VoiceChat/VivoxVoiceChat/Source/Private/IOS/IOSVivoxVoiceChat.cpp b/Engine/Plugins/Online/VoiceChat/VivoxVoiceChat/Source/Private/IOS/IOSVivoxVoiceChat.cpp
index 941bc77ff4a8..5279030c6dfd 100644
--- a/Engine/Plugins/Online/VoiceChat/VivoxVoiceChat/Source/Private/IOS/IOSVivoxVoiceChat.cpp
+++ b/Engine/Plugins/Online/VoiceChat/VivoxVoiceChat/Source/Private/IOS/IOSVivoxVoiceChat.cpp
@@ -42,6 +42,8 @@ bool FIOSVivoxVoiceChat::Initialize()
}
}
+ vx_set_platform_aec_enabled(1);
+
bInBackground = false;
bShouldReconnect = false;
bIsRecording = false;
@@ -127,6 +129,11 @@ void FIOSVivoxVoiceChat::OnVoiceChatDisconnectComplete(const FVoiceChatResult& R
}
}
+void FIOSVivoxVoiceChat::SetVivoxSdkConfigHints(vx_sdk_config_t &Hints)
+{
+ Hints.dynamic_voice_processing_switching = 0;
+}
+
void FIOSVivoxVoiceChat::HandleApplicationWillEnterBackground()
{
UE_LOG(LogVivoxVoiceChat, Log, TEXT("OnApplicationWillEnterBackgroundDelegate"));
diff --git a/Engine/Plugins/Online/VoiceChat/VivoxVoiceChat/Source/Private/IOS/IOSVivoxVoiceChat.h b/Engine/Plugins/Online/VoiceChat/VivoxVoiceChat/Source/Private/IOS/IOSVivoxVoiceChat.h
index e1535caf12c4..17284d167e62 100644
--- a/Engine/Plugins/Online/VoiceChat/VivoxVoiceChat/Source/Private/IOS/IOSVivoxVoiceChat.h
+++ b/Engine/Plugins/Online/VoiceChat/VivoxVoiceChat/Source/Private/IOS/IOSVivoxVoiceChat.h
@@ -22,6 +22,8 @@ protected:
virtual void onConnectCompleted(const VivoxClientApi::Uri& Server) override;
virtual void onDisconnected(const VivoxClientApi::Uri& Server, const VivoxClientApi::VCSStatus& Status) override;
// ~End DebugClientApiEventHandler Interface
+
+ void SetVivoxSdkConfigHints(vx_sdk_config_t &Hints) override;
private:
void OnVoiceChatConnectComplete(const FVoiceChatResult& Result);
diff --git a/Engine/Source/ThirdParty/Vivox/vivox-sdk/Include/Vxc.h b/Engine/Source/ThirdParty/Vivox/vivox-sdk/Include/Vxc.h
index bfc8471a0f62..0e8528b70e59 100644
--- a/Engine/Source/ThirdParty/Vivox/vivox-sdk/Include/Vxc.h
+++ b/Engine/Source/ThirdParty/Vivox/vivox-sdk/Include/Vxc.h
@@ -2808,6 +2808,68 @@ typedef enum {
VIVOXSDK_DLLEXPORT char *vx_get_path(unsigned int path_id);
+/**
+ * Gets current value of dynamic voice processing switching enabled setting
+ *
+ * @return - 0 if disabled, 1 if enabled.
+ */
+VIVOXSDK_DLLEXPORT int vx_get_dynamic_voice_processing_switching_enabled();
+
+/**
+ * Enables and disables dynamic voice processing switching
+ *
+ * @param enabled - 0 to disable, 1 to enable dynamic voice processing switching
+ * @return - 0 if successful, non-zero if failed (SDK not initialized).
+ */
+VIVOXSDK_DLLEXPORT int vx_set_dynamic_voice_processing_switching_enabled(int enabled);
+
+/**
+ * Returns whether platform-provided AEC is being used.
+ *
+ * @return - 0 if disabled, 1 if enabled.
+ */
+VIVOXSDK_DLLEXPORT int vx_get_platform_aec_enabled();
+
+/**
+ * Enables and disables platform-provided AEC
+ * This function is only effective if dynamic voice processing switching is off.
+ *
+ * @param enabled - 0 to disable, 1 to enable platform AEC
+ * @return - 0 if successful, non-zero if failed (SDK not initialized).
+ */
+VIVOXSDK_DLLEXPORT int vx_set_platform_aec_enabled(int enabled);
+
+/**
+ * Enable/disable SDK's internal AEC. Enabling does not force AEC usage, but alows SDK to use
+ * the AEC when it is required.
+ *
+ * @return 0 if successful, non-zero if failed (SDK not initialized, internal AEC is not supported).
+ */
+VIVOXSDK_DLLEXPORT int vx_set_vivox_aec_enabled(int enabled);
+
+/**
+ * Get the internal AEC enabled/disabled state. Enabling does not force AEC usage, but alows SDK to use
+ * the AEC when it is required.
+ *
+ * @return 0 if successful, non-zero if failed (SDK not initialized, internal AEC is not supported).
+ */
+VIVOXSDK_DLLEXPORT int vx_get_vivox_aec_enabled(int *enabled);
+
+/**
+ * Enable/disable SDK's internal AGC. Enabling does not force AGC usage, but alows SDK to use
+ * the AGC when it is required.
+ *
+ * @return 0 if successful, non-zero if failed (SDK not initialized, internal AGC is not supported).
+ */
+VIVOXSDK_DLLEXPORT int vx_set_agc_enabled(int enabled);
+
+/**
+ * Get the internal AGC enabled/disabled state. Enabling does not force AGC usage, but alows SDK to use
+ * the AGC when it is required.
+ *
+ * @return 0 if successful, non-zero if failed (SDK not initialized, internal AGC is not supported).
+ */
+VIVOXSDK_DLLEXPORT int vx_get_agc_enabled(int *enabled);
#ifdef __cplusplus
}
diff --git a/Engine/Source/ThirdParty/Vivox/vivox-sdk/Include/VxcRequests.h b/Engine/Source/ThirdParty/Vivox/vivox-sdk/Include/VxcRequests.h
index 052e93d46c3f..2e8991425260 100644
--- a/Engine/Source/ThirdParty/Vivox/vivox-sdk/Include/VxcRequests.h
+++ b/Engine/Source/ThirdParty/Vivox/vivox-sdk/Include/VxcRequests.h
@@ -4256,12 +4256,16 @@ VIVOXSDK_DLLEXPORT int vx_req_aux_get_vad_properties_create(vx_req_aux_get_vad_p
#endif
/**
- * This method is used to set the connector VAD (Voice Activity Detector) properties.
- * It can only be invoked successfully if neither the capture audio thread or the msopenal are active.
- *
- * \see vx_req_aux_set_vad_properties
- * \ingroup devices
- */
+* This method is used to set the connector VAD (Voice Activity Detector) properties.
+* Most properties will update while capture audio is active.
+* Properties that require capture audio restart (i.e. rejoining a voice channel):
+* vad_noise_floor
+* Properties that update while capture audio is active:
+* vad_hangover, vad_sensitivity, vad_auto
+*
+* \see vx_req_aux_set_vad_properties
+* \ingroup devices
+*/
typedef struct vx_req_aux_set_vad_properties {
/**
* The common properties for all requests.
@@ -4278,11 +4282,15 @@ typedef struct vx_req_aux_set_vad_properties {
*/
int vad_sensitivity;
/**
- * The 'vad noise floor' - A dimensionless value between 0 and 20000 (default 576) that controls how the vad separates speech from background noise
+ * The 'vad noise floor' - A dimensionless value between 0 and 20000 (default 576) that controls the
+ * maximum level at which the noise floor may be set at by the VAD's noise tracking.
+ * Too low of a value will make noise tracking ineffective (A value of 0 disables noise tracking and the VAD then relies purely on the sensitivity property).
+ * Too high of a value will make long speech classifiable as noise.
*/
int vad_noise_floor;
/**
- * VAD Automatic Parameter Selection - If this mode is 1 (enabled), then vad_hangover, vad_sensitivity, and vad_noise_floor will be ignored and the VAD will optimize parameters automatically
+ * VAD Automatic Parameter Selection - If this mode is 1 (enabled), then vad_hangover, vad_sensitivity,
+ * and vad_noise_floor will be ignored and the VAD will optimize parameters automatically.
*/
int vad_auto;
} vx_req_aux_set_vad_properties_t;
diff --git a/Engine/Source/ThirdParty/Vivox/vivox-sdk/Include/VxcTypes.h b/Engine/Source/ThirdParty/Vivox/vivox-sdk/Include/VxcTypes.h
index aaf03e13a0a2..39f9d068a06e 100644
--- a/Engine/Source/ThirdParty/Vivox/vivox-sdk/Include/VxcTypes.h
+++ b/Engine/Source/ThirdParty/Vivox/vivox-sdk/Include/VxcTypes.h
@@ -401,6 +401,13 @@ typedef struct vx_sdk_config {
* Currently this function is called only on specific platforms. Please contact Vivox for more information.
*/
int (*pf_request_permission_for_network)(void);
+
+ /**
+ * Enable Dynamic Voice Processing Switching. Default value is 1.
+ * If enabled, the SDK will automatically switch between hardware and software AECs.
+ * To disable set value to 0.
+ */
+ int dynamic_voice_processing_switching;
} vx_sdk_config_t;
#ifdef __cplusplus
diff --git a/Engine/Source/ThirdParty/Vivox/vivox-sdk/Include/vivox-config.h b/Engine/Source/ThirdParty/Vivox/vivox-sdk/Include/vivox-config.h
index 49dda5d0645d..e0965ea44f3e 100644
--- a/Engine/Source/ThirdParty/Vivox/vivox-sdk/Include/vivox-config.h
+++ b/Engine/Source/ThirdParty/Vivox/vivox-sdk/Include/vivox-config.h
@@ -23,13 +23,13 @@
*/
#pragma once
-#define SDK_VERSION "4.9.0002.31944"
+#define SDK_VERSION "4.9.0002.32020"
#define SDK_BRANCH "HEAD"
#define VERSION_MAJOR 4
#define VERSION_MINOR 9
/* so VERSION_MICRO (.e.g. 0008) is not interpreted as octal */
#define VERSION_MICRO (10002 - 10000)
-#define VERSION_BUILD 31944
+#define VERSION_BUILD 32020
-#define VERSION_HASH "cd26a60b"
+#define VERSION_HASH "43e5c38d"