封面

超負荷

任何會傳遞、放大或記錄訊號的系統,都有它能承受的範圍;當訊號一旦超出範圍,輸出將不再忠實地跟著輸入。 例如放大電路的輸出被電源電壓限制,波峰被削平;數位系統超過能表示的最大數值,波形直接被切掉;感光元件超過能記錄的最大亮度,亮部就變成一片死白。 當訊號的形狀被改變,甚至多出原本沒有的成分,這個現象在工程上稱為失真(distortion)。

個性

通常失真是需要避免的問題,但在 1960 年代,有樂手把喇叭推到極限時,意外得到一種毛毛的聲音,自此開始,漸漸把「零件被推到極限」成了音樂表現的一部分。 另外,早期的音樂器材市場不大,很少有專門為聲音設計的零件,多半是借用當時容易買到的通用零件, 這樣的時空背景,也讓同一型號的器材,因為零件批次不同而聲音有所差異,也是現代難以復刻的主因。

應用

失真的本質,是在有限的範圍內改變波形,並產生新的泛音列。 早期,這種變化多半來自電路與零件的「偶然」;隨著技術進步,零件在極限時的行為可以被量測、分析,再透過電路或數位運算重現。 失真也因此從意外變成一種可以選擇的聲音塑造方式,應用範圍從樂器音色延伸到錄音工程。


不同的失真

在工程上,這些現象都叫做失真(distortion);但在音樂領域通常統稱為 dirty effect,再粗分成 Overdrive、Distortion 與 Fuzz; 這三者的界線其實很模糊,我是習慣用想要的疏密度和柔烈程度,挑選使用。

傳遞曲線

把輸入與輸出的對應關係畫成圖,就是一條傳遞曲線(transfer curve)。 放大器在正常範圍內,輸出會跟著輸入等比例變大,曲線是一條直線; 接近極限時,曲線開始彎曲、轉平,波峰被壓住,這就是削波(clipping); 類比電路的曲線來自元件本身的特性,數位則是把每個 sample 套進曲線計算一次。

  • Overdrive: 曲線越靠近極限越彎,波峰被慢慢壓圓,叫做軟削波(soft clipping)。 小訊號幾乎還落在直線段,所以輕彈時接近乾淨;訊號大時才會衝進曲線彎曲的區域。

  • Distortion: 曲線比較早就轉平,波峰被削得比較平,叫做硬削波(hard clipping)。 大部分的訊號都被壓在上限附近,動態差變小、空隙被填滿、延音變長。

  • Fuzz: 增益很大,幾乎整個波形都被推到極限,接近方波; 音色粗糙、毛躁,原本的樂器特徵所剩不多;也因為波形接近方波,常被用來做出接近合成器的聲音。

線性、Overdrive(軟削波)、Distortion(硬削波)、Fuzz(高增益硬削波)四種傳遞曲線,以及同一個正弦波經過它們之後的波形
不同傳遞曲線下,同一個正弦波的輸出波形。

新的泛音

削波只改變波形的形狀,不改變它重複的速度。 波峰被壓圓或削平之後,波形不再是單純的正弦,偏離的部分就以泛音的形式出現在頻譜上;也因為重複的速度沒變,這些泛音都會落在原音頻率的整數倍。

這些泛音可以分成兩類:偶次泛音聽起來偏暖,奇次泛音則比較硬、比較「方」。 兩者的比例取決於曲線的形狀。上下兩邊用同樣的方式削(對稱)時,只會產生奇次泛音;上下削得不一樣(不對稱)時,才會出現偶次泛音。

對稱削波、不對稱削波與整流(octave fuzz)三種波形,以及各自的泛音頻譜
不同對稱性的削波,產生的泛音頻譜。

當把不對稱推到極端,就是 octave fuzz:它不只削波,還把波形的下半部整個翻上來,讓上下兩半都朝同一個方向。 這時原音的頻率被大幅削弱,剩下的幾乎都是偶次泛音,其中最強的二次泛音剛好高一個八度,聽起來就像多疊了一個高八度的聲音。

所以破音的聲音取決於兩件事:訊號被推得多大,以及曲線本身的形狀;前者決定破得多深,後者決定波形被推進去之後會變成什麼樣子。


數位破音

破音的核心是傳遞曲線,決定訊號被映射成什麼樣子。 數位實作時,有些問題要額外處理,也少了類比電路天生的反應。

Aliasing

數位用一個個取樣點記錄波形,一個週期至少要兩個點才表示得出來,所以能表示的最高頻率是取樣率的一半(Nyquist),48kHz 就是 24kHz。 但削波產生的泛音沒有上限,曲線彎得越急,泛音延伸得越高。 超過 Nyquist 的頻率取樣之後,會和某個較低的頻率長得一模一樣,系統分不出來,就被「折」回可以表示的範圍裡。

剛超過 Nyquist 的泛音,折回來的位置也很高,人耳不太聽得到;但越高次的泛音,折得越深。 例如在 48kHz 下,彈一個 A5(880Hz),第 51 次泛音是 44880Hz,會被折到 3120Hz,正好落在人耳最敏感的範圍; 第 55 次泛音是 48400Hz,則會被折到 400Hz,甚至比原音還低。

880Hz 硬削波的奇次泛音在 48kHz 取樣下,超過 Nyquist 的部分折回 0–24kHz,落在原本泛音之間
880Hz 硬削波在 48kHz 取樣下的頻譜折返。

