【導讀】很多人都喜歡彈吉他,可是我們都是用的現(xiàn)成的吉他合成器,沒辦法突出自己的個性。本文講到一位大師自己學習到熟練掌握數(shù)字聲音合成技術,然后自己設計出屬于自己的吉他合成器。是不是很高端大氣上檔次?下面隨著小編來看看是如何DIY設計屬于自己獨一無二的吉他合成器的?
數(shù)字聲音合成技術總讓我這個業(yè)余愛好者感到著迷。一個有關Karplus-Strong吉他合成技術的維基網(wǎng)頁更加激發(fā)了我的興趣。它吸引我的地方是這種合成器設計非常簡單。下面是來自維基網(wǎng)頁的圖形(圖1):
式中的濾波器系數(shù)決定音調(diào)的‘粘性’。
突發(fā)噪聲?就是這樣嗎?肯定不對!不可能就這么簡單!與所有業(yè)余愛好者一樣,我立馬開始著手實施。寫代碼只用了幾個小時,然后我把DAC輸出連接到示波器??梢钥闯雠c諧波疊加后大致呈正弦曲線,但是無法確定聽起來會是什么樣。
在一陣翻箱倒柜之后,我連接了一對舊耳機。我沒太高期望,大家都知道:對于初次嘗試的項目來說,要么是一無所獲,要么是背運情況下會看到它冒出一縷白煙(我寧愿把這看成是芯片的靈魂升入虛空)。在確實聽到像撥弄吉他發(fā)出的聲音之時著實讓我吃了一驚。
似乎有點對路了。先提醒一下,下面要講到數(shù)學了。
分析:
讓我們更深入地看看下圖2:
[page]
經(jīng)過一番處理之后我們可以得到一個龐大的表達式:
好在通過利用Excel掃描頻率ω很容易就能求出幅值響應。
取樣速率設為44.1ksps(這是可掃描整個聽覺范圍的最小值)。
如果從式1生成200Hz音調(diào),延遲‘L’則為44100/200 = 220.5。
由于我們的延遲為數(shù)字式,因此選擇220這個接近值。我隨意選擇10KHz的低通濾波器極點值入手。此極點頻率可確定上述‘a’與‘b’的值。
圖3:頻率響應
[page]
我們可以根據(jù)此響應明確看出我們是否傳輸寬帶噪聲信號(而我寧愿將其視為能量散布全部頻率的信號),而您看到的輸出是200Hz基頻,隨后是2x、3x、4x…諧波。這基本上就是實際吉他彈奏時的表現(xiàn):基頻隨后是伴生泛音。
另一個值得注意的有趣現(xiàn)象是:當把濾波器極推向更低頻率時會抑制更高階諧波,同時音調(diào)也變得更‘純凈’。但是,聲音聽起來不太像吉他,而是很像音調(diào)很快消失的鼓聲。
圖5:不同截止頻率的頻率響應
另外有趣的是改變?yōu)V波器截止頻率時音調(diào)頻率會發(fā)生輕微偏移?;l附近的偏移不太明顯,但是更高階諧波由于與低通濾波器相關的相位損失而開始更顯著地偏移。
[page]
以下是在156Hz附近彈奏E調(diào)時獲得的實際DSO波形的快速截屏。
圖6:E調(diào)波形采集——156Hz的基頻
圖7:E調(diào)FFT——156Hz的基頻
頻率峰值的分布符合預期;盡管幅度跌落與理論計算不一致,但是整體圖像十分匹配。
[page]
實現(xiàn):
實現(xiàn)方案完全在賽普拉斯半導體公司的PSoC5LP混合信號SoC內(nèi)部完成。為了更加有趣,通過采用幾個能夠在觸摸時彈奏不同音調(diào)的觸摸按鈕,我在系統(tǒng)中增加了一個用戶界面。
圖8:系統(tǒng)級方框圖
采用CY8CKIT-050開發(fā)套件、用于觸摸按鈕的擴充板和我從臥室‘暫借’的幾個精致的揚聲器,整個系統(tǒng)配置大致如下:
圖9:吉他合成器配置
[page]
Speaker output:揚聲器輸出;developer kit + expansion board:開發(fā)套件 + 擴充板
圖10:細節(jié)展示
5 strings of a guitar:吉他的5跟弦;analog output to speaker:到揚聲器的模擬輸出;slider changes chords of guitar:滑片可改變吉他的和弦。
總結:
Karplus-Strong合成器可能是最簡單的合成器編碼算法,但是其輸出音質出人意料地不錯,即使是僅采用8位DAC(其嚴格來說對于音頻再現(xiàn)而言有點功率不足)。唯一的缺陷是演奏低頻音調(diào)時我們需要數(shù)值非常大的緩沖器。例如,演奏100Hz信號需要441緩沖器,取樣速率為44.1Ksps。如果我們希望添加多個同時弦時就會帶來問題,而且代碼大小也成問題。
此外,加入PSoC的靈活性也會帶來眾多新的選擇,如:采用I2S接口把信號輸出到標準音頻DAC。將合成代碼轉移到數(shù)字濾波模塊(DFB)可以釋放主核,從而可以添加任何其它計算密集型進程。
相關閱讀: