跳轉到內容

ZynAddSubFX/PADsynth

0% developed
來自華夏公益教科書,開放的書本,為開放的世界
諧波結構編輯器
振盪器結構編輯器
包絡線和 LFO 振幅編輯器
包絡線和 LFO 頻率編輯器
包絡線和 LFO 濾波器編輯器
  1. 演算法
  2. 輸入和輸出
  3. 實現

即使這個演算法的想法比其他演算法簡單得多,它也能生成非常美妙的聲音。它會生成一個完美的迴圈波表樣本,可用於樂器。它可以輕鬆地生成合奏、合唱、金屬聲音(鐘聲)以及其他許多聲音。

此演算法是公有領域的。本頁包含一些可以用於您的專案或產品的公有領域 C/C++ 實現原始碼。

該演算法在 ZynAddSubFXPADsynth 模組中實現,您可以下載它來親身感受它能夠生成多麼美妙的聲音。

此演算法的原始碼可以免費獲取,以便在許多軟體/硬體合成器中實現。如果您的合成器使用大量樣本,您可以使用此演算法生成許多可直接使用的樣本。

使用此演算法的樂器的音效示例

[編輯 | 編輯原始碼]

這些音效示例是由 ZynAddSubFX 生成的。所有樂器的波表都是由該演算法生成的。這些示例分為兩類

帶效果

[編輯 | 編輯原始碼]

在此類別中,使用了一些效果。這些效果可以是混響、移相器等。通常,唯一的效果就是混響。

無效果

[編輯 | 編輯原始碼]

此類別中所有樂器都是“幹”的。沒有混響,也沒有其他效果。

提示和建議

[編輯 | 編輯原始碼]
  1. 請記住,生成的波表是完美迴圈的
  2. 將波表用於樂器時,在每個 NoteOn 時,從隨機位置開始,而不是從開始位置開始。這樣可以避免每次按鍵時都聽到相同的聲音
  3. 您可以使用同一個波表生成立體聲聲音,方法是對左右聲道在不同的位置播放同一個波表。最佳做法是將左右聲道的差異設為 N/2
  4. 為不同的音高生成不同的波表,並使用最接近所需音高的波表
  5. 根據基頻對諧波的幅度陣列進行上取樣或下采樣。在這種情況下,我們需要設定一個引數 “base_frequency”,它表示陣列保持不變的頻率。
    示例:我們有 A_orig[]={1,2,1,3,0,0,1,0},base_frequency 等於 440 Hz
    以下是一些情況
    - A[] for 440 Hz:與 A_orig[] 相同
    - A[] for 220 Hz:是 A_orig[] 的 2 倍上取樣
    因此:A[]={1, 1, 1.5, 2, 1.5, 1, 2, 3, 1.5, 0, 0, 0, 0.5, 1, 0.5, 0}
    (原始 A_orig 幅度以粗體顯示)
    - A[] for 880 Hz:A_orig[] 的 2 倍下采樣
    因此:A[]={1.5, 2, 0, 0.5}
    - A[] for F Hz:A_orig[] 乘以 440/F 的倍數。


    即使這個想法非常簡單,但生成的聲音非常自然,因為它根據諧波的頻率而不是諧波的編號來保持頻譜恆定。這遵循文件中的第 4 點,我在其中描述了一些關於合成的原則。
  • 源文字:此頁面的原始內容(包括影像、聲音等)在公有領域釋出。


華夏公益教科書