總覽

Android Automotive OS (AAOS) 以 Android 核心音訊堆疊為基礎,可支援在車輛中做為資訊娛樂系統的用途。AAOS 負責提供資訊娛樂音效 (即媒體、導航和通訊),但不直接負責提供有嚴格可用性和時間限制的鈴聲和警示。

雖然 AAOS 提供信號和機制,協助車輛管理音訊,但最終還是要由車輛決定應向駕駛員和乘客播放哪些音訊,確保安全重要音訊和法規音訊不會中斷。

由於 AAOS 會運用 Android 音訊堆疊,因此播放音訊的第三方應用程式不需要採取與手機不同的做法。應用程式的音訊轉送功能會由 AAOS 自動管理,如音訊政策設定中所述。

隨著 Android 管理車輛的媒體體驗,無線電調整器等外部媒體來源應由應用程式代表,其能夠處理來源的音訊焦點和媒體重要事件。

Android 音效和串流

汽車音響系統會處理下列音訊和串流:

圖片

圖 1. 以串流為中心的架構圖。

Android 會管理來自 Android 應用程式的音訊,控制這些應用程式,並根據音訊類型將音訊路由至 HAL 的輸出裝置:

  • 邏輯串流 (在核心音訊名稱中稱為來源) 會加上音訊屬性標記。

  • 實體串流稱為核心音訊命名法中的裝置,在混和之後沒有背景資訊。

為了確保可靠性,外部聲響 (來自獨立來源,例如安全帶警示鈴聲) 會在 Android 外部、HAL 之下,甚至在獨立硬體中管理。系統導入者必須提供混合器,以便接受來自 Android 的一或多個音訊輸入串流,然後以適當方式將這些串流與車輛所需的外部音訊來源結合。Android Control HAL 提供不同的機制,讓 Android 以外產生的聲音能夠傳回 Android:

  • 音訊焦點要求
  • 增益或音量限制
  • 增益和音量變化

音訊 HAL 實作和外部混合器負責確保可聽到安全性至關重要的外部聲音,並混合 Android 提供的串流,並將其路由至適當的喇叭。

Android 音效

應用程式可能會有一或多個透過標準 Android API 互動的播放器 (例如用於焦點控制的 AudioManager,或用於串流的 MediaPlayer),來發出一或多個音訊資料串流。這項資料可能是單聲道或 7.1 環場音效,但會以單一來源進行路由和處理。應用程式串流會與 AudioAttributes 相關聯,後者會向系統提供音訊應如何呈現的提示。

邏輯串流會透過 AudioService 傳送,並路由至一個 (且僅一個) 可用的實體輸出串流,每個串流都是 AudioFlinger 中混合器的輸出內容。音訊屬性混合至實體串流後,就無法再使用。

然後將每個實體串流傳送至 Audio HAL,以便在硬體上轉譯。在車用應用程式中,轉譯硬體可以是本機編解碼器 (類似行動裝置),或車輛實體網路中的遠端處理器。無論如何,Audio HAL 實作功能的任務就是提供實際的取樣資料,並使其可供播放。

外部串流

不應透過 Android 路由的音訊串流 (出於認證或時間因素) 可能會直接傳送至外部混音器。自 Android 11 起,HAL 現在可以要求聚焦這些外部聲音,藉此通知 Android,以便採取適當動作,例如暫停媒體或防止他人失去焦點。

如果外部串流是應與 Android 產生的音訊環境互動的媒體來源 (例如在外部調諧器開啟時停止播放 MP3 播放),這類外部串流應以 Android 應用程式表示。這類應用程式會代表媒體來源 (而非 HAL) 要求音訊焦點,並且會視需要啟動及停止外部來源,以便配合 Android 焦點政策來回應焦點通知。

應用程式也負責處理媒體鍵事件,例如播放和暫停。建議您使用 HwAudioSource 來控制這類外部裝置。詳情請參閱「連結 AAOS 中的輸入裝置」一文。

輸出裝置

在 Audio HAL 層級,裝置類型 AUDIO_DEVICE_OUT_BUS 會提供通用輸出裝置,用於車輛音訊系統。匯流排裝置支援可尋址的通訊埠 (每個通訊埠都是實體串流的端點),且預期為車輛中唯一支援的輸出裝置類型。

系統實作可使用一個匯流排埠來處理所有 Android 音效,在這種情況下,Android 會將所有音效混合在一起,並以單一串流提供。HAL 也可以為每個 CarAudioContext 提供一個匯流排,以便允許任何聲響類型的並行傳送。這樣一來,HAL 實作項目就能視需要混合及降低不同音效的音量。

音訊內容會透過 car_audio_configuration.xml 檔案指派給輸出裝置。詳情請參閱「音訊政策設定」。