虛擬音訊驅動程式可在 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 |
淘汰 StreamConfig、Dai 和 Codec |
| 資料端點 | 環形緩衝區、DAI 和封包串流 | 串流環形緩衝區、動態廣告插播環形緩衝區 |
| 信號處理 | fuchsia.hardware.audio.signalprocessing |
增益和插頭狀態控制項 |
| Devfs / 節點位置 | /dev/sys/platform/virtual-audio |
/dev/sys/platform/virtual-audio-legacy |
| 主要客戶 | 音訊裝置登錄、新式管道音訊測試、DFv2 驅動程式庫測試 | audio_core、audio-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_core 和 audio-driver-ctl),以及驗證已淘汰 FIDL 通訊協定的回溯相容性。
控制和設定 API
虛擬音訊裝置是透過 //sdk/fidl/fuchsia.virtualaudio 中定義的兩種主要 FIDL 通訊協定控制:
fuchsia.virtualaudio.Control:GetDefaultConfiguration:擷取指定裝置類型 (Composite、StreamConfig、Dai或Codec) 的預設範本Configuration。AddDevice:使用指定的Configuration建立及啟用虛擬裝置例項,並繫結fuchsia.virtualaudio.Device控制項管道。Enable/Disable:在系統上全域啟用或停用虛擬音訊裝置建立作業。
fuchsia.virtualaudio.Device:- 管理使用中虛擬裝置執行個體的生命週期。
- 接收格式變更、緩衝區分配和位置更新通知。
- 允許測試動態模擬硬體事件,例如熱插拔、拔除或調整時脈。
- 關閉
Device管道後,系統會自動關閉並移除對應的虛擬裝置。
可設定的裝置屬性
透過 Control.AddDevice 啟用虛擬裝置前,用戶端可以自訂 Configuration 表格中的屬性,包括:
- 裝置中繼資料:
device_name、manufacturer_name、product_name和unique_id。 - 支援的格式:支援的樣本格式 (例如 PCM 線性 16/24/32 位元、浮點 32 位元)、管道數和影格率範圍。
- 緩衝區屬性:最小和最大環形緩衝區大小、先進先出 (FIFO) 深度,以及外部延遲指標。
- 時鐘設定:時鐘網域規格和費率調整參數。
- 插頭屬性:硬接線與可拆卸狀態、初始插頭狀態和插頭時間。
測試工作流程
整合驅動程式測試
測試套件 (例如 audio_driver_basic_tests 和 audio_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"
]
}
這可確保列舉測試在虛擬音訊不存在的最小/乾淨啟動時,以及虛擬音訊元件動態啟用的測試執行期間,都能順利通過。