Articles/Part 1 of 2 →
EN/TW

Sub Sound! Turning Pitch into an Octave: The Theory

封面

大腦如何判斷音高?

彈奏貝斯的第三條弦第十二格,我們會稱為音高 A2(110Hz),但琴弦實際上不只在 110Hz 振動,同時也在 220、330、440Hz……等頻率振動,這些整數倍的頻率叫做諧波泛音(harmonics); 通常會把最低的 110Hz 叫做基頻(fundamental),整排頻率統稱為泛音列(harmonic series)。

不過真實的樂器並不完美,材質、粗細、張力等因素都會讓泛音的位置稍微偏離整數倍,這種偏離叫做非諧性(inharmonicity)。 再加上撥弦的瞬間、碰到琴格、琴身共振,甚至拾音器收到的電流聲,都會混進一些不屬於這個音的頻率。 所以一個 A2 實際上是一整團頻率疊在一起,只是多數的能量還是在泛音列上。

那人腦是如何判讀這些頻率?可以來做個思想實驗,假設有一台完美的頻率調節器:

  • 第一個實驗:彈奏 A2 但把基頻 110Hz 整個拉掉。剩下 220、330、440Hz……間距仍然是 110,這時大腦會自己把缺掉的基頻「補」回來,所以你聽到的還是 A2,只是音色變薄了。 這個現象叫做消失的基頻(missing fundamental)。

  • 第二個實驗:一樣彈 A2,這次把 110、330、550Hz 這些奇數倍的泛音全部拉掉。剩下 220、440、660Hz……間距變成 220,所以聽起來就是 A3,音高往上跳了一個八度。 反過來想:如果在 A2 底下補上 55、165、275Hz 這一層,間距就變成 55,聽起來就是 A1。

所以判斷音高,看的不會只是「最低的那個頻率」,還有泛音之間的間距。 往上一個八度,等於拿掉一層泛音讓間距變寬;往下一個八度,就是在底下補上一層讓間距變窄。

A2 泛音列與三種變化的頻譜對照
(佔位)泛音間距決定音高

當音高變成素材

現代常用的標準音 A4 = 440Hz,是在 20 世紀才逐漸成為國際共識,後來在 1975 年成為正式標準 ISO 16。 但根據演奏習慣,也可能把調音基準設在 440Hz 之外,例如 432、442 或 443Hz; 有人會形容 443Hz 的聲音色彩比 432Hz 更「明亮」。

有了標準音之後,其他的音高要怎麼定義?現在最普遍的共識是把一個八度,平均切成 12 份稱為十二平均律(12-TET)。 它的優點是方便,缺點是大部分的音程都與最和諧的比例差了一點; 例如最純淨的五度是 3:2,十二平均律的五度只差了約 2 音分;但大三度會偏高約 14 音分。

當然這些都只是理論。實際上樂器在製作與演奏時,很難精準且穩定地發出特定頻率。 像是木頭會因天氣改變共鳴與音準;彈奏者的指法與力度,也會讓音高產生細微的偏移。 而有想法的藝術家會利用這些現代理論上的「完美」與「不完美」作為他們音樂中的辨識度。

演奏巴洛克音樂的古樂團
圖 1:遵循該時代的音高習慣,演奏巴洛克音樂的古樂團常把 A 調在 415Hz 左右
Henrik Linder 與 True Temperament 彎曲琴格
圖 2:Henrik Linder 使用彎曲琴格,讓每一顆音都更精準
四分之一音音階
圖 3:在八度音內切出更多的音

捕捉音高

音高並不是某一個瞬間的東西,它是某段時間內的「結果」。 前面說過,大腦判斷音高靠的是泛音之間的間距,換到時間軸上,就是波形多久重複一次,也就是週期。 要知道週期,至少得等波形走完一輪;要確定它真的在重複,通常得等兩輪以上。

例如常見的採樣率是 48kHz,每秒記錄 48,000 個點,每個點只是那一瞬間的振幅數字,看不出任何音高。 A2(110Hz) 每 9.1ms 重複一次,大約要累積 436 個 sample 才走完一輪;如果觀察兩個週期,就需要將近 900 個 sample。 各頻率換算成時間約:

  • A4(440Hz):約 4.5ms(218 個 sample)
  • A3(220Hz):約 9.1ms(436 個 sample)
  • A2(110Hz):約 18.2ms(873 個 sample)
  • E1(41.2Hz):約 48.5ms(2,330 個 sample)

可以看出頻率越低花的時間越長,而且兩個週期還只是理想狀態, 實際上撥弦的雜訊、泛音的偏移,都會讓工具需要花更多時間才能下判斷。 在這個物理限制下,發展出了各種不同的追蹤方法。

A4 與 E1 兩個週期的時間長度比較
(佔位)越低的音,需要等越久

移動音高

常見的效果 Octaver 、 Pitch Shifter 和 Harmonizer 都是擷取一段訊號 x,轉成目標訊號 y 後進行混合。 要注意的是,擷取的訊號不只是基頻,而是整條泛音列。 A2 的 110、220、330Hz……乘上 ½ 之後變成 55、110、165Hz……,彼此的比例沒變,只是低了一個八度。 三種工具的主要差別,就在這個算法怎麼決定:

  • Octaver:比例固定是 ½(或 ¼),再和原音混在一起。
  • Pitch Shifter:可以自己設定固定比例,例如每顆音都往下 5 個半音。
  • Harmonizer:比例會跟著你彈的音改變。

