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

半雙工和全雙工通信模式的比較
全雙工音頻對(duì)講模塊-支持空中升級(jí)、多級(jí)無(wú)線中繼

評(píng)論