音訊播放器支援屬性,可定義音訊系統如何處理指定來源的路徑、音量和焦點決策。應用程式可以將屬性附加至音訊播放內容 (例如串流服務播放的音樂或新電子郵件通知),然後將音訊來源屬性傳遞至架構,讓音訊系統使用這些屬性做出混音決策,並通知應用程式系統狀態。
在 Android 4.4 以下版本中,這個架構只會使用音訊串流類型做出混合決策。不過,根據串流類型做出這類決策的限制太多,無法在多個應用程式和裝置上產生高品質的輸出內容。舉例來說,在行動裝置上,部分應用程式 (例如 Google 地圖) 會使用 STREAM_MUSIC 串流類型播放行車路線;不過,在投放模式 (例如 Android Auto) 的行動裝置上,應用程式無法將行車路線與其他媒體串流混合。
應用程式可使用 Audio Attribute API,為音訊系統提供特定音訊來源的詳細資訊,包括用途 (來源播放的原因)、內容類型 (來源播放的內容)、標記 (來源應如何播放) 和內容 (Android 9 的新功能)。語法:
AudioAttributes { mUsage mContentType mSource mFlags mTags / mFormattedTags / mBundle (key value pairs) }
- 使用方式。指定來源播放的原因,並控制路徑、焦點和音量決策。
- 內容類型。指定來源播放的內容 (音樂、電影、語音、音訊、不明)。
- 背景資訊。使用值已抽象化為 Audio 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 層級抽象化為 Context。
HAL 音訊環境 | AudioAttributes 用法 |
---|---|
音樂 | 媒體 |
VOICE_COMMAND | USAGE_ASSISTANT |
導航 | ASSISTANCE_NAVIGATION_GUIDANCE |
致電 | VOICE_COMMUNICATION |
RINGTONE | NOTIFICATION_RINGTONE |
通知 | 通知 |
鬧鐘 | 鬧鐘 |
SYSTEM_SOUND | 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 版本的對應關係。
相容性對應:
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
|
已淘汰的串流類型
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
詳情請參閱Automotive Audio。