1、前言
在無線藍牙領域,既能滿足超低功耗,又能進行全雙工語音通訊,一直是市場上的需求,比如:無線門鈴,短距離對講機等應用。針對 BLE 語音相關的應用場景,ST 推出了FP-AUD-BVLINKWB1 這個軟件包供客戶評估。
本文將對這個軟件包展開介紹,該軟件包主要包含以下特性:
? 使用 Opus v1.3 編碼和解碼,通過 BLE 實現全雙工立體音頻流。
? 使用自定義 BlueVoiceOPUS 協議,通過 API 即可使用 Opus 功能。
? 源碼包含數字音頻捕獲和處理。
? 可以通過 USB 進行音頻流的回放。
? 可使用麥克風擴展板 X-NUCLEO-CCA02M2 + Nucleo 開發板 P-NUCLEO-WB55的組合或者探索板 STM32WB5MM-DK。
? 兼容 STBLESensor App。
? 免費開源。
感興趣的話歡迎從以下網址下載該軟件包進行評估:
https://www.st.com/en/embedded-software/fp-aud-bvlinkwb1.html
2、軟件介紹
2.1. 軟件架構
? Hardware Abstraction: 硬件抽象層,使用了 STM32 的 HAL 庫提供底層的硬件驅動。
? BSP 層:在 HAL 層之上,提供了板級支持包,包含了 SPI, ADC, LED 和 User Button等驅動。
? Middleware 層:中間件層,主要包含了以下內容:
o STM32 WPAN:提供 BLE,Thread,Zigbee 等協議相關的接口 API,本應用只使用了 BLE 協議。
o USB Device:提供各種不同 USB device 類的實現,本應用中只使用了 USBAudio 類。
o PDM Lib:提供了數字麥克風 PDM 信號到 PCM 信號轉換的軟件實現。
o OPUS:開源第三方的 OPUS 庫,版本 v1.3。
2.2. Opus 簡介
Opus 是完全開源免費的高通用性音頻編解碼協議,由 Internet Engineering TaskForce (IETF)標準化。
Opus 可以處理廣泛的音頻應用,包括 IP 語音、視頻會議、游戲內聊天,甚至遠程現場音樂表演。它可以從低比特率窄帶語音縮放到非常高質量的立體聲音樂,并且具備以下特點:
? 比特率范圍:6kb /s 到 510 kb/s
? 采樣率范圍:8kHz(窄帶)到 48kHz(全帶) ? 幀大小:2.5 ms 到 60 ms
? 比特率,采樣率,可動態調節幀大小
? 支持固定比特率(CBR)和可變比特率(VBR)
? 支持語音和音樂
? 支持單聲道和立體聲
? 最多支持 255 個通道
? 良好的魯棒性和丟包隱藏能力
? 支持浮點和定點
2.3. BlueVoiceOPUS 協議
BlueVoiceOPUS 是自定義協議,Central 和 Peripheral 是 GAP 層的角色,在點對點通訊中,主動發起連接請求的設備為 Central。在 GATT 協議中,Server 接受請求和命令,將數據保存在屬性中。Client 實施服務發現流程,并向 Server 請求數據。
如果是單向的非對稱語音系統,那么具備麥克風的設備可以定義為 Server,Cient 客戶端可以主動或被動接收 Server 的語音數據流。
如圖 2,FP-AUD-BVLINKWB1 提供了雙向的系統,雙方設備都具備語音的能力,所以雙方都實現了 GATT Server 以及 Client 的角色。并且,Server 的語音數據基于notification 性質,將以異步的方式主動發送給 Client。
2.3.1. BlueVoiceOPUS 服務
ATT 協議用于在設備中進行數據交換,ATT 的最小實體稱為屬性。GATT 服務由各種服務組成,其中服務由服務申明屬性作為起始,每一個服務又包含若干特性,特性由任意屬性或屬性描述符組成。
表 1 是典型的 BLE 服務的屬性表,其中包含了 1 個服務申明以及 3 個特性。Audio 特性用來通知對方設備音頻數據。Ctrl 特性通知對方設備控制數據,比如播放,暫停等。Music 特性用來通知對方音樂數據,該特性只在 ST BLE Sensor APP 中實現,取代 Audio特性,用來傳輸壓縮后的 48KHz 立體音樂。
2.3.2. BLUEVoiceOPUS 實現
在 Middleware 層,和 BlueVoiceOPUS 協議相關的文件包括:
? bvopus_service_stm:該文件管理所有和 BLE 相關的功能,包括添加服務和添加特性,以及數據的接收和發送。其中包含了一個簡單的數據封包和解析協議。
? opus_interface_stm:該文件實現了 Opus 編碼器和 BlueVoiceOPUS 服務的接口。提供簡單的 API 用于 Opus 初始化,配置,數據壓縮和解壓等。
2.4. 應用層介紹
在軟件包中包含了三個主要的工程:
? BVLCentral:作為主設備主動發起連接,并提供 BlueVoiceOPUS 服務。
? BVLPeripheral:作為從設備廣播,并提供 BlueVoiceOPUS 服務。
? BVLPeripheral_FullBand:作為從設備廣播,提供 BlueVoiceOPUS 服務, 可以通過BLE 接收立體聲音樂,但目前只能和 ST BLE Sensor 相連。
BVLCentral 和 BVLPeripheral 分別燒錄到 WB55 的開發板中,分別作為主機和從機,通過開啟或停止音頻通知,可以達到三種不同類型的通訊:單工,半雙工和全雙工。
? 當設備在輸出音頻流時,應用層負責語音的獲取,數據壓縮和封包,然后通過BlueVoiceOPUS 協議發送出去。
? 當設備在接收音頻流時,應用層通過從 BlueVoiceOPUS 協議中接收 BLE 數據包,然后解包和解碼 OPUS 語音數據。通過 P-NUCLEO-WB55 上的 SW1 控制打開或關閉語音流通道。通過 LED 顯示設備的狀態。
? 廣播/發現狀態:綠色 LED 閃爍
? 連接狀態:藍色 LED 緩慢閃爍
? 語音流狀態:藍色 LED 正常閃爍
? 接收狀態:藍色 LED 穩定點亮(不閃爍)
? 全雙工狀態:藍色 LED 快速閃爍(雙方設備)
BVLCentral 可以由 APP(ST BLE Sensor)代替,完成設備和手機端的全雙工語音通訊。
整個應用流程如圖 3 所示,整個流程介紹如下:? 從設備廣播,主設備發起連接,直到連接建立成功。
? 雙方互相完成服務和特性發現流程。
? 從設備通過按鈕,請求打開特性通知,主設備打開通知,從設備發送語音流,此時狀態為語音流狀態。
? 相反地,主設備通過按鈕,請求打開特性通知,從設備打開通知,主設備發送語音流,此時狀態變為全雙工狀態。
? 可以通過按鈕,開關語音流,改變語音流狀態。
3、系統部署指導
3.1. 兩塊 STM32WB 開發板之間的全雙工音頻流
如上圖 4 ,可以使用 P-NUCLEO-WB55 開發板與一塊麥克風擴展板 X-NUCLEO-CCA02M2 進行組合。然后分別燒錄 BVLCentral 工程和 BVLPeripheral 工程。當雙方設備建立連接以后,通過 Nucleo 上的 SW1 按鈕,就可以建立起半雙工或全雙工的語音流了。麥克風擴展板可以對語音信號以 8kHz 或 16kHz 進行采集,并通過 BlueVoiceOPUS 協議傳輸,當對方設備接收到語音數據后,通過 USB 保留到本地,然后使用 Audacity 或其他語音軟件播放。
如上圖 5,也可以使用 STM32WB5MM-DK 進行同樣的操作,該開發板使用了 STM32WB5MM的模組,并且板載了一塊 OLED 顯示屏供開發。
當然也可以使用圖 4 和圖 5 的組合,只要一塊燒錄的是主機程序,另一塊燒錄的是從機程序即可。
3.2. STM32WB 開發板和手機之間的全雙工音頻流
除了上面的配置方法外,ST 還提供了 ST BLE Sensor 手機 APP 供測試。
如圖 6,手機可以作為主設備,掃描然后連接 STM32WB55 開發板,建立全雙工的音頻流的 BLE 鏈路。語音信號可以從開發板采集,發送到手機側進行播放。也可以從手機側采集,發送到開發板后,再通過 USB 進行播放。
3.3. STM32WB 開發板和手機之間的立體聲音樂播放
上面介紹的都是 8kHz/16kHz 的語音流,該軟件包還提供了全帶(Full-Band)的 48kHz 立體聲音樂流方案。
圖7. 48kHz 立體聲音樂流方案
如圖 7,手機掃描設備后,發起并建立連接,完成 GATT 服務發現流程,然后通過按鈕打開特性的通知屬性,建立全帶音頻流。APP 使用 OPUS 對手機內音樂進行壓縮和封包,然后通過BLE 發送給開發板。開發板通過 USB 將數據導出到 PC 上,最后使用 Audacity 或其他語音軟件進行播放或刻錄。
審核編輯:湯梓紅
-
ST
+關注
關注
32文章
1164瀏覽量
129954 -
BLE
+關注
關注
12文章
684瀏覽量
60243 -
無線藍牙
+關注
關注
1文章
46瀏覽量
11932
原文標題:工程師筆記|利用 Opus 在 STM32WB 上實現 BLE 全雙工語音流
文章出處:【微信號:STM32_STM8_MCU,微信公眾號:STM32單片機】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
全雙工與半雙工的區別 主要是自己學習下
全雙工無線系統的實現
通信基礎知識:單工,半雙工,全雙工
OSD435全雙工視頻/音頻/數據光端機
全雙工,全雙工是什么意思
全雙工傳輸,全雙工傳輸原理是什么?
如何實現BLE全雙工語音通訊
半雙工和全雙工通信模式的比較
全雙工音頻對講模塊-支持空中升級、多級無線中繼

評論