設定音訊政策

Android 10 版本包含大幅重構音訊。 政策管理工具,以更靈活的方式支援複雜的汽車用途:

  • 原始設備製造商 (OEM) 專用的轉送策略。
  • 可自訂音量群組 (適用於使用相同磁碟區曲線的舊版串流類型群組)。
  • 音訊政策引擎宣告的轉送策略 (而非硬式編碼)。
  • 音量曲線和群組是由音訊政策引擎管理。
  • 內部重構,為日後在通用程式碼和可設定程式碼之間分割作業做好準備 以及功能更豐富的音訊裝置管理服務比方說,除了使用所有裝置屬性外 政策規則的類型

Android 7.0 推出了適用於 描述音訊拓撲

必須使用以下項目的舊版 Android 版本: device/<company>/<device>/audio/audio_policy.conf 宣告產品中顯示的音訊裝置 (您可以 這是 Galaxy Nexus 音訊硬體檔案 device/samsung/tuna/audio/audio_policy.conf)。不過,CONF 是 使用簡單、專屬格式,過度著重說明複雜的拓撲 例如電視和汽車產業

Android 7.0 已淘汰 audio_policy.conf 並加入支援 使用 XML 檔案格式來定義音訊拓撲, 人類可讀、提供多種編輯與剖析工具,而且靈活有彈性 足以描述複雜的音訊拓撲Android 7.0 採用 用於選擇 XML 的 USE_XML_AUDIO_POLICY_CONF 建構旗標 設定檔的格式。

XML 格式的優點

如同 CONF 檔案,XML 檔案可讓您定義數字和類型 例如輸出和輸入串流設定檔、可用於播放和擷取的裝置,以及 音訊屬性。此外,XML 格式還提供下列強化功能:

  • 在 Android 10 中,有多個啟用的錄音應用程式 允許同時允許多個物件
    • 不會因並行情況而拒絕開始錄製。
    • registerAudioRecordingCallback(AudioManager.AudioRecordingCallback cb) 回呼會通知用戶端擷取路徑變更。
  • 在下列情況中,用戶端會取得靜音音訊樣本:
    • 已啟用會保障隱私權的用途 (例如 VOICE_COMMUNICATION)。
    • 用戶端沒有前景服務或前景 UI。
    • 特殊角色可由政策認可:
      • 無障礙服務:即使已啟用隱私保護用途,也能錄製。
      • Google 助理:在頂端顯示使用者介面時,考量隱私權受到保護。
  • 音訊設定檔的結構類似於 HDMI 簡單音訊描述元,可帶來不同的 各種音訊格式的取樣率/頻道遮罩組合。
  • 裝置和串流之間所有可能的連線都有明確定義。 在過去,隱含規則能讓所有連接到同一個 HAL 的裝置 模組,防止音訊政策控制使用音訊修補程式要求的連線 相互整合XML 格式的拓撲說明定義了連線限制。
  • 支援 包括,避免重複提交標準 A2DP、USB 或重新轉送 定義。
  • 音量曲線可以自訂。磁碟區資料表原本是以硬式編碼的方式寫入。在 XML 中 磁碟區資料表的相關說明,且可自訂。

這裡的範本 frameworks/av/services/audiopolicy/config/audio_policy_configuration.xml 其中顯示許多使用中的功能

檔案格式和位置

新的音訊政策設定檔是 audio_policy_configuration.xml,位於 /system/etc。以下範例顯示 XML 檔案格式適用於 Android 12 及以下版本 Android 12。

頂層結構包含對應至各個音訊 HAL 的模組 硬體模組,其中每個模組都有混合通訊埠、裝置通訊埠的清單 路徑:

  • Mix 通訊埠說明串流的可能設定設定檔 可在音訊 HAL 中開啟以播放及擷取
  • 裝置通訊埠是指可連接的裝置 (以及位址和音訊屬性,如適用)。
  • 「Routes」與混合通訊埠描述元是分開的。 啟用裝置之間的路徑說明,或可將路線串流至裝置。

磁碟區表是簡單的清單,定義用於翻譯的曲線 從 UI 索引到 dB 中的磁碟區獨立的 include 檔案會提供預設值 但針對特定用途和裝置類別的每個曲線 覆寫。

包含的檔案

XML 包容 (XInclude) 方法可用來納入音訊政策 設定資訊。所有包含的檔案都必須 遵循上述結構,並有下列限制:

  • 檔案中只能包含頂層元素。
  • 檔案不可包含 XInclude 元素。

用途是避免複製標準 Android 開放原始碼計畫 (AOSP) 音訊 HAL 模組設定資訊至所有音訊政策設定 檔案 (較容易發生錯誤)。標準音訊政策設定 XML 檔案 為下列音訊 HAL:

  • A2DP: a2dp_audio_policy_configuration.xml
  • 重新轉送子合輯: rsubmix_audio_policy_configuration.xml
  • USB: usb_audio_policy_configuration.xml

音訊政策程式碼組織

