跳转到内容

ZynAddSubFX/PADsynth/算法

来自维基教科书,自由的教科书

为了理解这个算法的工作原理,你需要熟悉本文作者对乐器的理解方式。请阅读关于 每个泛音的带宽和随机性 的含义和重要性的介绍。

该算法生成一些可以以不同的速度播放以获得所需声音的大型波表。该算法仅描述这些波表是如何生成的。结果是一个完美的循环波表。与使用逆快速傅里叶变换的其他合成方法不同,该方法不使用重叠/添加方法,并且整个样本只进行一次 IFFT

基本步骤是

  1. 创建一个非常大的数组,它表示声音的振幅谱(所有值的默认值为零)
  2. 生成每个泛音在频率上的分布并将其添加到数组中
  3. 为频谱中的每个频率设置随机相位
  4. 对整个频谱进行一次逆傅里叶变换。不需要任何重叠窗口,因为整个样本只进行一次IFFT。

输出是可以用作波表的样本。在下图中,这些步骤以图形方式表示

每个泛音的带宽

[编辑 | 编辑源代码]

本文作者认为一个泛音(倍音)是由许多频率组成的。一个泛音的这些正弦分量分布在一定频率范围内。高泛音具有更大的带宽。在自然合唱团/合奏中,带宽与泛音频率成正比。以下是由该算法生成的乐器频谱的示例

频谱 频谱特写

泛音越来越宽,直到达到某个频率,它们可能合并成噪声带(如上面的全频谱图像所示)。这是一种正常现象,我建议不要通过限制泛音的带宽来避免这种情况。

一个泛音/倍音的频率分布(或泛音轮廓)

[编辑 | 编辑源代码]

这描述了泛音扩散的功能。以下是一些关于它们如何扩散的示例

  • 一个特例是泛音内只有一个正弦分量。在这种情况下,泛音和“正弦分量”是同一件事。
  • 失调。在这种情况下,有两个正弦分量是失调的。
  • 在泛音内均匀分布(所有分量具有相同的振幅)
  • 正态(高斯)分布。正弦分量振幅呈钟形。最大振幅位于频带的中心。这种分布产生最自然的声音(它模拟了非常非常大的合奏)

当然,你可以使用许多其他泛音轮廓函数。ZynAddSubFX 对 PADsynth 算法的实现提供了许多生成泛音轮廓的方法。另外,重要的是泛音具有相同的振幅,无论轮廓函数/参数和带宽如何。

泛音正弦分量的相位

[编辑 | 编辑源代码]

该算法认为每个泛音的正弦分量的相位是随机的。

华夏公益教科书