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 点,我在其中描述了一些关于合成的原则。
- 源文本:此页面的原始内容(包括图像、声音等)在公有领域发布。