Snapdragon 平臺具有適用于任何類型的音頻/語音處理系統的所有必要組件。本文著眼于如何使用 Snapdragon 的藍牙無線電芯片來創建完整的藍牙音頻系統。
將 QCA 藍牙/Wi-Fi 模塊與 Snapdragon 配合使用是藍牙用例的完整解決方案。在本文中,我們將提供一些有關音頻路由和 BlueZ 接口的信息,以使 Snapdragon 平臺(在此示例中為 APQ8009 - Snapdragon 200 系列)成為免提設備。在這個平臺中,我們使用帶有 I2S 接口的 WCD9326 作為前端音頻編解碼器。
QCA 模塊具有專用于 APQ 的總線接口,使用此總線和定制的主機控制器接口 (HCI) 驅動程序,用戶應用程序可以以與以前相同的方式與藍牙接口通信(圖 1)。接口模塊可以使用共享內存基礎通信直接訪問低功耗音頻子系統 (LPASS)。LPASS 是 Hexagon 數字信號處理器 (DSP),它為信號處理應用提供了一個平臺。這意味著需要對藍牙流進行的任何處理都可以在作為 Snapdragon 的一部分的 LPASS 中完成。
【圖1 | 與藍牙接口通信的用戶應用程序]
該平臺上的人機交互 (HCI) 接口是一個共享的、基于內存的驅動程序,您可以將它與各種藍牙堆棧一起使用。我們將使用 BlueZ 作為示例。
使用高級音頻分發配置文件 (A2DP) 接收器和免提配置文件 (HFP),您可以設計出大多數車載套件中的藍牙揚聲器/HFP 設備。
A2DP 接收器配置文件
讓我們完成啟用此配置文件的步驟:
在 BlueZ 配置中啟用配置文件。
在 DBus 配置中啟用正確的消息。使用 。添加與每個接口相關的 DBus 消息dbus_bus_add_match。
開始偵聽 DBus 以獲取與請求連接相關的消息,并提供代理以使用dbus_connection_pop_message.
media_register_endpoint使用 A2DP的正確 UUID 為A2DP 接收器注冊正確的端點。
等待 DBus 上的設置和選擇配置消息,這將由遠程設備觸發。SelectConfiguration 之類的消息將通知 SBC 編解碼器的正確設置。
配置編解碼器(如 SBC)后,收聽播放消息。收到 SetConfiguration 消息后,打開線程進行下一步。
BlueZ 堆棧提供指向來自遠程設備的音頻流的文件指針。
打開該流,讀取數據包,對其進行解碼,然后將它們發送到輸出音頻設備。
在這個級別,LPASS 就位,音頻流將由 DSP 處理。使用 Hexagon DSP 及其軟件開發套件 (SDK),您可以在將其傳遞到 APQ 之前進行任何自定義音頻處理。例如,您可以將低復雜度子帶編碼 (SBC) 解碼留給 DSP 和/或對音頻流進行一些過濾。高級操作系統 (HLOS) 上的音頻接口是標準的。例如,在 Linux/Android 上,高級 Linux 聲音架構 (ALSA) 是音頻層。在 ALSA 端使用混音器命令,您可以控制音頻路由,這為 HLOS 端提供了靈活性。
音頻路由
要設置揚聲器路由,請應用混音器命令來設置 CODEC。
cset “name=‘MI2S_RX Channels’ 1”
cset “name=‘SLIM RX0 MUX’ 1”
cset “name=‘RX INT7_1 MIX1 INP0’ 5”
cset “name=‘COMP7 Switch’ 1”
cset “name=‘SpkrLeft COMP Switch’ 1”
cset “name=‘SpkrLeft BOOST Switch’ 1”
cset “name=‘SpkrLeft SWR DAC_Port Switch’ 1”
cset “name=‘PRI_MI2S_RX Audio Mixer MultiMedia2’ 1”
現在,使用任何將音頻流發送到 MultiMedia2 的播放應用程序將音頻流從 DSP 路由到揚聲器。
免提配置文件
由于 BlueZ 堆棧支持 HFP,我們可以輕松設置對 HFP 的支持,如下所示
設置 BlueZ 配置以支持 HFP。
設置 DBus 配置以獲取 HFP 消息。
使用適當的設置設置語音的 HCI。
hciconfig hci0 類 4C0100
聽取配對請求并提供適當的代理來完成配對。
啟用同步面向連接 (SCO) 連接。
等待 BlueZ 堆棧提供 RFCOMM 和 SCO 套接字。
當 SCO 連接建立后,LPASS 將擁有來自藍牙接口模塊的 TX 和 RX 音頻流。
現在 LPASS(Hexagon DSP)就位。音頻流將通過 DSP 并傳遞到 APQ。使用 DSP 上的現有模塊,您可以輕松地為 HFP 案例設置回聲消除系統。此外,現有的模塊可用于噪聲消除或抑制。
音頻路由
amixer cset name=‘MI2S_RX Channels’ ‘Two’
amixer cset name=‘SLIM RX0 MUX’ ‘AIF1_PB’
amixer cset name=‘SLIM RX1 MUX’ ‘AIF1_PB’
amixer cset name=‘RX INT7_1 MIX1 INP0’ ‘RX0’
amixer cset name=‘RX INT8_1 MIX1 INP0’ ‘RX1’
amixer cset name=‘COMP7 Switch’ 1
amixer cset name=‘COMP8 Switch’ 1
amixer cset name=‘SpkrLeft COMP Switch’ 1
amixer cset name=‘SpkrLeft BOOST Switch’ 1
amixer cset name=‘SpkrLeft VISENSE Switch’ 1
amixer cset name=‘SpkrLeft SWR DAC_Port Switch’ 1
amixer cset name=‘RX7 Digital Volume’ 90
amixer cset name=‘RX8 Digital Volume’ 90
amixer cset name=‘AIF1_CAP Mixer SLIM TX6’ 1
amixer cset name=‘MI2S_TX Channels’ 0
amixer cset name=‘SLIM TX6 MUX’ 2
amixer cset name=‘ADC MUX6’ 0
amixer cset name=‘DMIC MUX6’ 1
amixer cset name=‘IIR0 INP0 MUX’ 7
amixer cset name=‘PRI_MI2S_RX Port Mixer INTERNAL_BT_SCO_TX’ 1
amixer cset name=‘HFP_INT_UL_HL Switch’ 1
amixer cset name=‘INTERNAL_BT_SCO_RX Audio Mixer MultiMedia6’ 1
amixer cset name=‘MultiMedia6 Mixer QUAT_MI2S_TX’ 1
aplay -D hw:0,5 -P &
arec -D hw:0,17 -P -R 8000 -C 1 &
aplay -D hw:0,18 -P &
arec -D hw:0,18 -P -R 8000 -C 1 &
使用此環回,音頻流來自藍牙,被路由到揚聲器和來自麥克風的音頻流,并被路由到藍牙。
在所有這些情況下,您需要做的是在 RX 或 TX 音頻路徑中設置拓撲(音頻/語音處理模塊的組合),并在拓撲中定義它。然后,在需要時將該拓撲 ID 加載/發送到 DSP。
審核編輯:郭婷
-
dsp
+關注
關注
554文章
8030瀏覽量
349321 -
揚聲器
+關注
關注
29文章
1307瀏覽量
63084
發布評論請先 登錄
相關推薦
評論