The Android 10 release includes the following
requirements for capture with VOICE_COMMUNICATION.
- Implementations should provide an acoustic echo canceler (AEC) on the capture path when
capturing with
VOICE_COMMUNICATION. - If providing an AEC, it must be discoverable and controllable through the SDK API's
AcousticEchoCanceler.
The Android platform provides audio effects on supported devices in the
audiofx package, which is available for developers to access.
For example, the Nexus 10 supports the following preprocessing effects:
Pair with AudioSource instances
Preprocessing effects are paired with the use case mode in which the
preprocessing is requested. In Android app development, a use case is referred
to as an AudioSource instance; and app developers request to use the
AudioSource abstraction instead of the actual audio hardware
device. The Android Audio Policy Manager maps an AudioSource instance to a
given capture path configuration (including device, gain, and pre processing) according
to product-specific rules. The following sources are exposed to developers:
android.media.MediaRecorder.AudioSource.CAMCORDERandroid.media.MediaRecorder.AudioSource.VOICE_COMMUNICATIONandroid.media.MediaRecorder.AudioSource.VOICE_CALLandroid.media.MediaRecorder.AudioSource.VOICE_DOWNLINKandroid.media.MediaRecorder.AudioSource.VOICE_UPLINKandroid.media.MediaRecorder.AudioSource.VOICE_RECOGNITIONandroid.media.MediaRecorder.AudioSource.MICandroid.media.MediaRecorder.AudioSource.DEFAULT
The default preprocessing effects applied for each AudioSource instance
are specified in the /vendor/etc/audio_effects.xml file. To
specify your own default effects for every AudioSource instance, create a
/vendor/etc/audio_effects.xml file and specify the
preprocessing effects to turn on. For an example, see the implementation for
the Nexus 10 in device/samsung/manta/audio_effects.xml.
AudioEffect instances acquire and release a session when created and destroyed,
enabling the effects (such as the Loudness Enhancer) to persist throughout the
session.
The following example enables preprocessing for the VoIP
AudioSource and Camcorder AudioSource instances. By declaring
the AudioSource configuration in this manner, the framework
automatically requests the use of those effects from the HAL.
<preprocess> <stream type="voice_communication"> <apply effect="aec"/> <apply effect="ns"/> </stream> <stream type="camcorder"> <apply effect="agc"/> </stream> </preprocess>
Source tuning
AudioSource tuning doesn't have explicit requirements on audio
gain or audio processing with the exception of voice recognition
(VOICE_RECOGNITION). Requirements for voice recognition include:
- Flat frequency response (+/- 3 dB) from 100 Hz to 4 kHz
- Close-talk config: 90 dB SPL reads RMS of 2500 (16 bit samples)
- Level tracks linearly from -18 dB to +12 dB relative to 90 dB SPL
- THD < 1% (90 dB SPL in 100 to 4000 Hz range)
- Near-ultrasound requirements (for testing, see
Near Ultrasound
Tests):
- Support for
SUPPORT_PROPERTY_MIC_NEAR_ULTRASOUNDas defined in section 7.8.3 of the CDD. - Support for one or both of 44100 or 48000 sampling rates with no band-pass or antialiasing filters.
- Support for
- Effects/preprocessing disabled by default
Examples of tuning different effects for different sources are:
- Noise Suppressor
- Tuned for wind noise suppressor for
CAMCORDER - Tuned for stationary noise suppressor for
VOICE_COMMUNICATION
- Tuned for wind noise suppressor for
- Automatic Gain Control
- Tuned for close-talk for
VOICE_COMMUNICATIONand main phone mic - Tuned for far-talk for
CAMCORDER
- Tuned for close-talk for
Resources
For more information, refer to the following resources:
- Android documentation for audiofx package
- Android documentation for Noise Suppression audio effect
/device/google/crosshatch/audio_effects.xmlfile for the Pixel 3