I decided to spend some time improving the SMR4 filter and I quickly tested in LTSpice two variants of the circuit, one running from a single +5V rail, the other one from a stable +9V rail (in addition to the +5V regulated digital rail).
The +5V version needed single supply rail to rail op-amps (I used TLV2474s) otherwise there was very little head-room since the TL074s clip at 1.5V of their supplies. Simpler supply but limited choice of op-amps -> not good.
The +9V version ran fine but there was little improvement in cost and board space - the LT1054 disappeared, but the CV scaling circuit was a bit more complicated, and it made it a bit more complicated to run the circuit form a 9V battery : when using a cheap DC supply, the input has to go through a 7809 ; when using a battery, the input has to bypass the 7809 (but there would be differences in cutoff if the battery voltage dropped!)
In the end, the charge pump converter solution isn’t that bad - there’s little head-scratching when designing circuits, and it works from both a 9V battery and cheap DC supplies, without having to switch anything…
I tried it some time ago in august 2009 and it was too slow CPU-wise (it ran fine at 16kHz, not at 32 kHz). But I can give it a try for the next firmware revision, maybe it’ll be easier to do with the tricks I’ve learned in those years…
I actually tried to do a Karplus-Strong Oscillator model. One problem I had is the buffer, as it’s supposed to keep a full cycle of the waveform in-memory, and the length of the buffer varies with the oscillator’s pitch. I’m not sure there’s enough memory left to do this without abusing one of the wavetables.
Then, I started looking into building an ARP 4072 integrator cascade filter instead
@pichenettes: yes, though there was something else: the oscillator, as far as I can tell, does not know when a note is triggered. That makes it difficult to switch from the initial noise-excitation phase to the damping phase. The sub-oscillator has this parameter, but then it would be difficult to reuse the wavetable code in this context - plus, I don’t think the sub-oscillator is supposed to be such a drain on the CPU
I thought about using an envelope to pass this information through the oscillator’s parameter, but that would be pretty limiting. Any solution I thought of involved severely butchering all the code everywhere, which would make it difficult to share.