跳轉到內容

ZynAddSubFX/PADsynth/演算法

來自華夏公益教科書,自由的教科書

為了理解這個演算法的工作原理,你需要熟悉本文作者對樂器的理解方式。請閱讀關於 每個泛音的頻寬和隨機性 的含義和重要性的介紹。

該演算法生成一些可以以不同的速度播放以獲得所需聲音的大型波表。該演算法僅描述這些波表是如何生成的。結果是一個完美的迴圈波表。與使用逆快速傅立葉變換的其他合成方法不同,該方法不使用重疊/新增方法,並且整個樣本只進行一次 IFFT

基本步驟是

  1. 建立一個非常大的陣列,它表示聲音的振幅譜(所有值的預設值為零)
  2. 生成每個泛音在頻率上的分佈並將其新增到陣列中
  3. 為頻譜中的每個頻率設定隨機相位
  4. 對整個頻譜進行一次逆傅立葉變換。不需要任何重疊視窗,因為整個樣本只進行一次IFFT。

輸出是可以用作波表的樣本。在下圖中,這些步驟以圖形方式表示

每個泛音的頻寬

[編輯 | 編輯原始碼]

本文作者認為一個泛音(倍音)是由許多頻率組成的。一個泛音的這些正弦分量分佈在一定頻率範圍內。高泛音具有更大的頻寬。在自然合唱團/合奏中,頻寬與泛音頻率成正比。以下是由該演算法生成的樂器頻譜的示例

頻譜 頻譜特寫

泛音越來越寬,直到達到某個頻率,它們可能合併成噪聲帶(如上面的全頻譜影像所示)。這是一種正常現象,我建議不要透過限制泛音的頻寬來避免這種情況。

一個泛音/倍音的頻率分佈(或泛音輪廓)

[編輯 | 編輯原始碼]

這描述了泛音擴散的功能。以下是一些關於它們如何擴散的示例

  • 一個特例是泛音內只有一個正弦分量。在這種情況下,泛音和“正弦分量”是同一件事。
  • 失調。在這種情況下,有兩個正弦分量是失調的。
  • 在泛音內均勻分佈(所有分量具有相同的振幅)
  • 正態(高斯)分佈。正弦分量振幅呈鐘形。最大振幅位於頻帶的中心。這種分佈產生最自然的聲音(它模擬了非常非常大的合奏)

當然,你可以使用許多其他泛音輪廓函式。ZynAddSubFX 對 PADsynth 演算法的實現提供了許多生成泛音輪廓的方法。另外,重要的是泛音具有相同的振幅,無論輪廓函式/引數和頻寬如何。

泛音正弦分量的相位

[編輯 | 編輯原始碼]

該演算法認為每個泛音的正弦分量的相位是隨機的。

華夏公益教科書