HomeAndroidDelivering 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 practical 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 may develop because it approaches from behind and taper off because it swims away. Learn on to be taught extra about Android’s help for spatial audio and easy methods to implement the characteristic in your app.

Spatial audio on Android

There are two principal distinctions of spatial audio:

  • With static spatial audio, the sounds are anchored to the consumer and transfer with them. A hen 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 atmosphere across the consumer. By turning their head to the left, the consumer will now hear the hen chirping in entrance of them.
ALT TEXT

On Android, solely multi-channel audio configured with the precise AudioAttributes and AudioFormat is spatialized by default, although OEMs can customise this habits. On units the place the OEM has built-in a spatializer impact, static spatial audio will work when any headset is linked 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 out there to their customers.

Implementing & testing spatial audio

The best strategy to combine with this characteristic is to make use of ExoPlayer! In case 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 habits will keep in mind 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 degree 32) added the brand new Spatializer class to permit you to question the spatialization capabilities of the machine. There are 4 circumstances that should all be true for the machine 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 out. To additional test if head monitoring is accessible, you may name the isHeadTrackerAvailable() methodology. The Spatializer class additionally consists of the next listeners to have the ability to react to adjustments within the machine’s state:

OnSpatializerStateChangedListener

For adjustments in whether or not the spatializer is enabled or out there.

OnHeadTrackerAvailableListener

For adjustments in whether or not head monitoring is accessible.

With these alerts, you may manually modify your playback for spatial audio. Observe that in case you are not utilizing ExoPlayer, it’s best to make certain to configure the decoder to output multi-channel audio when attainable 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 may as a substitute 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 linked 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 > Related units > Gear icon on your wi-fi machine > Spatial audio.

Observe that for spatial audio with head monitoring, the headset should have head monitoring sensors which might be appropriate with the machine, reminiscent of Pixel Buds Professional with a Pixel cellphone, and head monitoring should even be enabled in settings.

Subsequent steps

Listening to is believing, so we extremely suggest attempting 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 all the pieces mentioned right here, try our spatial audio developer information.

RELATED ARTICLES

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Most Popular

Recent Comments