如果玩過 Meris Hedra 這類和聲效果器,應該會注意到它有 Key 和 Scale 旋鈕,原因是同一顆音在不同調裡的身分也不同。 C 在 C 大調是主音,要配大三度 E(大三度約 ×1.26);到了 B♭ 大調,它變成第二級,就要配小三度 E♭(小三度約 ×1.19)。 預先設定好才能立即判斷這顆音要套用哪個音程比例。

所以同類效果的差異,還可以再拆成:

  1. 如何辨識當前的音(Tracking):有的追求即時跟上每一顆音,有的會多花一點時間確認再輸出。面對快速樂句或和弦時,這些設計差異也會影響到手感。
  2. 如何轉成目標音高(Pitch Shifting):不同演算法除了音高本身之外,還會決定 transient、phase 與 spectral envelope 要怎麼處理;不同廠牌藉此製作出各別的特色。

Tracking

類比電路:

  • Comparator + Frequency Division:偵測和產生一起完成,但只能處理倍數音程。電路不判斷音高,只看電壓有沒有越過基準線,把結果整理成方波。 再用 flip-flop 以倍數處理頻率,例如每兩次切換才輸出一次就是 ÷2 得到低八度;÷4 則得到低兩個八度。 每個瞬間都照同一套規則處理,所以幾乎沒有判斷音高的延遲。

  • Adaptive Peak Detection:測量兩個波峰之間的間隔,再推導出頻率。 問題是泛音和雜音會讓一個週期內出現好幾個小波峰,所以電路用電容記住上一個峰值當作門檻,只有夠高的峰才會被當成新的週期,藉此避開這些小起伏。 代價是音符衰減時峰值越來越低,尾段容易漏判,追蹤會變得斷斷續續。

  • Phase-Locked Loop:內部有一個振盪器,不斷調整自己的頻率去「鎖」住輸入訊號。鎖上之後很穩,但需要時間進入鎖定,訊號一變就得重新追。

原波形、方波、除二與除四的波形
(佔位)Comparator 把波形整理成方波,再用 flip-flop 除頻

數位電路:

  • Zero-Crossing:運算量低,但很容易受到高頻泛音和雜訊製造的額外交越點干擾。

  • Autocorrelation:準確度高,是目前調音器和音高修正常用的做法。把波形和「延遲過的自己」比對,找出最相似的延遲時間,就是週期。 但容易出現 octave error。

  • Frequency Domain(FFT、HPS、Cepstrum):資訊最完整。把聲音拆成頻譜,再從泛音的排列推算基頻。 但頻率解析度取決於 analysis window 的長度,越低的音需要越長的 window,延遲也跟著變長。

這些方法本質上都在時間、穩定度與準確度之間做平衡。 良好的演算法可以改善結果,但無法完全消除低頻訊號慢的物理特性。

Pitch Shifting

知道週期之後(或者有些方法根本不需要知道),下一步是做出目標音高的訊號。

類比作法:

  • Frequency Division:就是上面 comparator 的後半段。輸出是一個新的方波,不是原音的縮放,所以原本的泛音結構不會保留,這也是類比 octaver 那種厚實、帶點合成器感的聲音來源。

  • Full-Wave Rectification:經典 octave-up 方法,不需要先估計音高。把波形的負半部翻到正的一邊;對接近對稱的週期波形,會強烈產生兩倍頻率的成分,因此聽起來像高八度。 實際樂器波形並不完美對稱,所以通常也會留下其他諧波,形成 octave fuzz 那種明顯的失真音色。

原波形與全波整流後的波形
(佔位)全波整流讓頻率翻倍

數位作法:

  • Delay-Line / Granular:任何比例都能移,而且不需要追蹤。把聲音存進一段緩衝,再用不同的速度讀出來;讀得快音高就升,讀得慢就降。 但緩衝遲早會被追上或用完,必須持續重新安排或交疊讀取位置,接縫處容易出現 warble 或 glitch,這也是早期 pitch shifter 那種「抖抖的」聲音來源。

  • Pitch-Synchronous Overlap-Add:音色最接近原音。依照追蹤出來的週期位置,把波形一段一段切下來,再調整間距重新疊回去,原本的 formant 會被保留。 但非常依賴週期位置的準確度,而且只能處理單音。

  • Phase Vocoder:彈和弦也能移。用 FFT 把聲音分成一連串短時間頻譜,調整頻率位置與相位演化後再重建訊號。 但需要累積一段聲音才能分析,attack 容易被抹糊;整條泛音列連同 formant 一起被移動,音色也會跟著改變。

  • Synthesis:用追蹤出來的週期時間點,直接驅動新的波形(方波、正弦、三角波……)。 音色完全由自己決定,和原音的泛音列無關。

偵測決定了「多快、多準」,轉換則決定了「聽起來像什麼」。 兩邊各自取捨,組合起來就是各家效果器的個性,所以在設計這類效果時,最重要的是先想清楚使用場景。