我正在编写一个简单的汇编合成器作为一个学习项目,我想实现现代合成器上的一些更高级的功能,即 ADSR 包络和使用正弦波的脉冲宽度调制。目前,我基本上是手动生成样本并将它们推送到音频输出,它有一个样本缓冲区,当缓冲区接近空时它会产生一个中断。
我坚持的是如何生成“连续”波形。目前,我为单个波实例(无论是锯齿波还是脉冲波)生成样本,然后简单地循环该波以生成连续输出。正如您可以想象的那样,这不能很好地扩展到 PWM 和 ADSR 包络。因此,我需要按需生成波形,并对其进行动态调整,例如调制脉冲宽度或音高(例如,用于连奏),但我不知道如何在内存中有效地表示它,以及如何在缓冲区已满时“暂停”波形生成,以及如何在中断出现时“恢复”。
我不是在寻求解决方案,而是在推动正确的思考方向:-)
谢谢!