AudioPolicyManager.cpp 分成多個模組 簡化維護和設定流程機構 frameworks/av/services/audiopolicy 包含 後續單元

Module 說明
/managerdefault 包含全體使用者通用的一般介面和行為實作 應用程式。和包含引擎的 AudioPolicyManager.cpp 類似 以及常見概念
/common 定義基本類別 (例如輸入輸出音訊串流的資料結構) 設定檔、音訊裝置描述元、音訊修補程式,以及音訊連接埠)。這之前 在 AudioPolicyManager.cpp 內定義。
/engine

實作規則,定義要使用的裝置和磁碟區 針對特定用途可透過一般介面實作標準介面, 根據特定播放/擷取用途取得適當裝置,或 設定連線裝置或外部狀態 (即強制使用的呼叫狀態), 可能會變更轉送決策

我們提供兩個版本:「可設定」和「預設」。 如要瞭解如何選取版本,請參閱 使用參數架構進行設定

/engineconfigurable 採用「參數架構」的政策引擎導入作業 (請見下方說明)。 設定取決於「參數架構」和政策 由 XML 檔案定義
/enginedefault 根據舊版 Android 音訊政策管理工具實作的政策引擎 。這是預設設定,並且包含硬式編碼規則 對應到 Nexus 和 Android 開放原始碼計畫實作項目。
/service 包含使用以下程式碼的繫結器介面、執行緒和鎖定實作: 與架構其餘部分通訊

使用參數架構進行設定

音訊政策程式碼有條不紊,方便您理解及 同時支援完全由系統設定的音訊政策 檔案。機構和音訊政策設計是以 Intel 的參數為基礎 處理參數的外掛程式式和規則式架構。

透過可設定的音訊政策,廠商原始設備製造商 (OEM) 可執行以下動作:

  • 在 XML 中說明系統的結構及其參數。
  • 編寫 (在 C++ 中) 或重複使用後端 (外掛程式) 以存取描述 參數。
  • 定義 (使用 XML 或特定網域語言) 條件/規則, 某個參數必須採用指定值。

Android 開放原始碼計畫提供使用 參數的音訊政策設定檔範例 Frameworks/av/services/audiopolicy/engineconfigurable/parameter-framework/example/Settings/PolicyConfigurableDomains.xml 中的架構。適用對象 請參閱有關 參數架構

在 Android 10 以下版本中,可設定的音訊政策 是透過建構選項 USE_CONFIGURABLE_AUDIO_POLICY 選取。 在 Android 11 以上版本中,音訊政策的版本 已在 audio_policy_configuration.xml 檔案中選取引擎。 如要選取可設定的音訊政策引擎,請設定 engine_library 的值 將 globalConfiguration 元素的屬性設定為 configurable 如以下範例所示:

<audioPolicyConfiguration>
    <globalConfiguration engine_library="configurable" />
...
</audioPolicyConfiguration>

音訊政策路由 API

Android 6.0 導入了公開列舉和選取 API, 並且允許應用程式 開發人員,藉此指示特定裝置輸出或輸入來源的偏好設定 連結的音訊記錄或音軌。

在 Android 7.0 中,CTS 測試會驗證 Enumeration API 和 Selection API ,且延伸至原生 C/C++ (OpenSL ES) 音訊串流轉送。 除了新增 取代、合併及淘汰的 AudioRouting 介面 AudioTrack 專屬的明確轉送方法,以及 AudioRecord 類別。

如要進一步瞭解 Enumeration 和 Selection API,請參閱 Android 設定介面OpenSLES_AndroidConfiguration.h 如要進一步瞭解音訊轉送,請參閱 音訊轉送

多管道支援

如果你的硬體和驅動程式支援透過 HDMI 傳輸多聲道音訊,你可以 將音訊串流直接輸出到音訊硬體 (此方法會略過 因此, AudioFlinger 混音器不會混和到兩個聲道)。音訊 HAL 必須公開輸出串流設定檔是否支援多聲道音訊 即便沒有技術背景,也能因這些工具的功能而受益如果 HAL 公開其功能,則預設的政策管理工具 就能透過 HDMI 多頻道播放內容如需實作詳細資料,請參閱 device/samsung/tuna/audio/audio_hw.c

如要表示產品含有多聲道音訊輸出裝置,請編輯 音訊政策設定檔,描述應用程式的多聲道輸出內容 產品。下列範例來自 frameworks/av/services/audiopolicy/config/primary_audio_policy_configuration_tv.xml 顯示「動態」聲道遮罩,表示音訊政策管理工具會查詢頻道 連接後,HDMI 接收器支援的遮罩。

您也可以指定靜態頻道遮罩,例如: AUDIO_CHANNEL_OUT_5POINT1。AudioFlinger 的混音器將 將內容傳送到立體聲的音訊裝置 多聲道音訊。

媒體轉碼器

確認硬體和驅動程式所支援的音訊轉碼器正確無誤 產品範本詳情請參閱 將轉碼器提供給 架構