本文為下篇,將對混響的具體參數調整以及選擇 ADI 的 DSP 設計合理算法進行深入解析。關于混響的類型、主要幾大類 DSP 混響的實現原理,可參考上篇《如何在 ADI DSP 中設計一個合理的混響 (上) 》。
混響的常見參數
在上篇文章中,我們提及了混響的類型和基本實現原理。目前做一個專業級混響需要設置許多參數,有些參數是必備的,而有些是在特定需求下慢慢增加起來的。專業的效果器一般包含了如下圖 (圖1) 所示的一些參數:
圖1 混響的相關參數
混響時間:能夠逼真地模擬自然混響的數碼混響器上都有一套復雜的程序,其中雖然有很多技術參數可調,然而對這些技術參數的調整都不會比原有的效果更為自然,尤其是混響時間 (取決于預延遲時間以及衰減速率和收斂的判定)。
預延遲時間:在混響效果器上的眾多參數中,預延遲時間 (Predelay) 是一個比較重要的點。所謂預延遲時間,指的是進入人耳的直達聲和第一次反射聲之間的時間間隔。在混音中,預延遲時間的選擇與我們的基準時間有著一定的關聯性。而基準時間的計算方式一般來說就是拿 60 秒除以音樂 BPM 的值 (取決于直達聲之后做的延遲時間以及 FIR 的時間)。
高頻滾降:此項參數用于模擬自然混響中,空氣對高頻的吸收效應,以產生較為自然的混響效果。一般高頻混降的可調范圍為 0.1~1.0。此值較高時,混響效果也較接近自然混響;此值較低時,混響效果則較清澈 (取決于低通濾波器的階數以及截至頻率的設計)。
擴散度:此項參數可調整混響聲陣密度的增長速度,可調范圍為 0~10,其值較高時,混響效果比較豐厚、溫暖;其值較低時,混響效果則較空曠、冷僻 (取決于 Comb Filter 的 D 值選取以及回聲密度遞增數值)。
聲陣密度:此項參數可調整聲陣的密度,其值較高時,混響效果較為溫暖,但有明顯的聲染色;其值較低時,混響效果較深邃,器聲染色也較弱 (取決于 Comb Filter 的數量)。
頻率調制:這是一項技術性參數,因為電子混響的聲陣密度比自然混響稀疏,為了使混響的聲音比較平滑、連貫,需要對混響聲陣列的延時時間進行調制。此項技術可以有效消除延時聲陣列的段裂聲,可以增加混響聲的柔和感 (取決于 Comb Filter 的延時時間)。
混響類型:不同房間的自然混響聲陣列差別也較大,而這種差別并不是一兩項參數就能表現的。在數碼混響器當中,不同的自然混響需要不同的程序。它的可選項一般有小廳 (S-Hall)、大廳 (L-Hall)、房間 (Room)、隨機 (Random)、反混響 (Reverse)、鋼板 (Plate)、彈簧 (Spring) 等。其中小廳、大廳、房間混響屬自然混響效果;鋼板、彈簧混響則可以模擬早期機械式混響的處理效果。
干濕比:干聲信號和混響信號的比例,調節直達聲以及混響信號的分量比重。
從這些后續發展出來的參數不難看出,涉及的調節選擇變得越來越多,那么對于設計者來講,如何挑選合適的參數和類型去搭建自己想要的產品就變得非常重要。
DSP 和混響類型的選擇
在實際的生產應用中,選擇混響的類型并不是直接去選一個最完善的類型就好了。實際上很多時候應用達不到這個條件,越完善的混響類型意味著它對 DSP 的內存空間以及算力大小都是有需求的。然而在很多成本預算不是那么充足,或者工作環境對功耗等方面都有需求的產品中,我們無法選擇那么一個較高復雜度的混響。
舉個很簡單的例子,比如 A 用戶需要做一個輕量級的吉他拾音器,拾音器主要的目的就是拾音,當然為了豐富一些效果,可能我們需要調節高中低頻的 EQ,加一個混響。在這個時候,選擇一個 ECHO 類的混響要比選擇 MOORER 類的混響好太多。
從控制成本和功耗的角度上來講,雖然 ECHO 類并不如 Moorer 類的好,但是在演奏中已經夠用,復雜的可以通過拾取后送到效果器或者功放中去實現。在選擇時,建議都要根據自己的產品類型合理地從成本、封裝體積大小,以及功耗上選擇最為合適的產品。
ADI DSP 在 ECHO 類算法的基本實現
眾所周知,ADI 在音頻的 DSP 上相當有競爭力,從 Sigma 到 Sharc 類的 DSP 均運用于各類音頻電子產品中。如下圖 (圖2) 所示為 ADI SigmaDSP 產品選型對比表:
圖2 SigmaDSP 的產品選型對比表
下圖 (圖3) 為 ADI SharcDSP 產品選型對比表:
圖3 SharcDSP 的產品選型對比表
ADI SigmaDSP 的產品是定點的數字信號處理器,而 SharcDSP 即全浮點的數字信號處理器。全浮點的 DSP 可以處理復雜度比較高的混響,SigmaDSP 一般用于處理一些簡單一點的混響。
以下將展示一些 ECHO 類混響在 DSP 上的應用實現,目前混響主要對內存的空間需求是比較多的,存在著很多 Delay。ECHO 類混響在 ADAU1701 和 ADAU1761中 的實現如下圖 (圖4) 所示:
圖4 ECHO 類混響在 ADAU1761 中的實現
從圖中可以看出,直達聲直接作為干音傳到輸出端,將音源的左右通達合成一路用來減少內存空間和算力的消耗,用三個延時線創造混響空間,傳到后端進行低通濾波,實現高頻滾降。這樣做能夠得到一定量的混響的效果,但是由于回聲密度不夠,增益調節以及擴散度和頻率調制是無法實現的,適合一些輕量化的產品應用。我們在 SharcDSP 中一般直接通過代碼來實現,例如下方的 ECHO 類回聲的實現:
創建一個 DSP 混響的效果器。以下圖 (5) 是一個使用 Python 和 NumPy 庫實現簡單 DSP 混響效果的示例代碼:
圖5 Python 實現 DSP 混響效果 (橫版)
如上圖 (圖5) 所示的代碼實現了一個基本的 DSP 混響效果,包括延遲線和低通濾波器。我們可以根據需要調整延遲時間和截止頻率來改變混響的效果。需要注意的是,這個示例使用了 Python 的 NumPy 庫來處理數字信號,并且需要在支持音頻播放的環境中運行 (例如 Jupyter notebook 或 Python 腳本)。
圖6 ECHO 類混響效果用 C 語言實現 (橫版)
如上圖 (圖6) 所示的代碼是一個簡單的 DSP 混響效果實現,它使用了 C 語言進行編程。代碼主要有以下操作:
定義了一些常量,如采樣率、幀大小、通道數、延遲長度和衰減時間等;
定義了一個名為 DelayBuffer 的結構體,用于實現延遲緩沖區;
創建了一個名為 create_delay_buffer 的函數,用于創建延遲緩沖區;
定義了一個名為 destroy_delay_buffer 的函數,用于銷毀延遲緩沖區。
在 main 函數中,首先創建了一個延遲緩沖區,然后進入了一個循環,模擬了信號的輸入、處理和輸出過程。在每次循環中,信號被輸入到混響效果處理中,處理后的信號被輸出,同時衰減時間也在不斷衰減。最后當延遲時間達到最大值時,循環結束,延遲緩沖區被銷毀。
在 ADI Sharc 平臺上,當我們跑通 Framework 之后,導入這一部分代碼,將音頻流導入進去就可以得到一個 ECHO 類的混響效果。如果需要更高級好用的 Schroeder & Moorer 類混響系統時,可以通過開源框架 Sox,Freeverb 和 Tonic 去獲取,完整的算法會比較長,需要大家在線下去參考。
總結
本文簡要概述了混響的相關類型和實現方式,通過對產品的需求分析,可以在 ADI DSP 中去實現合適的算法。ADI DSP 在各類混響的算法都能夠實現,同時也支持大家進行相應的產品選擇。
審核編輯:劉清
-
dsp
+關注
關注
552文章
7962瀏覽量
348288 -
低通濾波器
+關注
關注
14文章
473瀏覽量
47334 -
FIR
+關注
關注
4文章
146瀏覽量
33114 -
BPM
+關注
關注
0文章
24瀏覽量
8075
原文標題:如何在 ADI DSP 中設計一個合理的混響 (下)
文章出處:【微信號:駿龍電子,微信公眾號:駿龍電子】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論