shorepine / amy

AMY - the Additive Music synthesizer librarY

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Faster Juno voices by stacking oscillators

dpwe opened this issue · comments

The Juno (analog-style subtractive synthesis) voices are quite expensive, giving lower polyphony than the DX7 (FM) voices.

One thing that makes these voices expensive is the dynamic filtering (VCF), which needs some fairly complex computation to achieve good dynamic range in fixed-point.

Because of our oscillator-oriented architecture, identical filtering is applied to each oscillator involved in a voice, before summing the outputs. A Juno voice can involve up to 4 oscillators: PWM, Saw, Sub-osc, and noise.

It would be mathematically equivalent (to first order) to sum the oscillator waveforms then apply filtering once, rather than filtering them all individually then summing. In the extreme case, this would reduce the cost of filtering to 1/4.

But this would require a major restructuring of signal flow during osc rendering. We could tie this to the chained_osc structure.

Applied in bceca72