藍牙低能 (LE) 音訊
本文提供 Windows 11 22H2 版 (KB5026446) 中引進的藍牙 LE 音訊概觀。
簡介
藍牙 LE 音訊可讓串流單播或廣播音訊到藍牙 LE 裝置,並透過不時針傳輸。 從藍牙核心規格 5.3 版開始,主機平台沒有標準定義的主機控制器介面 (HCI)來回傳送和接收藍牙控制器的不時分數據。 本檔會定義 Windows 藍牙廠商特定的音訊路徑 (VSAP),以允許平臺使用廠商特定的解決方案來啟用藍牙 LE 音訊串流。 VSAP 軟體介面會使用本文件中定義的 Windows 音訊類別延伸模組 (ACX) 和更多介面屬性。
術語和必要條件
除了此表格中定義的詞彙之外,本檔也會參考 Windows 音訊類別延伸模組所定義的詞彙。
詞彙 | 定義 |
---|---|
LE 音訊 | 藍牙 LE 音訊的簡短 |
傳統音訊 | 使用免持式設定檔 (HFP) 和進階音訊散發設定檔的藍牙音訊串流 (A2DP) |
音訊裝置 | 單一遠端藍牙 LE 音訊裝置或一組藍牙 LE 音訊裝置,可從 Windows 的觀點共同撰寫單一音訊端點。 |
BAP | 基本音訊配置檔會定義裝置如何使用藍牙低能 (LE) 通訊來散發和取用音訊。 |
TMAP | 電話語音和媒體音訊配置檔會指定較低層級音訊服務和配置檔的互通組態。 |
ASCS | 音訊串流控制服務會定義藍牙 LE 音訊裝置設定及建立單播音訊串流的標準方式。 |
PACS | 已發佈 的音訊功能服務 會定義藍牙 LE 音訊裝置報告其支援的音訊編解碼器功能的標準方式。 |
CIS | Connected Isochronous Streams 傳輸可用來在藍牙 LE 裝置之間傳送和接收單播音訊數據。 |
BIS | 廣播等時串流傳輸用於無連線音訊數據傳輸。 |
ACX | 音訊類別延伸模組的簡短,這是所有音訊驅動程式支援 Windows 上藍牙 LE 音訊所需的驅動程式模型。 |
串流線路 | 廠商特定音訊驅動程式堆疊為其串流路徑所建立的一或多個 ACXCIRCUIT 物件。 |
配置文件線路 | 由 Windows 上的藍牙 LE 音訊配置文件實作所建立的 ACXCIRCUIT 物件。 這個 ACXCIRCUIT 可作為 ACX 規格中所定義的前端線路,不是串流線路。 |
本文件假設熟悉先前定義的詞彙,以及藍牙 Core 5.3 規格中定義的下列 HCI 命令:
- HCI_Read_Local_Supported_Codecs (v2)
- HCI_Read_Local_Supported_Codec_Capabilities
- HCI_LE_Set_CIG_Parameters
- HCI_LE_Create_CIS
- HCI_Configure_Data_Path
- HCI_LE_Setup_ISO_Data_Path
- HCI_LE_Remove_ISO_Data_Path
- HCI_LE_Remove_CIG
藍牙 LE 音訊 VSAP 需要音訊驅動程式才能使用 ACX 架構。 採用 ACX for Bluetooth LE Audio 提供數個優點,例如:
- 支援適用於 Windows 的慣用音訊驅動程式模型。
- 使用ACX的多堆疊音訊解決方案原生支援,而不需要驅動程式之間的專用 DDI。
- 不需要IHV音訊驅動程式將來自音訊系統的要求轉送至藍牙堆棧。 相反地,ACX 可以透過配置檔線路將要求直接傳送至藍牙堆棧。
架構
定義
下列元件涉及不同的 VSAP 架構變體。
Windows ACX 架構
此元件可支援多堆疊音訊端點。 針對藍牙 LE 音訊,組成音訊端點的軟體元件是廠商特定的音訊驅動程式堆疊和 Windows 藍牙 LE 音訊配置檔。
廠商特定的音訊驅動程式堆疊
此廠商特定元件負責透過廠商定義的音訊介面,來回傳送和接收藍牙 LE 音訊數據。 它至少應包含 ACX 串流驅動程式,以管理傳入和傳出音訊數據。 如果 ACX 驅動程式是多重線路 ACX 音訊端點的必要部分,可能會包含更多 ACX 驅動程式。 本檔也稱為IHV ACX串流驅動程式。
Windows 藍牙 LE 音訊配置檔
此元件包含基本音訊配置檔 (BAP)、音量控制配置檔和麥克風控制配置檔的實作。 它負責為每個藍牙 LE 音訊裝置或一組配對的裝置建立前端 ACXCIRCUIT 、報告遠端裝置和藍牙控制器所報告的音訊格式,以及管理不時程通道和群組的狀態。
Windows 藍牙核心堆棧
此元件提供介面,允許 Windows 藍牙 LE 音訊配置檔從本機藍牙控制器查詢支援的編解碼器功能,以及管理不時訊通道和群組的狀態。
LC3 編解碼器
此子元件負責在壓縮的 LC3 音訊與 PCM 音訊之間翻譯。 它應同時支援編碼和譯碼功能,而且可以在軟體中實作,做為廠商特定音訊驅動程式 (VSAP) 堆疊的一部分,或在硬體中實作為音頻 DSP 或藍牙控制器的一部分。 此圖表會以名稱提及 LC3,因為它是藍牙 SIG 支援的標準編解碼器。 不過,Windows 支援的未來編解碼器和廠商特定編解碼器也可能以類似的方式併入架構。
架構變體
藍牙 LE 音訊 VSAP 架構支援不同的串流變體。
- 無音訊卸除的側帶藍牙 LE 音訊串流
- 側帶藍牙 LE 音訊串流與音訊卸除
- 廠商特定的帶藍牙 LE 音訊串流
在下圖中,著色元件是由 IHV 提供,而非陰影元件則由 OS 提供。
無音訊卸除的側帶藍牙 LE 音訊架構
側帶架構會使用廠商特定的音訊介面,允許音訊驅動程式堆疊將音訊數據傳送和接收至藍牙控制器。 此數據路徑與用於其他藍牙數據的 HCI 數據路徑不同,例如在單播用戶端與遠端單播伺服器之間發出訊息訊號。 下圖會建立側帶架構模型,其中 LC3 編解碼器裝載於藍牙控制器中。 將 LC3 編解碼器裝載為廠商特定音訊驅動程式堆疊的軟體編碼和譯碼也是有效的。 在此情況下,傳送至藍牙控制器的音訊會格式化為 LC3 音訊畫面,而不是 PCM 音訊。
下圖顯示藍牙控制器中具有 LC3 編解碼器的側帶藍牙 LE 音訊架構。
下圖顯示具有音訊驅動程式堆疊中 LC3 編解碼器的側帶藍牙 LE 音訊架構。
側帶藍牙 LE 音訊架構與音訊卸除
具有音訊卸除的側帶架構包含音訊 DSP 硬體元件,以提供具有省電優勢的藍牙 LE 音訊串流解決方案。 下圖示範藍牙控制器中的 LC3 編解碼器和音訊 DSP 中編解碼器的可能架構。
下圖顯示具有藍牙控制器中 LC3 編解碼器之音訊卸除架構的側帶藍牙 LE 音訊。
下圖顯示具有音訊卸除架構的側帶藍牙 LE 音訊,以及音訊 DSP 中的 LC3 編解碼器。
廠商特定的帶藍牙 LE 音訊架構
VSAP inband 架構可讓自定義管線將藍牙 LE 音訊數據從廠商特定的音訊驅動程式堆棧傳送和接收到藍牙控制器的 HCI。 此架構包含新的元件「IHV ISO 合併元件」。此元件負責管理 ISO 數據的流程控制。 如果需要傳送任何 HCI 命令,它也應該與 Windows 藍牙核心堆棧共用 HCI 命令流程控制。
下圖顯示廠商特定的帶藍牙 LE 音訊架構。
詳細設計
音訊格式需求
音訊畫面持續時間
藍牙 LE 音訊配置檔允許實作支援音訊串流,音訊畫面持續時間為 7.5 毫秒或 10 毫秒。 Windows 需要 IHV 提供的編解碼器支援這兩個畫面持續時間,以確保與藍牙 LE 音訊配件裝置的互操作性,以及與連線到系統的其他藍牙 LE 裝置的品質共存。
訊號處理模式定義
藍牙 LE 音訊支援各種不同的串流格式,以支援不同的使用者案例。 BAP 和TMAP規格會定義認證的必要支援格式。 Windows 會 套用音訊號處理模式 ,將格式與系統所執行的案例相互關聯。 支援藍牙 LE 音訊的音訊驅動程式應指出下表中訊號處理模式和格式的支援。 此外,藍牙 LE 音訊不支援原始訊號處理模式,因此音訊驅動程式不得公告此模式的任何支援格式。
轉譯串流音訊號處理模式
藍牙 LE 音訊需要針對下列訊號處理模式宣告轉譯音訊格式:
- 預設值 (AUDIO_SIGNALPROCESSINGMODE_DEFAULT)
- 此模式用於單向轉譯案例,例如音樂播放、通知和視頻遊戲音訊。
- 通訊(AUDIO_SIGNALPROCESSINGMODE_COMMUNICATIONS)
- 此模式用於雙向案例,例如語音通話。
下表列出每個使用案例和訊號處理模式的格式。 音訊格式是從最慣用到最不慣用的排序。
線上到立體聲裝置或協調的一組裝置時,系統音效、音樂播放和視頻遊戲音訊
訊號處理模式: 預設值
取樣頻率 | 通道計數 | 位深度 | 框架持續時間 | 音訊數據速率 | BAP 編解碼器組態識別碼 (BAP 規格表 3.11) |
---|---|---|---|---|---|
48 kHz | 2 | 16 | 7.5 毫秒 | 96 kbps | 48_3 |
48 kHz | 2 | 16 | 7.5 毫秒 | 80 kbps | 48_1 |
48 kHz | 2 | 16 | 10 毫秒 | 96 kbps | 48_4 |
48 kHz | 2 | 16 | 10 毫秒 | 80 kbps | 48_2 |
24 kHz | 2 | 16 | 7.5 毫秒 | 48 KBps | 24_1 |
24 kHz | 2 | 16 | 10 毫秒 | 48 KBps | 24_2 |
當連接到協調集的單一成員時,系統音效、音樂播放和視頻遊戲音訊(單一耳塞或助聽器)
訊號處理模式: 預設值
取樣頻率 | 通道計數 | 位深度 | 框架持續時間 | 音訊數據速率 | BAP 編解碼器組態識別碼 (BAP 規格表 3.11) |
---|---|---|---|---|---|
48 kHz | 1 | 16 | 7.5 毫秒 | 96 kbps | 48_3 |
48 kHz | 1 | 16 | 7.5 毫秒 | 80 kbps | 48_1 |
48 kHz | 1 | 16 | 10 毫秒 | 96 kbps | 48_4 |
48 kHz | 1 | 16 | 10 毫秒 | 80 kbps | 48_2 |
24 kHz | 1 | 16 | 7.5 毫秒 | 48 KBps | 24_1 |
24 kHz | 1 | 16 | 10 毫秒 | 48 KBps | 24_2 |
16 kHz | 1 | 16 | 7.5 毫秒 | 32 kbps | 16_1 |
16 kHz | 1 | 16 | 10 毫秒 | 32 kbps | 16_2 |
使用語音聊天轉譯錄音機、VOIP 通話或視頻遊戲音訊
訊號處理模式: 通訊
取樣頻率 | 通道計數 | 位深度 | 框架持續時間 | 音訊數據速率 | BAP 編解碼器組態識別碼 (BAP 規格表 3.11) |
---|---|---|---|---|---|
32 kHz | 1 | 16 | 7.5 毫秒 | 64 kbps | 32_1 |
32 kHz | 1 | 16 | 10 毫秒 | 64 kbps | 32_2 |
24 kHz | 1 | 16 | 7.5 毫秒 | 48 KBps | 24_1 |
24 kHz | 1 | 16 | 10 毫秒 | 48 KBps | 24_2 |
16 kHz | 1 | 16 | 7.5 毫秒 | 32 kbps | 16_1 |
16 kHz | 1 | 16 | 10 毫秒 | 32 kbps | 16_2 |
擷取串流音訊號處理模式
藍牙 LE 音訊需要針對預設 (AUDIO_SIGNALPROCESSINGMODE_DEFAULT) 訊號處理模式宣告擷取音訊格式。 下表列出支援的擷取格式。
音訊格式是從最慣用到最不慣用的排序。
使用語音聊天擷取錄音機、VOIP 通話或視頻遊戲音訊
訊號處理模式: 預設值
取樣頻率 | 通道計數 | 位深度 | 框架持續時間 | 音訊數據速率 | BAP 編解碼器組態識別碼 (BAP 規格表 3.11) |
---|---|---|---|---|---|
32 kHz | 1 | 16 | 7.5 毫秒 | 64 kbps | 32_1 |
32 kHz | 1 | 16 | 10 毫秒 | 64 kbps | 32_2 |
24 kHz | 1 | 16 | 7.5 毫秒 | 48 KBps | 24_1 |
24 kHz | 1 | 16 | 10 毫秒 | 48 KBps | 24_2 |
16 kHz | 1 | 16 | 7.5 毫秒 | 32 kbps | 16_1 |
16 kHz | 1 | 16 | 10 毫秒 | 32 kbps | 16_2 |
定義的數據流組態和拓撲
僅轉譯組態
基本音訊配置檔組態 1
下列音訊組態定義於藍牙 BAP 規格的 表格 4.1 中
計算機會連線到支援單聲道串流的單一音訊裝置。 單一裝置可以是獨立裝置或協調集的單一連線成員。
使用案例範例 | Windows 音訊設定 | 藍牙控制器設定 |
---|---|---|
媒體播放 | 轉譯: 訊號處理模式:預設值 通道計數:1 擷取:無 |
CIS 計數:1 CIG 計數:1 BAP QoS 設定:可靠性高 |
音訊裝置上沒有麥克風的語音通話 | 轉譯: 訊號處理模式:通訊 通道計數:1 擷取:無 |
CIS 計數:1 CIG 計數:1 BAP QoS 設定:低延遲 |
視頻遊戲播放 | 轉譯: 訊號處理模式:預設值 通道計數:1 擷取:無 |
CIS 計數:1 CIG 計數:1 BAP QoS 設定:低延遲 |
基本音訊配置檔組態 4
下列音訊組態定義於藍牙 BAP 規格的 表格 4.1 中
計算機會連線到支援立體聲串流的單一音訊裝置。 音訊裝置能夠處理單一 CIS 上的兩個音訊通道。
使用案例範例 | Windows 音訊設定 | 藍牙控制器設定 |
---|---|---|
媒體播放 | 轉譯:訊號處理模式:預設值 通道計數:2 擷取:無 |
CIS 計數:1 CIG 計數:1 BAP QoS 設定:可靠性音訊通道配置:左前和右前 |
視頻遊戲播放 | 訊號處理模式:預設值 通道計數:2 擷取:無 |
CIS 計數:1 CIG 計數:1 BAP QoS 設定:低延遲 音訊通道配置:左前和右方 |
基本音訊設定檔組態 6(i)
下列音訊組態定義於藍牙 BAP 規格的 表格 4.1 中
計算機會連線到支援立體聲串流的單一音訊裝置。 音訊裝置只能處理兩個 CIS 上的一個音訊通道
使用案例範例 | Windows 音訊設定 | 藍牙控制器設定 |
---|---|---|
媒體播放 | 訊號處理模式:預設值 通道計數:2 擷取:無 |
CIS 計數:2 CIG 計數:1 BAP QoS 設定:可靠性高 |
音訊裝置上沒有麥克風的語音通話 | 訊號處理模式:通訊 通道計數:1 擷取:無 |
CIS 計數:2 CIG 計數:1 BAP QoS 設定:低延遲 音訊通道配置:左前或右方 |
視頻遊戲播放 | 訊號處理模式:預設值 通道計數:2 擷取:無 |
CIS 計數:2 CIG 計數:1 BAP QoS 設定:低延遲 音訊通道配置:左前和右方 |
基本音訊設定檔組態 6(ii)
下列音訊組態定義於藍牙 BAP 規格的 表格 4.1 中
計算機會連線到一組協調的音訊裝置。 此集合能夠處理兩個音訊通道,每個成員處理單一通道。
使用案例範例 | Windows 音訊設定 | 藍牙控制器設定 |
---|---|---|
媒體播放 | 訊號處理模式:預設值 通道計數:2 擷取:無 |
CIS 計數:2 CIG 計數:1 BAP QoS 設定:可靠性高 |
任一裝置上沒有麥克風的語音通話 | 訊號處理模式:通訊 通道計數:1 擷取:無 |
CIS 計數:2 CIG 計數:1 BAP QoS 設定:低延遲 |
視頻遊戲播放 | 訊號處理模式:預設值 通道計數:2 擷取:無 |
CIS 計數:2 CIG 計數:1 BAP QoS 設定:低延遲 |
雙向組態
當藍牙 LE 音訊配置檔偵測到應用程式想要同時建立擷取和轉譯數據流至遠端裝置或一組裝置時,會使用雙向組態。 由於應用程式會分別控制擷取和轉譯數據流,因此IHV音訊驅動程式和藍牙控制器在使用HCI命令設定數據路徑和LE設定ISO資料路徑之後,允許音訊流經雙向CIS的單一方向流動。
基本音訊配置檔組態 3
下列音訊組態定義於藍牙 BAP 規格的 表格 4.1 中
計算機會連線到單一音訊裝置,並在單一 CIS 上建立雙向單一串流。
使用案例 | Windows 音訊設定 | 藍牙控制器設定 |
---|---|---|
語音通話 | 呈現: 訊號處理模式:通訊 通道計數:1 捕獲: 訊號處理模式:預設值 通道計數:1 |
CIS 計數:1 CIG 計數:1 BAP QoS 設定:低延遲 |
使用語音聊天播放視頻遊戲 | 呈現: 訊號處理模式:通訊 通道計數:1 捕獲: 訊號處理模式:預設值 通道計數:1 |
CIS 計數:1 CIG 計數:1 BAP QoS 設定:低延遲 |
基本音訊設定檔組態 8(i)
下列音訊組態定義於藍牙 BAP 規格的 表格 4.1 中
計算機會連線到支援立體聲轉譯串流和單聲道擷取串流的單一音訊裝置。 裝置能夠在單一 CIS 上處理單一 CIS 上的一個音訊通道,以取得指定的方向。
使用案例 | Windows 音訊設定 | 藍牙控制器設定 |
---|---|---|
語音通話 | 呈現: 訊號處理模式:通訊 通道計數:1 捕獲: 訊號處理模式:預設值 通道計數:1 |
CIS 計數:2 CIG 計數:1 BAP QoS 設定:低延遲 |
使用語音聊天播放視頻遊戲 | 呈現: 訊號處理模式:通訊 通道計數:2 捕獲: 訊號處理模式:預設值 通道計數:1 |
CIS 計數:2 CIG 計數:1 BAP QoS 設定:低延遲 |
基本音訊設定檔組態 8(ii)
下列音訊組態定義於藍牙 BAP 規格的 表格 4.1 中
計算機會連線到一組協調的音訊裝置。 每個集合成員都會收到一個轉譯音訊通道。 單一集合成員具有已建立的擷取數據流。 具有擷取數據流的 set 成員是第一個連線到也支援擷取數據流的電腦集合成員。
使用案例 | Windows 音訊設定 | 藍牙控制器設定 |
---|---|---|
語音通話 | 呈現: 訊號處理模式:通訊 通道計數:1 捕獲: 訊號處理模式:預設值 通道計數:1 |
CIS 計數:2 CIG 計數:1 BAP QoS 設定:低延遲 |
使用語音聊天播放視頻遊戲 | 呈現: 訊號處理模式:通訊 通道計數:2 捕獲: 訊號處理模式:預設值 通道計數:1 |
CIS 計數:2 CIG 計數:1 BAP QoS 設定:低延遲 |
僅限擷取組態
基本音訊配置檔組態 2
下列音訊組態定義於藍牙 BAP 規格的 表格 4.1 中
計算機會連線到支援單聲道擷取數據流的單一音訊裝置。
使用案例 | Windows 音訊設定 | 藍牙控制器設定 |
---|---|---|
裝置上沒有喇叭的語音通話 | 轉譯:無 捕獲: 訊號處理模式:預設值 通道計數:1 |
CIS 計數:1 CIG 計數:1 BAP QoS 設定:低延遲 |
基本音訊設定檔組態 9(i)
下列音訊組態定義於藍牙 BAP 規格的 表格 4.1 中
計算機會連線到支援傳送立體聲音頻數據的單一音訊裝置。 裝置能夠在單一 CIS 上編碼一個音訊通道。
使用案例 | Windows 音訊設定 | 藍牙控制器設定 |
---|---|---|
多頻道麥克風擷取 | 轉譯:無 捕獲: 訊號處理模式:預設值 通道計數:1 |
CIS 計數:2 CIG 計數:1 BAP QoS 設定:低延遲 |
基本音訊設定檔組態 9(ii)
計算機會連線到支援單聲道擷取數據流的單一音訊裝置。
下列音訊組態定義於藍牙 BAP 規格的 表格 4.1 中
計算機會連線到一組音訊裝置。 每個集合成員都會將一個音訊通道傳送至計算機。
使用案例 | Windows 音訊設定 | 藍牙控制器設定 |
---|---|---|
多頻道麥克風擷取 | 轉譯:無 捕獲: 訊號處理模式:預設值 通道計數:1 |
CIS 計數:2 CIG 計數:1 BAP QoS 設定:低延遲 |
如果遠端裝置或裝置集支援雙向音訊,則只擷取數據流的設定與雙向設定相同。 這可讓只擷取案例轉換到雙向案例,而不需要重新建立數據流。
資料結構
Microsoft定義的藍牙 LE 音訊介面屬性
串流建立屬性
下列屬性會透過 ACXOBJECTBAG DIS 在廠商特定的音訊驅動程式堆疊和藍牙 LE 音訊配置檔之間共用,以通知串流端點建立和設定的決策,如串流建立案例所示。
BluetoothLEAudio_CodecCapabilities
這個屬性是由音訊驅動程式所設定,表示支援音訊驅動程式或音訊 DSP 中支援的音訊串流功能。 屬性值是使用 DDI AcxObjectBagAddBlob 來設定,而值的格式與 PACS 規格中所定義的 PAC 記錄相同。
Windows 藍牙 LE 音訊配置檔會讀取 屬性,以判斷要使用的可能編解碼器組態和串流組合。
欄位 | 八位位元組 |
---|---|
功能計數 | 0 |
編解碼器標識碼[i] | 1-6 |
編解碼器特定功能長度[i] | 7 |
編解碼器特定功能 | 8... n |
中繼資料長度 (m) | n + 1 |
中繼資料 | n+2...m |
域值定義於 PACS 規格的數據表 3.2 和 3.4 中。
Bluetooth_DatapathID
這個屬性是由音訊驅動程式所設定,以指出做為命令參數的數據路徑標識碼,HCI_LE_Setup_ISO_Data_Path和HCI_Configure_Data_Path。 屬性值是使用 AcxObjectBagAddUI8 DDI 來設定。
藍牙 LE 音訊設定檔會讀取並使用這個屬性,在 HCI_Configure_Data_Path 和 HCI_LE_Setup_ISO_Data_Path 命令中做為參數。 此標識符會套用至針對與物件包相關聯的 ACXSTREAM 所建立的所有異時態數據流。
欄位 | 八位位元組 |
---|---|
數據路徑識別碼 | 0 |
如果音訊驅動程式未設定 屬性,則OS會使用值1作為HCI命令的參數。
Bluetooth_DatapathConfiguration
這個屬性是由音訊驅動程式所設定,可透過 HCI_Configure_Data_Path 命令,為藍牙控制器提供廠商的特定設定。 它不得大於 255 個字節,這是藍牙控制器接受 HCI 命令的最大承載。 屬性值是使用 AcxObjectBagAddBlob DDI 來設定。 此設定會套用至音訊驅動程式所設定的所有資料路徑標識碼。
BluetoothLEAudio_CodecConfiguration
使用 DDI AcxObjectBagAddBlob 設定編解碼器設定後,應該使用藍牙 LE 音訊配置檔來設定這個屬性。 值的結構為:
欄位 | 八位位元組 |
---|---|
組態計數 | 0 |
編碼格式[i] | 3 |
公司標識碼[i] | 1-2 |
廠商特定編解碼器標識碼[i] | 3-4 |
編解碼器特定組態長度[i] | 5 |
編解碼器特定組態[i] | 6... n |
域值定義於藍牙音訊串流控制服務規格的表格 4.3 中。
如果 LC3 編解碼器位於 ACX 串流驅動程式或音訊 DSP 中,廠商特定的音訊驅動程式堆疊應該會讀取此屬性。
介面
音訊端點範本系結標識碼
音訊驅動程式的 ACX 線路處理站用來知道何時建立配對藍牙裝置的 ACX 線路。
下列元件標識碼可用來建立藍牙 LE 音訊線路:
// {5C52FDB5-722A-4AB7-A342-70163B7E9B5C}
DEFINE_GUID(GUID_BLUETOOTH_LEAUDIO_RENDER_COMPONENT_ID,
0x5c52fdb5, 0x722a, 0x4ab7, 0xa3, 0x42, 0x70, 0x16, 0x3b, 0x7e, 0x9b, 0x5c);
// {1DFF2EE3-AE89-441C-BDE3-24F885C55DF8}
DEFINE_GUID(GUID_BLUETOOTH_LEAUDIO_CAPTURE_COMPONENT_ID,
0x1dff2ee3, 0xae89, 0x441c, 0xbd, 0xe3, 0x24, 0xf8, 0x85, 0xc5, 0x5d, 0xf8);
藍牙 LE 音訊支援介面
音訊驅動程式堆疊用來指出其可用於串流藍牙 LE 音訊。 此介面的 Windows 藍牙音訊服務等級監看,並等到發佈後再啟用藍牙 LE 音訊支援。
下列介面標識碼可用來發佈藍牙 LE 音訊支援介面:
// {BA02FA1B-0FD0-4A0F-A748-4FAE2E2D2F67}
DEFINE_GUID(GUID_BLUETOOTH_LEAUDIO_SUPPORT_INTERFACE,
0xba02fa1b, 0x0fd0, 0x4a0f, 0xa7, 0x48, 0x4f, 0xae, 0x2e, 0x2d, 0x2f, 0x67);
序列
音訊驅動程式初始化
當 IHV ACX 串流驅動程式載入並判斷它支援藍牙 LE 音訊串流時,它應該藉由建立 ACXFACTORYCIRCUIT 物件,並使用音頻端點範本系結標識符中 定義的標識元向 ACX 註冊藍牙範本系結,以顯示技術支援。
端點建立
- 當 LE 音訊裝置與系統配對時,藍牙 LE 音訊設定檔:
- 讀取遠端裝置的已發佈音訊功能。
- 藉由傳送命令HCI_Read_Local_Support_Codecs [v2] 和 HCI_Read_Local_Supported_Codec_Capabilities,探索控制器支援的功能。
- 根據藍牙控制器和遠端音訊裝置支援的編解碼器功能,使用所設定的支援格式建立 ACXCIRCUIT。 如果控制器不支援任何編解碼器,因為編解碼器支援位於音訊 DSP 或音訊驅動程式中,則支援的格式會設定為遠端音訊裝置所支援的格式。
- 建立ACXCIRCUIT之後,ACX會要求IHV ACX串流驅動程式的ACX線路處理站建立ACXCIRCUIT以進行串流處理。
- 收到建立線路的要求時,IHV ACX 串流驅動程式:
- 建立 ACXCIRCUIT、ACXPIN、ACXOBJECTBAG 和 ACXSTREAMBRIDGE 物件。
- 如果 LC3 或廠商特定的編解碼器裝載在音訊驅動程式或 DS 中,IHV ACX 串流驅動程式會在 ACXOBJECTBAG 上設定 BluetoothLEAudio_CodecCapabilities 屬性。
- 如果目前已知,IHV ACX 串流驅動程式可能會在 ACXOBJECTBAG 上設定Bluetooth_DatapathID或Bluetooth_DatapathConfiguration。
- 建立這兩個線路之後,ACX 會在 IHV ACX 驅動程式的網橋接釘上叫 用 EvtAcxPinConnected 回呼。
- 叫用 EvtAcxPinConnected 回呼時,IHV ACX 串流驅動程式:
- 使用 AcxTarget 擷取配置檔線路的網橋接點... 用來擷取配置檔線路所支援格式的 API。
- 逐一查看配置檔線路所設定的 ACXDATAFORMAT清單。 如果藍牙音訊編解碼器裝載於音訊驅動程式或音訊 DS 中,則 IHV 音訊驅動程式會使用編解碼器和配置檔線路所支援的格式來更新其 ACXDATAFORMAT。 否則,所有格式都會複製到 IHV ACX 串流驅動程式的主機針腳。
- 如果建立音訊引擎以卸載串流,則會在網橋接上設定更新的格式清單。
- 更新格式之後,ACX 會啟用介面,並建立音訊端點。
串流建立
- 當應用程式要求建立音訊串流時,ACX 會針對每個線路叫用已註冊 的 EvtCircuitCreateStream 回呼,從 IHV ACX 串流驅動程序開始。
- 叫用其 EvtCircuitCreateStream 回呼時,IHV ACX 串流驅動程式:
- 設定或更新附加至 ACXSTREAMBRIDGE 之 ACXOBJECTBAG 上的Bluetooth_DatapathId和Bluetooth_DataPathConfiguration屬性。
- 建立 ACXSTREAM ,並針對串流狀態轉換和 RT 數據流處理設定回呼
- 如果音訊管線支援卸除串流,請在數據流上建立音訊引擎專案。
- 將 ACXSTREAM 新增至其數據流網橋。 這會叫用藍牙 LE 音訊配置檔的 EvtCircuitCreateStream 回呼。
- 叫用其 EvtAcxCircuitCreateStream 回呼時,藍牙 LE 音訊配置檔:
- 從 IHV ACX 串流驅動程式所設定的 ACXOBJECTBAG 本機儲存屬性,以供未來的串流轉換回呼使用。
- 如果音訊端點適用於單播串流藍牙 LE 音訊設定檔:
- 執行 BAP 規格中所定義的設定編解碼器作業。 作業的參數衍生自 EvtAcxCircuitCreateStream 回呼中指定的 ACXDATAFORMAT,以及 ACXOBJECTBAG 中的其他數據流參數或藍牙控制器支援的編解碼器功能。
- 使用用來設定遠端音訊裝置的值,設定 ACXOBJECTBAG 上的 BluetoothLEAudio_CodecConfiguration 屬性。
- 如果 IHV ACX 串流驅動程式需要根據配置檔所設定的物件包值來更新其數據路徑識別碼或資料路徑組態,則可能會叫用 KSPROPERTY 設定作業來更新設定檔線路所儲存的值。
- 建立 ACXSTREAM ,並針對數據流狀態轉換設定回呼。
數據流狀態轉換
ACX 會根據音訊流程決定數據流狀態轉換的線路順序,以及狀態是否轉換為較作用中或較不作用中狀態。
- 對於轉譯數據流從較不使用中狀態到較主動的狀態,配置檔線路會先接收事件,後面接著串流線路。
- 對於轉譯數據流從較使用中狀態到較不作用中的狀態,串流線路會先接收事件,後面接著配置檔線路。
- 針對擷取從較不使用中狀態到較主動狀態的擷取數據流,串流線路會先接收事件,後面接著配置檔線路。
- 針對擷取從較作用中狀態到較不作用中狀態的擷取數據流,配置檔線路會先接收事件,後面接著串流線路。
準備數據流
叫用其 EvtAcxStreamPrepareHardware 回呼時,藍牙 LE 音訊配置檔:
- 透過:
- 使用 HCI_LE_Set_CIG_Parameters 命令設定 CIG。
- 傳送 ASCS 設定 QoS 作業,以同步處理與遠端裝置的設定。
叫用其 EvtAcxStreamPrepareHardware 回呼時,IHV ACX 串流驅動程式會配置必要的串流資源,並將音頻管線初始化為已取得的狀態。
啟動數據流
叫用其 EvtAcxStreamRun 回呼時,藍牙 LE 音訊配置檔:
- 使用 HCI_Configure_Data_Path 命令,在串流建立程式中套用 ACX 串流驅動程式所設定的任何資料路徑組態設定。
- 從下列方式開始資料流啟動程式:
- 執行 BAP 單播資料流 啟用單播資料流的程式:
- 將啟用作業傳送至遠端端端點。
- 如果尚未使用 HCI_LE_Create_CIS 命令來建立 CIS。
- 執行 BAP 單播資料流 啟用單播資料流的程式:
- 如果資料路徑尚未設定,藍牙 LE 音訊設定檔:
- 使用 HCI_LE_Setup_ISO_Data_Path 命令建立 ISO 資料路徑
- 如果 IHV ACX 串流驅動程式設定 BluetoothLEAudio_CodecCapabilities 屬性,HCI_LE_Setup_ISO_Data_Path 中Codec_ID欄位的值應設定為透明 (0x3),如藍牙指派的數位所定義。 否則,此值應該與數據流建立程式中組態編解碼器作業中使用的編解碼器標識元相同。
- 使用 HCI_LE_Setup_ISO_Data_Path 命令建立 ISO 資料路徑
- 如果音訊串流是單播擷取數據流,藍牙 LE 音訊配置檔會執行 BAP 接收者啟動就緒作業。
叫用其 EvtAcxStreamRun 回呼時,IHV ACX 串流驅動程式會開始處理來自 Windows 音訊系統(轉譯)或藍牙控制器的傳入音訊數據(擷取)。
暫停數據流
叫用其 EvtAcxStreamPause 回呼時,藍牙 LE 音訊配置檔:
- 執行 BAP 單播數據流停用程式。
- 使用 HCI_LE_Remove_ISO_Data_Path 命令移除 ISO 資料路徑。
- 如果音訊數據流是單播擷取數據流,則執行 ASCS 接收者停止就緒程式。
叫用其 EvtAcxStreamPause 回呼時,IHV ACX 串流驅動程式會暫停其音訊處理管線。
發行數據流
叫用其 EvtAcxStreamReleaseHardware 回呼時,藍牙 LE 音訊配置檔會執行 BAP 單播數據流發行程式,方法是:
- 將 ASCS 發行作業傳送至遠端藍牙 LE 音訊裝置
- 如果 CIS 未由另一個作用中數據流使用,請中斷連線。
- 如果所有 CIS 都中斷連線,請移除 CIG。
叫用其 EvtAcxStreamReleaseHardware 回呼時,IHV ACX 串流驅動程式會釋放其音訊管線資源。
端點中斷連線
如果遠端單播裝置沒有與計算機的 LE-ACL 連線,或正透過其 PACS 可用的音訊內容回報無法串流,Windows 藍牙 LE 音訊配置檔會更新端點的連線狀態。 當端點中斷連線時,Windows 音訊服務會將任何作用中的數據流失效至端點。 這會導致數據流暫停和釋放順序發生。
端點移除
當配置檔線路或串流線路損毀時,系統會從系統移除藍牙 LE 音訊端點。 從 Windows 移除遠端單播裝置配對或停用藍牙無線電時,可能會移除配置檔線路。
- 當 Windows 藍牙 LE 音訊配置檔移除其線路時,ACX 會停用其端點介面,以向 Windows 音訊服務發出應移除端點的訊號。
- 停用介面時,Windows 音訊服務會將任何作用中串流失效至藍牙 LE 音訊端點,此作業會導致串流暫停,並在串流線路上叫用回呼。
- 若要完成端點移除,ACX 會使 IHV ACX 串流驅動程式的線路失效,這會導致 WDF 叫用線路的清除回呼。
- 叫用其清除回呼時,IHV ACX 串流驅動程式會釋放其線路。
音量和靜音
如果串流驅動程式需要音訊引擎,IHV ACX 串流線路應該只包含音量和靜音元素。 使用音訊引擎時,必須設定組態旗標,如下所示:
ACX_AUDIOENGINE_CONFIG audioEngineCfg;
ACX_AUDIOENGINE_CONFIG_INIT(&audioEngineCfg);
…
audioEngineCfg.Flags |= AcxAudioEngineConfigVolumeSecondary; // Use this control only if endpoint doesn't have one.
audioEngineCfg.MuteElement = muteElement;
audioEngineCfg.Flags |= AcxAudioEngineConfigMuteSecondary; // Use this control only if endpoint doesn't have one.
audioEngineCfg.PeakMeterElement = peakmeterElement;
audioEngineCfg.Flags |= AcxAudioEngineConfigPeakMeterSecondary; // Use this control only if endpoint doesn't have one.
這是允許藍牙 LE 音訊端點使用藍牙 SIG 定義的音量和麥克風控制配置檔,以用於單播音訊端點的音量和靜音變更。
如果遠端藍牙 LE 音訊裝置不支援音量或麥克風控制服務,或針對廣播音訊建立端點,則音訊引擎中的音量和靜音元素應作為後援來處理音訊系統的變更要求。 Windows 音訊系統會處理音量和靜音的變更。 如果沒有音訊引擎,且遠端裝置不支援音量,或麥克風服務或音訊端點用於廣播音訊。
藍牙 LE 和傳統音訊共存
Windows 應確保只有傳統音訊或 LE 音訊適用於支援這兩種技術的配對藍牙音訊裝置。 如果 LE 音訊為使用中,則會停用遠端裝置 A2DP 和 HFP 的側帶 DIS,並針對 LE 音訊端點建立配置文件線路。 如果傳統音訊為使用中,則會啟用遠端裝置的 A2DP 和 HFP 的側帶 DIS,而且不會為 LE 音訊端點建立配置文件線路。
電源管理
藍牙 LE 音訊沒有任何電源管理需求或流程超出 WDF 已定義的流程。