最近,我對製作和音訊裝置的建立產生了濃厚的興趣。 當我還是一名學生時,我在 Nordic 工作時,我學會了通過藍芽傳輸音訊,這引起了我的興趣。 尤其是令人興奮的藍芽 le 音訊,據說它可以以更低的位元率和更少的延遲獲得更好的音訊質量。 演奏樂器時,您希望動作和聲音響應之間的延遲最小。 我想測試一下我是否可以利用 nrf5340 通過簡單的鍵盤介面控制產生悅耳的聲音,看看延遲是否足以不影響我的演奏。
該應用程式由乙個發聲裝置、乙個合成器和乙個接收耳機組成。 LE Audio 可以同時傳送兩個對應於耳機左右部分的音訊流。
該應用程式基於 Nordic NRF5340 Audio 演示應用程式,但經過簡化並專門用於合成器用例。 該應用程式的主要焦點是合成器和鍵盤輸入部分。
合成器的結構是高度模組化的,可以輕鬆新增或排除不同的模組並測試不同的音訊合成拓撲。 提供的設定演示了合成器的不同方面,例如複音振盪器、效果器和音訊同步時間相關性。
合成器模組從按鈕模組接收有關停止和停止哪個音符的資訊。 這些音符可以轉換為音序器,或者在這種情況下,可以轉換為琶音器。 琶音器與時間有關,因此需要時間源。 我們必須使用與處理音訊的時間感同步的時間源。 這就是滴答提供程式的作用,它為處理的每個音訊塊增加了時間。 即時報價提供商向訂閱模組傳送即時報價。 這與MIDI同步不同音源的方式相同,因此可以實現MIDI同步。
對於複調合成,我們需要多個振盪器,這些振盪器等於一次可以演奏的音符數。 Key Assign 跟蹤當前處於活動狀態的振盪器,並以振盪器首先被啟用的方式(處於活動狀態時間最長的振盪器)將音符分配給振盪器。 如果沒有非活動振盪器,它會將新音符分配給第乙個活動(最長的有源振盪器)振盪器。 預設情況下,應用程式配置了五個振盪器。 即使**的琶音器超過5個音符,也很難注意到最後乙個活動音符被切斷。
在“音訊程序啟動”中,應用程式配置為單聲道音訊編碼。 所有模組也都內建在單聲道中。 修改應用程式以處理立體聲音訊並不難。 例如,您可以將回聲效果轉換為立體聲桌球延遲效果。 在使用回聲效果之前,將單聲道聲音分為左聲道和右聲道。 然後將這些通道饋入回聲效果。 確保在 SW 編解碼器編碼中正確設定了立體聲編碼的 PCM 大小。
音訊在 n 個樣本塊中處理,這些樣本塊在音訊處理中啟動。 計時器確保新塊的處理間隔與音訊取樣率相匹配。 這也許應該直接與藍芽連線間隔同步,以便進一步開發。
使用 16 位深度。 DSP 主要使用定點格式的整數。 因此,fixed16 型別和相關運算是在 interger math 中定義的。 由於應用特定於NRF5340,因此在某些情況下,SOC 中包含的 DSP 指令由 DSP 指令使用和抽象。
以下塊(來自振盪器c)是產生正弦波的乙個例子,其頻率由相位增量決定。Phase Accumulate[24:31] 的前 8 位用於選擇要使用的儲存樣本,而 Phase Increment[8:23] 用於確定兩個樣本之間的插值。 然後是訊號的應用幅度。
for (uint32_t i = 0; i < block_size; i++)英特爾數學中提供了固定插值和縮放功能,以便使用 CPU 上的 DSP 指令有效地執行此計算。
在當前的應用配置中,當所有振盪器都處於活動狀態時,NRF5340應用核心的利用率約為 80%。 當連線兩個頭戴式裝置裝置時,大約使用了 40% 的應用程式核心。 其中很大一部分可能是 LC3 編碼器。
低功耗藍芽的最小連線間隔為 75 毫秒 每 7 次音訊處理每 5 毫秒啟動一次,以匹配連線間隔。 因此,處理過程不會增加延遲。 LE Audio 中的新 LC3 編解碼器取代了 SBC 編解碼器,應該會顯著減少延遲。 但是,它尚未在此特定應用中進行測試。 輸入按鈕的去抖動時間為 50 毫秒。 但是,這不會導致延遲。 這是因為在實現過程中,每次觸發新中斷時,按鈕狀態都會發生變化。 去抖動時間結束後,通過讀取引腳值來測試此假設。 這將導致偶爾不正確的按鈕狀態,但在去抖動時間後會再次糾正。 這不會在測試中導致任何聽覺偽影**。
由此產生的應用程式演示了使用 BLE LE Audio 傳輸合成器音訊的功能系統。 有關如何測試應用程式的說明,請檢視 GitHub 儲存庫。 以下是使用的設定**:2 x NRF5340 Audio DK 作為耳機,1 x NRF5340 DK 作為合成器:
雖然沒有進行定量分析來確定總延遲,但我認為在彈奏鍵盤和聆聽生成的聲音時,延遲並不明顯。 我相信 LE Audio 在NRF5340上有很多令人興奮的新應用。