After an earlier optimization pass, I temporarily switched Darśana’s filter to a simplified / lightweight structure to free up CPU and keep the whole engine stable while I iterated on the rest of the system.
Since then, I’ve gone back and implemented what I actually wanted at the heart of the synth: a nonlinear topology-preserving transform (TPT) ladder filter with zero-delay feedback on the RP2350 - no delay at all in the feedback behavior.
What changed
- From: a simplified, lighter filter using hard-clip-style linear saturation
- To: a TPT/ZDF ladder with nonlinear saturation, where the feedback is solved with zero delay - no delay at all, not even a half-sample delay
Why I changed it
I changed it because I didn’t like how the previous approach behaved when driving the filter hard. With high input gain, the waveform would “kink” and fold in a way that felt too abrupt. What I wanted instead was the smoother, more organic kind of compression you hear in real analog circuits — where it squashes gradually rather than snapping into a bend.
In my view, what most strongly separates analog from digital in this kind of synth filter is (1) how it distorts when driven hard, and (2) aliasing artifacts. Getting the “right” kind of saturation at high input levels is one part of it — but keeping the digital side clean from foldback is just as important.
On the oscillator side, I also moved to a 4th-order PolyBLEP for anti-aliasing. This more aggressively suppresses the foldback components that people notice most — especially the aliases that fold down below the fundamental, which tend to read as obviously “digital” compared to higher-frequency spurs.
Current synth load (still on RP2350)
I’m currently running 5-voice polyphony, and each voice is 3 oscillators + noise → nonlinear TPT/ZDF ladder. The RP2350 definitely has constraints, but it can still run serious, high-quality VA synthesis on real hardware.
Hiroyuki OYAMA
Discussions
Become a Hackaday.io Member
Create an account to leave a comment. Already have an account? Log In.