使用属性

音频播放器支持属性,这些属性定义了音频系统如何处理指定来源的路由、音量和焦点决策。应用可以将属性附加到音频播放(例如,流媒体服务播放的音乐或新电子邮件的通知),然后将音频来源属性传递到框架,音频系统在框架中使用这些属性来制定混音决策,并向应用通知系统状态。

注意:应用还可以将属性附加到录音(例如,视频录制中捕获的音频),但此功能在公共 API 中未公开。

在 Android 4.4 及更早版本中,框架仅使用音频流类型来制定混音决策。但是,基于流类型进行此类决策过于局限,无法在多个应用和设备上生成高质量的输出。例如,在移动设备上,某些应用(即 Google 地图)在 STREAM_MUSIC 流类型上播放驾驶导航;但是,在投影模式下的移动设备上(即 Android Auto),应用无法将驾驶导航与其他媒体流混合。

使用 音频属性 API,应用可向音频系统提供有关特定音频来源的详细信息,包括用途(来源播放的原因)、内容类型(来源播放的内容)、标记(来源应如何播放)和上下文(Android 9 中的新增功能)。语法

AudioAttributes {

mUsage

mContentType

mSource

mFlags

mTags / mFormattedTags / mBundle (key value pairs)

}

用途。指定来源播放的原因,并控制路由、焦点和音量决策。

内容类型。指定来源播放的内容(音乐、电影、语音、音效、未知)。

上下文。抽象到音频 HAL 的用途值。标记。指定来源应如何播放。包括对可听性强制执行(某些国家/地区要求的相机快门声音)和硬件音频/视频同步的支持。

对于动态处理,应用必须区分电影、音乐和语音内容。有关数据本身的信息(例如响度和峰值采样值)也可能很重要。

使用属性

用法指定了流的使用情境,提供了关于声音播放原因和声音用途的信息。用法信息比流类型更具表现力,并允许平台或路由策略优化音量或路由决策。

为任何实例提供以下用法值之一

USAGE_UNKNOWN

USAGE_MEDIA

USAGE_VOICE_COMMUNICATION

USAGE_VOICE_COMMUNICATION_SIGNALLING

USAGE_ALARM

USAGE_NOTIFICATION

USAGE_NOTIFICATION_TELEPHONY_RINGTONE

USAGE_NOTIFICATION_COMMUNICATION_REQUEST

USAGE_NOTIFICATION_COMMUNICATION_INSTANT

USAGE_NOTIFICATION_COMMUNICATION_DELAYED

USAGE_NOTIFICATION_EVENT

USAGE_ASSISTANCE_ACCESSIBILITY

USAGE_ASSISTANCE_NAVIGATION_GUIDANCE

USAGE_ASSISTANCE_SONIFICATION

USAGE_GAME

USAGE_VIRTUAL_SOURCE

USAGE_ASSISTANT

音频属性用法值是互斥的。有关示例,请参阅 USAGE_MEDIA 和 USAGE_ALARM 的定义;有关例外情况,请参阅 AudioAttributes.Builder 的定义。

内容类型

内容类型定义了声音是什么,并表达了内容的一般类别,例如电影、语音或嘟嘟声/铃声。音频框架使用内容类型信息来选择性地配置音频后处理模块。虽然提供内容类型是可选的,但只要内容类型已知,就应包含类型信息,例如为电影流媒体服务使用 CONTENT_TYPE_MOVIE 或为音乐播放应用程序使用 CONTENT_TYPE_MUSIC。

为任何实例提供以下内容类型值之一

CONTENT_TYPE_UNKNOWN (默认)

CONTENT_TYPE_MOVIE

CONTENT_TYPE_MUSIC

CONTENT_TYPE_SONIFICATION

CONTENT_TYPE_SPEECH

音频属性内容类型值是互斥的。有关内容类型的详细信息,请参阅 音频属性 API。

上下文

Android 中的每个声音都由负责的应用程序和生成声音的原因标识;Android 设备使用此信息来确定如何呈现声音。在 Android 8.x 及更低版本中,应用程序可以使用旧版流类型(例如 AudioSystem.STREAM_MUSIC)或 AudioAttributes 报告声音生成原因。在 Android 9 中,AudioAttributes.usage 值在 HAL 级别被抽象为上下文。

HAL 音频上下文

AudioAttributes 用法

MUSIC

MEDIA

VOICE_COMMAND

USAGE_ASSISTANT

NAVIGATION

ASSISTANCE_NAVIGATION_GUIDANCE

