Acoustic echo cancellation
When an iOS device plays and records audio at the same time, there is the possibility that a capture device could pick up the audio that is playing. The Vivox SDK includes acoustic echo cancellation (AEC), which helps to prevent this type of audio capture from occurring.
By default, the Vivox SDK leverages the platform AEC provided by Apple, which is enabled or disabled by using dynamic voice processing switching (DVPS).
DVPS is enabled by default. To disable DVPS, initialize the Vivox SDK with the dynamic_voice_processing_switching configuration parameter set to 0.
Note: Disabling DVPS is not recommended.
DVPS uses the following logic for enabling or disabling platform AEC:
- When the client attempts to access the microphone (for example, when joining a session), platform AEC gets enabled.
- When the client stops accessing the microphone (for example, when setting the capture device to IAudioDevices::NullDevice() or when leaving all sessions), platform AEC gets disabled.
DVPS causes Vivox to play and record audio by using a Voice-Processing I/O audio unit. It also makes changes to the shared AVAudioSession instance to ensure that the right category and mode are selected. When platform AEC is enabled, the AVAudioSessionCategory is set to AVAudioSessionCategoryPlayAndRecord, and the AVAudioSessionMode is set to AVAudioSessionModeVoiceChat. After all Vivox voice sessions are removed, DVPS automatically switches back to the original AVAudioSession configuration. For optimal results, before you initialize the Vivox SDK, we recommend that you set the AVAudioSessionCategory to AVAudioSessionCategoryPlayback.
DVPS enforces the use of the Bluetooth Headset Profile (HSP) when accessing the microphone on a connected Bluetooth device. This ensures that the headset microphone is used instead of the device microphone to provide a better voice chat experience.