總覽

Android 汽車作業系統 (AAOS) 基於核心 Android 音訊堆疊構建,支援作為車輛資訊娛樂系統運行的用例。 AAOS 負責資訊娛樂聲音(即媒體、導航和通訊),但不直接負責具有嚴格可用性和定時要求的提示音和警告。

雖然 AAOS 提供信號和機制來幫助車輛管理音頻,但最終還是由車輛來決定應該為駕駛員和乘客播放哪些聲音,確保安全關鍵聲音和監管聲音能夠在無幹擾的情況下正確聽到。中斷。

由於 AAOS 利用 Android 音訊堆疊,因此播放音訊的第三方應用程式不需要執行與手機中不同的操作。應用程式的音訊路由由 AAOS 自動管理,如音訊策略配置中所述。

由於 Android 管理車輛的媒體體驗,因此無線電調諧器等外部媒體來源應由應用程式表示,這些應用程式可以處理來源的音訊焦點和媒體鍵事件。

Android 聲音與串流

汽車音響系統處理以下聲音和串流:

image

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

Android 管理來自 Android 應用程式的聲音,控制這些應用程式並根據聲音類型將它們的聲音路由到 HAL 上的輸出裝置:

  • 邏輯流,在核心音訊術語中稱為來源,以音訊屬性標記。

  • 物理流,在核心音訊術語中被稱為設備,混合後沒有上下文資訊。

為了可靠性,外部聲音(來自獨立來源,例如安全帶警告鈴聲)在 Android 外部、HAL 下方甚至在單獨的硬體中進行管理。系統實現者必須提供一個混音器,接受來自 Android 的一個或多個聲音輸入流,然後以適當的方式將這些流與車輛所需的外部聲源組合起來。 Android Control HAL為 Android 外部產生的聲音提供了一種不同的機制來與 Android 通訊:

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

音訊 HAL 實作和外部混音器負責確保聽到安全關鍵的外部聲音,並在 Android 提供的串流中混合並將它們路由到合適的揚聲器。

安卓聲音

應用程式可能具有一個或多個透過標準 Android API 進行互動的播放器(例如,用於焦點控制的AudioManager或用於串流的MediaPlayer ),以發出一個或多個邏輯音訊資料流。此資料可以是單通道單聲道或 7.1 環繞聲,但被路由並視為單一來源。應用程式流與AudioAttributes相關聯,AudioAttributes 向系統提供如何表達音訊的提示。

邏輯流透過 AudioService 傳送,並路由到一個(且僅一個)可用的實體輸出流,每個輸出流都是 AudioFlinger 內混音器的輸出。音訊屬性混合到物理流後,它們就不再可用。

然後,每個物理流都被傳送到音頻 HAL 以在硬體上渲染。在汽車應用程式中,渲染硬體可以是本地編解碼器(類似於行動裝置)或車輛實體網路上的遠端處理器。無論哪種方式,音訊 HAL 實現的工作就是提供實際的樣本數據並使其可聽。

外部串流

不應透過 Android 路由的聲音串流(出於認證或計時原因)可能會直接傳送到外部混音器。從 Android 11 開始,HAL 現在能夠請求這些外部聲音的焦點,以通知 Android,以便它可以採取適當的操作,例如暫停媒體或阻止其他人獲得焦點。

如果外部串流是應與 Android 產生的聲音環境互動的媒體來源(例如,開啟外部調諧器時停止 MP3 播放),則這些外部串流應由 Android 應用程式表示。此類應用程式將代表媒體來源而不是 HAL 請求音訊焦點,並根據需要啟動和停止外部來源來回應焦點通知,以適應 Android 焦點策略。

該應用程式還負責處理媒體按鍵事件,例如播放和暫停。控制此類外部設備的建議機制是HwAudioSource 。要了解更多信息,請參閱在 AAOS 中連接輸入設備

輸出裝置

在音訊 HAL 級別,設備類型AUDIO_DEVICE_OUT_BUS提供用於車輛音訊系統的通用輸出設備。總線設備支援可尋址連接埠(其中每個連接埠都是實體流的端點),並且預計將成為車輛中唯一支援的輸出設備類型。

系統實作可以使用一個總線連接埠來處理所有 Android 聲音,在這種情況下,Android 將所有內容混合在一起並將其作為一個串流提供。或者,HAL 可以為每個CarAudioContext提供一個總線端口,以允許並發傳送任何聲音類型。這使得 HAL 實現可以根據需要混合和迴避不同的聲音。

音訊上下文到輸出設備的分配是透過car_audio_configuration.xml檔案完成的。要了解更多信息,請參閱音訊策略配置