On iOS the
AudioEngine class manages the shared
AVAudioSession instance. Controlling the same
AVAudioSession instance from multiple places can lead to strange audio problems, so when there is an active
AudioEngine instance (one that is running), please avoid calling any
AVAudioSession methods that change its state.
If your app requires access to the microphone and you want to start receiving the microphone audio stream, you can set the
microphoneEnabled flag to true. This reconfigures the audio engine and activates the microphone input.
We recommend disabling the
microphoneEnabled flag when your app does not need to receive the microphone audio stream.
voiceProcessingEnabled flag activates Apple's built-in voice processing feature. This applies echo cancellation and automatic gain control on the microphone input. Using voice processing comes with the following caveats:
- Only mono audio output signal is supported.
- Applies various filters on the output signal.
- User won't be able to set the volume to zero.
Mixing Audio with Other Apps
By default the audio output of multiple audio apps' are non mixable. If you want to allow other apps to play audio while your app is used, you can set the
mixWithOthers flag to true.
The two Bluetooth modes that iOS supports are: A2DP and HFP. A2DP is uni-directional and transfers a high-quality audio stream with up to 2 channels. HFP supports two streams of audio (microphone + audio output) but with lower sample rate (typically below 24 kHz) and it is mono only.
When microphone access is not requested Bluetooth is enabled by default and A2DP is used. In this case no configuration is needed, using HFP is not possible.
When microphone access is requested, both A2DP or HFP can be used. The default is HFP, but A2DP can be enabled by setting the
allowBluetoothA2DP flag. Since A2DP cannot handle two streams, the device's built-in microphone is used and there is no way to read the headset's microphone.