CALL

VOICE_COMMUNICATION

RINGTONE

NOTIFICATION_RINGTONE

NOTIFICATION

NOTIFICATION

ALARM

ALARM

SYSTEM_SOUND

ASSISTANCE_SONIFICATION

UNKNOWN

UNKNOWN

您可以为任何实例提供以下 CONTEXT_NUMBER 值之一

MUSIC_CONTEXT // 音乐播放

NAVIGATION_CONTEXT // 导航方向

VOICE_COMMAND_CONTEXT // 语音命令会话

CALL_RING_CONTEXT // 语音通话响铃

CALL_CONTEXT // 语音通话

ALARM_CONTEXT // 来自 Android 的闹钟声音

NOTIFICATION_CONTEXT // 通知

SYSTEM_SOUND_CONTEXT // 用户交互声音(按钮点击等)

标志

标志指定音频框架如何将效果应用于音频播放。为实例提供以下一个或多个标志

FLAG_AUDIBILITY_ENFORCED。请求系统确保声音的可听性。用于满足旧版 STREAM_SYSTEM_ENFORCED 的需求(例如强制相机快门声音)。

HW_AV_SYNC。请求系统选择支持硬件 A/V 同步的输出流。

音频属性标志是非互斥的,可以组合使用。有关这些标志的详细信息,请参阅 音频属性 API。

示例

在此示例中,AudioAttributes.Builder 定义了新 AudioTrack 实例要使用的 AudioAttributes

AudioTrack myTrack = new AudioTrack(

new AudioAttributes.Builder()

.setUsage(AudioAttributes.USAGE_MEDIA)

.setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)

.build(),

myFormat, myBuffSize, AudioTrack.MODE_STREAM, mySession);

兼容性

应用程序开发人员在为 Android 5.0 及更高版本创建或更新应用程序时应使用音频属性。但是,应用程序不是必须利用属性;它们可以仅处理旧版流类型,或者仍然不知道属性(即,不知道它正在播放的内容的通用媒体播放器)。

在这种情况下,框架通过自动将旧版音频流类型转换为音频属性,来保持与旧设备和 Android 版本的向后兼容性。但是,框架不强制或保证跨设备、制造商或 Android 版本的这种映射。

兼容性映射

Android 5.0 及更高版本

Android 4.4 及更早版本

CONTENT_TYPE_SPEECH

USAGE_VOICE_COMMUNICATION

STREAM_VOICE_CALL

CONTENT_TYPE_SONIFICATION

USAGE_ASSISTANCE_SONIFICATION

STREAM_SYSTEM

CONTENT_TYPE_SONIFICATION

USAGE_NOTIFICATION_RINGTONE

STREAM_RING

CONTENT_TYPE_MUSIC

USAGE_UNKNOWN

USAGE_MEDIA

USAGE_GAME

USAGE_ASSISTANCE_ACCESSIBILITY

USAGE_ASSISTANCE_NAVIGATION_GUIDANCE

STREAM_MUSIC

CONTENT_TYPE_SONIFICATION

USAGE_ALARM

STREAM_ALARM

CONTENT_TYPE_SONIFICATION

USAGE_NOTIFICATION

USAGE_NOTIFICATION_COMMUNICATION_REQUEST

USAGE_NOTIFICATION_COMMUNICATION_INSTANT

USAGE_NOTIFICATION_COMMUNICATION_DELAYED

USAGE_NOTIFICATION_EVENT

STREAM_NOTIFICATION

CONTENT_TYPE_SPEECH

(@hide) STREAM_BLUETOOTH_SCO

FLAG_AUDIBILITY_ENFORCED

(@hide) STREAM_SYSTEM_ENFORCED

CONTENT_TYPE_SONIFICATION

USAGE_VOICE_COMMUNICATION_SIGNALLING

(@hide) STREAM_DTMF

注意: @hide 流在框架内部使用,但不是公共 API 的一部分。

已弃用的流类型

Android 9 弃用了以下用于汽车的流类型

STREAM_DEFAULT

STREAM_VOICE_CALL

STREAM_SYSTEM

STREAM_RING

STREAM_MUSIC

STREAM_ALARM

STREAM_NOTIFICATION

STREAM_BLUETOOTH_SCO

STREAM_SYSTEM_ENFORCED

STREAM_DTMF

STREAM_TTS

STREAM_ACCESSIBILITY

有关更多详细信息,请参阅 汽车音频。

友情链接:
Copyright © 2022 暴击魔方福利站 All Rights Reserved.