音頻屬性

音訊播放器支援定義音訊系統如何處理指定來源的路由、音量和焦點決策的屬性。應用程式可以將屬性附加到音訊播放(例如串流服務播放的音樂或新電子郵件的通知),然後將音訊來源屬性傳遞到框架,音訊系統在框架中使用這些屬性做出混合決策並通知應用程式關於系統的狀態。

在 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_MEDIAUSAGE_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 層級抽象化為Contexts

HAL 音訊上下文AudioAttributes 使用
音樂媒體
語音控制使用助手
導航協助_導航_指導
稱呼語音通訊
鈴聲通知_鈴聲
通知通知
警報警報
系統聲音ASSISTANCE_SONIFICATION
未知未知

您可以為任何實例提供以下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 版本的這種映射。

相容性映射:

安卓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 (@隱藏) STREAM_SYSTEM_ENFORCED
CONTENT_TYPE_SONIFICATION
USAGE_VOICE_COMMUNICATION_SIGNALLING
(@隱藏) STREAM_DTMF

已棄用的流類型

Android 9 不建議使用以下汽車使用的串流類型:

  • STREAM_DEFAULT
  • STREAM_VOICE_CALL
  • STREAM_SYSTEM
  • STREAM_RING
  • STREAM_MUSIC
  • STREAM_ALARM
  • STREAM_通知
  • STREAM_BLUETOOTH_SCO
  • STREAM_SYSTEM_ENFORCED
  • 流_DTMF
  • STREAM_TTS
  • STREAM_ACCESSIBILITY

有關更多詳細信息,請參閱汽車音訊