跳转到内容

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


华夏公益教科书