Posted by Nevin Mital – Developer Relations Engineer, Android Media
In Android 13 (API stage 33), we launched a brand new standardized platform structure for spatial audio, a premium and extra participating sound expertise. With spatial audio, your content material sounds extra real looking to customers by making it sound as if they’re in the course of the motion. The person devices from a band could be separated and “positioned” across the consumer, or the sound from a whale may develop because it approaches from behind and taper off because it swims away. Learn on to study extra about Android’s assist for spatial audio and find out how to implement the characteristic in your app.
Spatial audio on Android
There are two primary distinctions of spatial audio:
- With static spatial audio, the sounds are anchored to the consumer and transfer with them. A chicken chirping to their left will at all times be on their left, irrespective of how they flip or transfer their head.
- With spatial audio with head monitoring, the sounds are positioned within the atmosphere across the consumer. By turning their head to the left, the consumer will now hear the chicken chirping in entrance of them.
On Android, solely multi-channel audio configured with the appropriate AudioAttributes and AudioFormat is spatialized by default, although OEMs can customise this conduct. On units the place the OEM has built-in a spatializer impact, static spatial audio will work when any headset is related to the machine, although head-tracked spatial audio requires a headset with appropriate head monitoring sensors. OEMs like Pixel, OnePlus, and Xiaomi have already made these experiences obtainable to their customers.
Implementing & testing spatial audio
The simplest method to combine with this characteristic is to make use of ExoPlayer! When you use ExoPlayer from Jetpack Media3 launch 1.0.0 or newer, ExoPlayer will configure the decoder to stop multi-channel audio from being downmixed to stereo and the default observe choice conduct will consider whether or not or not spatialization is feasible. This implies your content material simply wants to incorporate a multi-channel audio observe that ExoPlayer can choose. ExoPlayer will monitor the machine’s state and choose a multi-channel observe when spatialization is feasible, or change to a stereo observe if not.
Android 12L (API stage 32) added the brand new Spatializer class to permit you to question the spatialization capabilities of the machine. There are 4 situations that should all be true for the machine to output spatialized audio:
ExoPlayer performs these checks when deciding which audio observe to pick. To additional verify if head monitoring is on the market, you may name the isHeadTrackerAvailable() technique. The Spatializer class additionally consists of the next listeners to have the ability to react to adjustments within the machine’s state:
With these alerts, you may manually alter your playback for spatial audio. Be aware that if you’re not utilizing ExoPlayer, it is best to ensure that to configure the decoder to output multi-channel audio when doable by setting the max channel rely to a big quantity with MediaFormat.setInteger(MediaFormat.KEY_MAX_OUTPUT_CHANNEL_COUNT, ##
). See how ExoPlayer does this on GitHub. There are two methods to stop spatialization relying in your use-case. In case your audio is already spatialized, name setIsContentSpatialized(true) when configuring the AudioAttributes to your audio stream to stop the audio from being double-processed. In all different circumstances, you may as an alternative name setSpatializationBehavior(AudioAttributes.SPATIALIZATION_BEHAVIOR_NEVER) to disable spatialization altogether.
As talked about beforehand, utilizing spatial audio requires a supported machine (that’s, getImmersiveAudioLevel() does not return SPATIALIZER_IMMERSIVE_LEVEL_NONE) and a related headset. To check spatial audio, begin by ensuring the characteristic is enabled in settings:
- For wired headsets, go to System settings > Sound & vibration > Spatial audio.
- For wi-fi headsets, go to System settings > Linked units > Gear icon to your wi-fi machine > Spatial audio.
Be aware that for spatial audio with head monitoring, the headset should have head monitoring sensors which can be appropriate with the machine, reminiscent of Pixel Buds Professional with a Pixel telephone, and head monitoring should even be enabled in settings.
Listening to is believing, so we extremely advocate making an attempt out spatial audio for your self! You’ll be able to see an instance implementation in our pattern app, Common Android Music Participant. And for extra particulars on every thing mentioned right here, try our spatial audio developer information.