Sunday, June 11, 2023
HomeMobileDelivering an immersive sound expertise with Spatial Audio

Delivering an immersive sound expertise with Spatial Audio

Posted by Nevin Mital – Developer Relations Engineer, Android Media

In Android 13 (API degree 33), we launched a brand new standardized platform structure for spatial audio, a premium and extra partaking sound expertise. With spatial audio, your content material sounds extra real looking to customers by making it sound as if they’re in the midst of the motion. The person devices from a band could be separated and “positioned” across the consumer, or the sound from a whale would possibly 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 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, regardless of how they flip or transfer their head.
  • With spatial audio with head monitoring, the sounds are positioned within the surroundings 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 fitting 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 gadget, although head-tracked spatial audio requires a headset with appropriate head monitoring sensors. OEMs like Pixel, OnePlus, and Xiaomi have already made these experiences accessible to their customers.

Implementing & testing spatial audio

The best option to combine with this characteristic is to make use of ExoPlayer! Should you use ExoPlayer from Jetpack Media3 launch 1.0.0 or newer, ExoPlayer will configure the decoder to forestall multi-channel audio from being downmixed to stereo and the default observe choice conduct will take into consideration 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 gadget’s state and choose a multi-channel observe when spatialization is feasible, or change to a stereo observe if not.

Android 12L (API degree 32) added the brand new Spatializer class to help you question the spatialization capabilities of the gadget. There are 4 situations that should all be true for the gadget to output spatialized audio:

val audioManager = getSystemService(Context.AUDIO_SERVICE) as AudioManager
val spatializer = audioManager.spatializer

if (

spatializer.immersiveAudioLevel != Spatializer.SPATIALIZER_IMMERSIVE_LEVEL_NONE

&& spatializer.isEnabled

&& spatializer.isAvailable

&& spatializer.canBeSpatialized(audioAttributes, audioFormat)
) {

} else {


ExoPlayer performs these checks when deciding which audio observe to pick. To additional examine if head monitoring is on the market, you possibly can name the isHeadTrackerAvailable() methodology. The Spatializer class additionally consists of the next listeners to have the ability to react to modifications within the gadget’s state:


For modifications in whether or not the spatializer is enabled or accessible.


For modifications in whether or not head monitoring is on the market.

With these alerts, you possibly can manually modify your playback for spatial audio. Notice that if you’re not utilizing ExoPlayer, you must make sure that to configure the decoder to output multi-channel audio when potential by setting the max channel depend 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 forestall spatialization relying in your use-case. In case your audio is already spatialized, name setIsContentSpatialized(true) when configuring the AudioAttributes on your audio stream to forestall the audio from being double-processed. In all different instances, you possibly can as a substitute name setSpatializationBehavior(AudioAttributes.SPATIALIZATION_BEHAVIOR_NEVER) to disable spatialization altogether.

As talked about beforehand, utilizing spatial audio requires a supported gadget (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 on your wi-fi gadget > Spatial audio.

Notice that for spatial audio with head monitoring, the headset should have head monitoring sensors which might be appropriate with the gadget, equivalent to Pixel Buds Professional with a Pixel telephone, and head monitoring should even be enabled in settings.

Subsequent steps

Listening to is believing, so we extremely suggest 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 little thing mentioned right here, take a look at our spatial audio developer information.



Please enter your comment!
Please enter your name here

Most Popular

Recent Comments