加法合成与“仅绘制波形”

信息处理 Python 信号合成
2022-02-13 06:45:28

我最近一直在尝试PYO,这是一个用于声音合成和音频处理的 Python 模块。这真的是我第一次涉足这个话题,所以我有一个可能是一个非常基本的问题。

有一些替代机制可用于创建周期性波形,例如锯齿波或三角波:

  • 使用加法合成(通过SawTable,内部调用HarmTable

    这通过连续添加正弦波来近似波形。例如,

    from pyo import *
    table = SawTable(order=20)
    

    这让我:

    在此处输入图像描述

  • 使用“线性”表(LinTable

    这允许将波形构建为一系列直线段。例如,

    from pyo import *
    table = pyo.LinTable([(0, -1), (8191, 1)])
    

    这让我:

    在此处输入图像描述

当然,这两种波形听起来很相似,但它们在性质上是不同的。两者的技术区别是什么?是否有理由更喜欢一种机制而不是另一种机制?

2个回答

绘制的锯齿波形可能包含比波形采样率的一半更高的频率谐波,从而导致混叠(其他折叠频率处的潜在噪声)。

使用纯正弦表的加法合成可以避免这种混叠噪声问题。

如果您的目标是获得锯齿波,那么加法合成是一种不好的方法,因为锯齿波是无限数量的正弦波(在连续情况下)的叠加。许多乐器,尤其是木管乐器,都可以通过相对较少的正弦波很好地建模。确切的混音决定了音色,从而决定了它听起来像什么乐器,例如双簧管与单簧管的对比。然而,小提琴会产生一种更像锯齿波的滑杆运动,因此更难以通过加法合成准确有效地建模。

除非您要使用“电子”声音,否则我会说单独使用LinTable 有点不寻常。但是,将其用作过滤器的输入会更有意义。例如,如果您确实使用锯齿波对小提琴进行建模,您几乎可以肯定将其通过(除其他外)低通滤波器以使其稍微圆润并改变音色。