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,以便在硬體上算繪。在車用應用程式中,算繪硬體可以是本機編解碼器 (類似於行動裝置),也可以是車輛實體網路中的遠端處理器。無論是哪種方式,音訊 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 檔案指派給輸出裝置。詳情請參閱「設定音訊政策」。