我正在编写一个软件合成器,需要在44.1 kHz采样时实时生成带宽,别名的免费波形.锯齿波形现在可以做到,因为我可以通过将两个锯齿波混合在一起而产生脉冲波,一个反相和相移.
到目前为止,我已经尝试了以下方法:
>在启动时,以不同的频带限制频率预先计算一个周期的完美带宽波形样本,然后播放混合在一起的两个最接近的波形样本.工作好,我猜,但不觉得很优雅.需要大量的样本,或者他们之间的“差距”将被听到.内插和混合也是cpu密集型.
>集成一串直流补偿的正弦脉冲以获得锯齿波.听起来很棒,除了波浪偏离零,如果你没有得到正确的直流补偿(我发现真的很棘手).通过向积分器增加一点泄漏可以减少直流问题,但是失去低频.
解决方法
有很多方法可以接近带宽波形生成.你会像往常一样最终交易计算成本与质量.
我建议你在这里看看这个网站:
查看档案!它充满了好材料.我刚刚搜索关键字“bandlimited”.你应该持续忙碌至少一周的时候弹出的材料.
Btw – 不知道这是你想要的,但是几年前我做了别名缩减(例如,不是真正的带限制)波形生成.我刚刚计算了最后一个和当前采样位置之间的积分.对于传统的合成波形,如果将积分间隔分割成奇异点(例如,当锯齿波的复位)时,您可以轻松实现. cpu负载低,质量可以满足我的需求.
我有相同的漂移问题,但是在积分上采用非常低的截止频率的高通消除了这种影响.真正的模拟合成器不要进入亚赫兹地区,所以你不会错过太多.