ZynAddSubFX/PADsynth
外觀





即使這個演算法的想法比其他演算法簡單得多,它也能生成非常美妙的聲音。它會生成一個完美的迴圈波表樣本,可用於樂器。它可以輕鬆地生成合奏、合唱、金屬聲音(鐘聲)以及其他許多聲音。
此演算法是公有領域的。本頁包含一些可以用於您的專案或產品的公有領域 C/C++ 實現原始碼。
該演算法在 ZynAddSubFX 的 PADsynth 模組中實現,您可以下載它來親身感受它能夠生成多麼美妙的聲音。
此演算法的原始碼可以免費獲取,以便在許多軟體/硬體合成器中實現。如果您的合成器使用大量樣本,您可以使用此演算法生成許多可直接使用的樣本。
這些音效示例是由 ZynAddSubFX 生成的。所有樂器的波表都是由該演算法生成的。這些示例分為兩類
在此類別中,使用了一些效果。這些效果可以是混響、移相器等。通常,唯一的效果就是混響。
|
|
|
| 無法收聽這些檔案?請參見 媒體幫助. | |
此類別中所有樂器都是“幹”的。沒有混響,也沒有其他效果。
|
|
|
| 無法收聽這些檔案?請參見 媒體幫助. | |
- 請記住,生成的波表是完美迴圈的
- 將波表用於樂器時,在每個 NoteOn 時,從隨機位置開始,而不是從開始位置開始。這樣可以避免每次按鍵時都聽到相同的聲音
- 您可以使用同一個波表生成立體聲聲音,方法是對左右聲道在不同的位置播放同一個波表。最佳做法是將左右聲道的差異設為 N/2
- 為不同的音高生成不同的波表,並使用最接近所需音高的波表
- 根據基頻對諧波的幅度陣列進行上取樣或下采樣。在這種情況下,我們需要設定一個引數 “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 點,我在其中描述了一些關於合成的原則。
- 源文字:此頁面的原始內容(包括影像、聲音等)在公有領域釋出。
