虛擬音訊驅動程式

虛擬音訊驅動程式可在 Fuchsia 系統上提供可彈性設定的音訊裝置,用於測試、驗證及開發。這類裝置可讓自動化測試套件和開發人員工具充分運用音訊子系統,不必使用實體音訊硬體。

虛擬音訊裝置會在執行階段透過 fuchsia.virtualaudio FIDL 協定動態建立、設定及控制。

架構和驅動程式庫版本

Fuchsia 在來源樹狀結構中提供兩種虛擬音訊驅動程式庫實作項目:新式 virtual-audio 驅動程式庫和 virtual-audio-legacy 驅動程式庫。

功能 現代化驅動程式 (virtual-audio) 舊版驅動程式 (virtual-audio-legacy)
驅動程式架構 驅動程式架構第 2 版 (DFv2) DFv1 / 舊版 DDK
來源路徑 //src/media/audio/drivers/virtual-audio/ //src/media/audio/drivers/virtual-audio-legacy/
套裝方案 / 元件 fuchsia-pkg://fuchsia.com/virtual-audio#meta/virtual-audio-driver.cm fuchsia-pkg://fuchsia.com/virtual-audio-legacy#meta/virtual-audio-legacy-driver.cm
支援的音訊通訊協定 fuchsia.hardware.audio.Composite 淘汰 StreamConfigDaiCodec
資料端點 環形緩衝區、DAI 和封包串流 串流環形緩衝區、動態廣告插播環形緩衝區
信號處理 fuchsia.hardware.audio.signalprocessing 增益和插頭狀態控制項
Devfs / 節點位置 /dev/sys/platform/virtual-audio /dev/sys/platform/virtual-audio-legacy
主要客戶 音訊裝置登錄、新式管道音訊測試、DFv2 驅動程式庫測試 audio_coreaudio-driver-ctl,以及已淘汰通訊協定的測試

新式虛擬音訊驅動程式庫 (virtual-audio)

新式虛擬音訊驅動程式庫會在 Driver Framework v2 中實作 fuchsia.hardware.audio.Composite 通訊協定。

主要功能包括: * 複合拓撲:在單一虛擬裝置中公開環形緩衝區端點、DAI 互連和封包串流端點的組合。 * 信號處理:實作 fuchsia.hardware.audio.signalprocessing API,讓測試設定自訂處理拓撲、增益階段、靜音和等化器元素。* 時脈網域設定:支援設定單調或外部時脈網域,以及動態時脈速率調整,以測試漂移補償和位置通知。* 音訊裝置登錄整合:做為音訊裝置登錄服務的主要模擬和測試驅動程式庫。

舊版虛擬音訊驅動程式庫 (virtual-audio-legacy)

舊版虛擬音訊驅動程式庫是使用舊版 DDK (DFv1) 實作,並提供實作已淘汰音訊通訊協定的虛擬裝置:

  • StreamConfig:公開 fuchsia.hardware.audio.StreamConfigConnector,可建立虛擬音訊輸入和輸出串流 (/dev/class/audio-input/dev/class/audio-output)。
  • 動態廣告插播:公開 fuchsia.hardware.audio.DaiConnector (/dev/class/dai),支援多個並行用戶端連線。
  • 轉碼器:公開 fuchsia.hardware.audio.CodecConnector (/dev/class/codec)。

這個驅動程式庫會保留,用於驗證舊版音訊元件 (例如 audio_coreaudio-driver-ctl),以及驗證已淘汰 FIDL 通訊協定的回溯相容性。

控制和設定 API

虛擬音訊裝置是透過 //sdk/fidl/fuchsia.virtualaudio 中定義的兩種主要 FIDL 通訊協定控制:

  1. fuchsia.virtualaudio.Control

    • GetDefaultConfiguration擷取指定裝置類型 (CompositeStreamConfigDaiCodec) 的預設範本 Configuration
    • AddDevice使用指定的 Configuration 建立及啟用虛擬裝置例項,並繫結 fuchsia.virtualaudio.Device 控制項管道。
    • Enable / Disable在系統上全域啟用或停用虛擬音訊裝置建立作業。
  2. fuchsia.virtualaudio.Device

    • 管理使用中虛擬裝置執行個體的生命週期。
    • 接收格式變更、緩衝區分配和位置更新通知。
    • 允許測試動態模擬硬體事件,例如熱插拔、拔除或調整時脈。
    • 關閉 Device 管道後,系統會自動關閉並移除對應的虛擬裝置。

可設定的裝置屬性

透過 Control.AddDevice 啟用虛擬裝置前,用戶端可以自訂 Configuration 表格中的屬性,包括:

  • 裝置中繼資料: device_namemanufacturer_nameproduct_nameunique_id
  • 支援的格式:支援的樣本格式 (例如 PCM 線性 16/24/32 位元、浮點 32 位元)、管道數和影格率範圍。
  • 緩衝區屬性:最小和最大環形緩衝區大小、先進先出 (FIFO) 深度,以及外部延遲指標。
  • 時鐘設定:時鐘網域規格和費率調整參數。
  • 插頭屬性:硬接線與可拆卸狀態、初始插頭狀態和插頭時間。

測試工作流程

整合驅動程式測試

測試套件 (例如 audio_driver_basic_testsaudio_driver_admin_tests) 可以使用虛擬音訊驅動程式執行獨立的裝置測試,不需要實體硬體,也不需要在系統映像檔中預先安裝平台匯流排節點。

測試可以: * 連線至 devfs 中預先存在的虛擬音訊控制器節點 (/dev/sys/platform/virtual-audio),或 * 在測試固定裝置設定期間,向 Driver Runner 動態註冊暫時性虛擬音訊驅動程式,並在完成後取消註冊。

黃金列舉注意事項

由於測試套件可在目標上動態建立虛擬音訊裝置,因此主機板驅動程式代管程序列舉測試 (例如 driver-host-enumeration-test-*) 會在 golden.json 定義中,將虛擬音訊驅動程式指定為選用 (以 ? 為前置字元):

{
    "drivers": [
        "?fuchsia-pkg://fuchsia.com/virtual-audio#meta/virtual-audio-driver.cm"
    ]
}

這可確保列舉測試在虛擬音訊不存在的最小/乾淨啟動時,以及虛擬音訊元件動態啟用的測試執行期間,都能順利通過。