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
檔案,將音訊內容指派給輸出裝置。詳情請參閱「音訊政策設定」。