這些頻率都不是原音的整數倍,已經不是泛音,而是不和諧的雜音,這就是 aliasing,常見的解法有兩種:

Oversampling

先把取樣率提高,在高取樣率下做破音,再降回原本的取樣率。 例如提高 4 倍到 192kHz,Nyquist 就變成 96kHz,破音產生的泛音在 96kHz 以下都不會折回來; 降回 48kHz 之前,先用低通濾波器把 24kHz 以上的部分濾掉,剩下會折回來的只有 96kHz 以上的泛音,通常已經小到聽不太出來。 倍數越高越乾淨,但運算量也跟著倍數增加,升降取樣用的濾波器也可能帶來一點延遲。

ADAA(Antiderivative Antialiasing)

一般的做法只在取樣點上查曲線,忽略了點與點之間的急轉彎,而這正是 aliasing 的來源。 ADAA 改成計算兩點之間曲線的平均值(需要用到反導數),等於先把急轉彎磨平再取樣,能折回來的高頻就少了。 它不用升頻、很省,但高頻的效果有限,會讓高頻稍微變暗、多半個取樣點的延遲,曲線也必須算得出反導數。

實務上常把兩者搭配使用,用 ADAA 加上較低倍數(例如 2 倍)的 oversampling,就能在效能和聲音之間取得平衡。

直流偏移

前面提到,不對稱的削波會帶來偶次泛音;但它同時也會讓波形整體往上或往下偏,多出一個 0Hz 的成分,也就是直流偏移(DC offset)。 類比電路裡,級與級之間的耦合電容本來就會擋掉直流,所以很少被注意到;數位沒有這層保護,偏移會一路被帶下去。

直流聽不到,但會造成幾個問題:

  • 吃掉 headroom:波形整體偏向一邊,離 0 dBFS 更近,更容易爆音。
  • 影響後面的處理:如果後面還有其他破音或壓縮,偏掉的訊號會讓它們的行為跟著改變。
  • 開關時的爆聲:bypass 或停止播放的瞬間,訊號從偏移的位置跳回 0,會出現「啵」的一聲。

解法很簡單:在破音之後加一個很低的高通濾波器(DC blocker),例如 5–10Hz,直接把直流濾掉。

計算曲線

計算曲線最簡單的方法,是把每個取樣點套進一個固定的公式,例如 tanh 或直接削平。 但這樣的曲線沒有狀態;而真實的電路則會隨著頻率和剛剛彈過的音自然改變,所以效果比較起來會比較平、比較死。 要讓曲線更有趣,可以嘗試:

  1. 在曲線前後加濾波器:破音前先調整頻率,讓不同頻段被推進曲線的程度不同;破音後再修飾音色。
  2. 模擬充放電:真實電路裡的電容會跟著訊號充放電,讓偏壓移動、曲線跟著偏移。例如 Fuzz 被大訊號推過之後,尾音會斷斷續續,聽起來像電池快沒電;用一個跟著訊號大小慢慢變化的偏壓,就能做出類似的反應。
  3. 模擬整個電路:用 Wave Digital Filter 這類方法,把電阻、電容、二極體等元件之間的關係直接算出來,最接近真實電路,但也最複雜、最吃效能。

實作 DIRTLAB

破音是很看個人喜好的效果。只要處理好 aliasing、直流偏移這些技術問題,剩下就是不斷測試,找到喜歡的曲線,再搭配前後的濾波器調整音色。

這顆 Bass 破音實作方向和常見的作法一樣:能保留乾淨的低頻、避免聲音變糊、留住彈奏的動態。 音色就選用 mode 去擴展,盡量減少 knob 數量控制

Input ─┬─ Clean: LPF ───────────────────────── CLEAN ─┐
       └─ Dirty: HPF → GAIN → Curve → HPF ──── DIRTY ─┴─ OUTPUT

SPLIT 、 OVERLAP

  • SPLIT:從哪個頻率開始破,低於這裡的訊號不會進入破音。
  • OVERLAP:乾淨的聲音往上保留幾個八度。

例如 SPLIT 在 400Hz、OVERLAP 是 Off,就是拿 400Hz 以上的訊號破音; OVERLAP 轉到 +1,乾淨的聲音延伸到 800Hz,400–800Hz 這段同時有乾淨和破音。 只想要「多少以上破音」的話,OVERLAP 留在 Off、只轉 SPLIT 就可以。

SPLIT 與 OVERLAP 在頻譜上的位置,以及 Clean 與 Dirty 兩路的交疊區
不同 OVERLAP 設定下,Clean 與 Dirty 的頻率分配。

GAIN 、 TONE

這兩顆都只作用在破音那條訊號,決定破音本身的聲音。

  • GAIN:訊號進入曲線之前推多大,也就是前面說的「推進曲線彎曲的區域有多深」。
  • TONE:非線性的調整幾組濾波器的比例。

每個 mode 都會因為曲線特性不一樣,聽感上有大有小,所以這兩顆值都需要分別校正。

CLEAN 、 DIRTY 、 Output

基本上就是把 Blend 拆成兩顆音量 CLEAN 和 DIRTY。 GAIN 開大時,破音那一路本來就會變大聲,需要 DIRTY 來補償;拆開之後,兩邊各自調整, 再由 OUTPUT 控制整體音量。最後,輸出端加上簡單的音量表,超過 0 dBFS 時提示使用者, 避免把想要的破音,和輸出真的被切掉的爆音搞混。