空间音频可提供身临其境的音频体验,让用户能够身临其境 动作的中心,让内容听起来更逼真。声音是 "空间化"创建类似于环绕声的多扬声器效果 而是通过头戴式耳机进行设置
例如,在电影中,汽车的声音可能会在用户身后开始移动, 向前冲,然后慢慢进入远处在视频聊天中,可以使用语音 放在用户周围,方便识别说话者。
如果您的内容使用受支持的音频格式,则可以将空间音频添加到 应用。
查询功能
Spatializer
Spatializer
AudioManager
val spatializer = audioManager.spatializer
Spatializer spatializer = AudioManager.getSpatializer();
Spatializer
getImmersiveAudioLevel()
SPATIALIZER_IMMERSIVE_LEVEL_NONE
isAvailable()
true
isEnabled()
true
canBeSpatialized()
true
例如,如果没有空间化,可能无法满足这些条件 或在音频输出设备上完全停用该功能。
头部跟踪
isHeadTrackerAvailable()
兼容内容
Spatializer.canBeSpatialized()
AudioAttributes
AudioFormat
AudioAttributes
AudioAttributes
canBeSpatialized()
Player
AudioAttributes
AudioAttributes
AudioAttributes.DEFAULT
AudioAttributes
AudioAttributes.getAudioAttributesV21().audioAttributes
AudioAttributes
停用空间音频
setIsContentSpatialized(true)
setSpatializationBehavior(AudioAttributes.SPATIALIZATION_BEHAVIOR_NEVER)
AudioFormat
AudioFormat
AudioFormat
canBeSpatialized()
Spatializer
Spatializer
Spatializer.addOnSpatializerStateChangedListener()
Spatializer.addOnHeadTrackerAvailableListener()
onSpatializerAvailableChanged
ExoPlayer 和空间音频
com.google.android.exoplayer2
androidx.media3
1.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.java
AudioAttributes
usage
USAGE_MEDIA
USAGE_GAME
AudioFormat
AudioFormat.CHANNEL_OUT_QUAD
AudioFormat.CHANNEL_OUT_5POINT1
AudioFormat.CHANNEL_OUT_STEREO
Util.getAudioTrackChannelConfig(int channelCount)
AudioFormat.ENCODING_PCM_16BIT
测试空间音频
确保在测试设备上启用空间音频:
- 如果您使用的是有线耳机,请转到系统设置 >声音和振动 >空间 音频。 对于无线耳机,请转到系统设置 >已连接的设备 >齿轮图标 无线设备 >空间音频。
adb shell dumpsys audio
Spatial audio:
mHasSpatializerEffect:true (effect present)
isSpatializerEnabled:true (routing dependent)