空间音频可提供身临其境的音频体验,让用户能够身临其境 动作的中心,让内容听起来更逼真。声音是 "空间化"创建类似于环绕声的多扬声器效果 而是通过头戴式耳机进行设置

例如,在电影中,汽车的声音可能会在用户身后开始移动, 向前冲,然后慢慢进入远处在视频聊天中,可以使用语音 放在用户周围,方便识别说话者。

如果您的内容使用受支持的音频格式,则可以将空间音频添加到 应用。

查询功能

SpatializerSpatializerAudioManager
val spatializer = audioManager.spatializer
Spatializer spatializer = AudioManager.getSpatializer();
Spatializer getImmersiveAudioLevel()SPATIALIZER_IMMERSIVE_LEVEL_NONEisAvailable()trueisEnabled()truecanBeSpatialized()true

例如,如果没有空间化,可能无法满足这些条件 或在音频输出设备上完全停用该功能。

头部跟踪

isHeadTrackerAvailable()

兼容内容

Spatializer.canBeSpatialized()AudioAttributesAudioFormat AudioAttributes AudioAttributes canBeSpatialized()PlayerAudioAttributesAudioAttributesAudioAttributes.DEFAULT AudioAttributesAudioAttributes.getAudioAttributesV21().audioAttributesAudioAttributes

停用空间音频

setIsContentSpatialized(true)setSpatializationBehavior(AudioAttributes.SPATIALIZATION_BEHAVIOR_NEVER) AudioFormat AudioFormat AudioFormatcanBeSpatialized() Spatializer SpatializerSpatializer.addOnSpatializerStateChangedListener()Spatializer.addOnHeadTrackerAvailableListener() onSpatializerAvailableChanged

ExoPlayer 和空间音频

com.google.android.exoplayer2androidx.media31.0.0-beta01

将 ExoPlayer 依赖项更新到最新版本后,您的应用 需要包含可以空间化的内容

声道数量限制

Spatializer

如需停用声道数量限制,请设置音轨选择参数 如下所示:

exoPlayer.trackSelectionParameters = DefaultTrackSelector.Parameters.Builder(context)
  .setConstrainAudioChannelCountToDeviceCapabilities(false)
  .build()
exoPlayer.setTrackSelectionParameters(
  new DefaultTrackSelector.Parameters.Builder(context)
    .setConstrainAudioChannelCountToDeviceCapabilities(false)
    .build()
);

同样,您也可以更新现有轨道选择器的参数,以停用 声道数量限制如下:

val trackSelector = DefaultTrackSelector(context)
...
trackSelector.parameters = trackSelector.buildUponParameters()
  .setConstrainAudioChannelCountToDeviceCapabilities(false)
  .build()
DefaultTrackSelector trackSelector = new DefaultTrackSelector(context);
...
trackSelector.setParameters(
  trackSelector
    .buildUponParameters()
    .setConstrainAudioChannelCountToDeviceCapabilities(false)
    .build()
);

如果内容包含多个音频,则停用声道数限制 ExoPlayer 最初会选择通道数最多的曲目, 。例如,如果内容包含 多声道音轨和立体声音轨,并且设备支持 ExoPlayer 选择多声道曲目。请参阅 音轨选择:详细了解如何自定义此行为。

音轨选择

当 ExoPlayer 的音频通道数限制 行为已停用,ExoPlayer 不会自动选择音轨 匹配设备空间化程序的属性。相反,您可以 通过设置轨道选择来自定义 ExoPlayer 的轨道选择逻辑 参数。默认情况下,ExoPlayer 选择音频 与初始轨道相同的 MIME 类型 (编码)、通道数和采样率。

更改轨道选择参数

Player.setTrackSelectionParameters()Player.getTrackSelectionParameters()
exoPlayer.trackSelectionParameters = exoPlayer.trackSelectionParameters
  .buildUpon()
  .setMaxAudioChannelCount(2)
  .build()
exoPlayer.setTrackSelectionParameters(
  exoPlayer.getTrackSelectionParameters()
    .buildUpon()
    .setMaxAudioChannelCount(2)
    .build()
);

请注意,在播放过程中更改曲目选择参数可能会导致 播放中断。关于调整播放器轨道的详细信息 选择参数中 轨道选择 部分。

默认空间化行为

Android 中的默认空间化行为包括以下行为 可由原始设备制造商 (OEM) 自定义:

MediaCodecAudioRenderer.javaAudioAttributesusageUSAGE_MEDIAUSAGE_GAMEAudioFormatAudioFormat.CHANNEL_OUT_QUADAudioFormat.CHANNEL_OUT_5POINT1AudioFormat.CHANNEL_OUT_STEREOUtil.getAudioTrackChannelConfig(int channelCount)AudioFormat.ENCODING_PCM_16BIT

测试空间音频

确保在测试设备上启用空间音频:

    如果您使用的是有线耳机,请转到系统设置 >声音和振动 >空间 音频。 对于无线耳机,请转到系统设置 >已连接的设备 >齿轮图标 无线设备 >空间音频。
adb shell dumpsys audio
Spatial audio:
mHasSpatializerEffect:true (effect present)
isSpatializerEnabled:true (routing dependent)