ZynAddSubFX/PADsynth/算法
外观
< ZynAddSubFX | PADsynth
为了理解这个算法的工作原理,你需要熟悉本文作者对乐器的理解方式。请阅读关于 每个泛音的带宽和随机性 的含义和重要性的介绍。
该算法生成一些可以以不同的速度播放以获得所需声音的大型波表。该算法仅描述这些波表是如何生成的。结果是一个完美的循环波表。与使用逆快速傅里叶变换的其他合成方法不同,该方法不使用重叠/添加方法,并且整个样本只进行一次 IFFT。
基本步骤是
- 创建一个非常大的数组,它表示声音的振幅谱(所有值的默认值为零)
- 生成每个泛音在频率上的分布并将其添加到数组中
- 为频谱中的每个频率设置随机相位
- 对整个频谱进行一次逆傅里叶变换。不需要任何重叠窗口,因为整个样本只进行一次IFFT。
输出是可以用作波表的样本。在下图中,这些步骤以图形方式表示
本文作者认为一个泛音(倍音)是由许多频率组成的。一个泛音的这些正弦分量分布在一定频率范围内。高泛音具有更大的带宽。在自然合唱团/合奏中,带宽与泛音频率成正比。以下是由该算法生成的乐器频谱的示例
频谱 | 频谱特写 |
泛音越来越宽,直到达到某个频率,它们可能合并成噪声带(如上面的全频谱图像所示)。这是一种正常现象,我建议不要通过限制泛音的带宽来避免这种情况。
这描述了泛音扩散的功能。以下是一些关于它们如何扩散的示例
- 一个特例是泛音内只有一个正弦分量。在这种情况下,泛音和“正弦分量”是同一件事。
|
- 失调。在这种情况下,有两个正弦分量是失调的。
|
- 在泛音内均匀分布(所有分量具有相同的振幅)
|
- 正态(高斯)分布。正弦分量振幅呈钟形。最大振幅位于频带的中心。这种分布产生最自然的声音(它模拟了非常非常大的合奏)
|
当然,你可以使用许多其他泛音轮廓函数。ZynAddSubFX 对 PADsynth 算法的实现提供了许多生成泛音轮廓的方法。另外,重要的是泛音具有相同的振幅,无论轮廓函数/参数和带宽如何。
该算法认为每个泛音的正弦分量的相位是随机的。