shorepine / amy

AMY - the Additive Music synthesizer librarY

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Self-oscillation

dpwe opened this issue · comments

I've seen it mentioned that the Juno VCF is capable of self-oscillation, which sounds very scary in DSP.

I wasn't sure how much it mattered, but going through all the Juno patches, I see B66 Toy Rhodes, which has all the oscillators turned off, but the filter resonance turned up to max. So I guess that's an example where the note actually comes from the filter alone.

Self-oscillation implies a filter that is not stable. There must be some amplitude-related nonlinearity in the actual Juno circuit that keeps it, in fact, stable once it starts oscillating. We might be able to implement that with some kind of nonlinear clipping on the filter state (as we have on the final output), but that seems expensive, since it's potentially one table lookup + interpolation per sample.

This actually uncovers a major architectural difference between a real Juno and our implementation: for efficiency, we implement the amplitude envelope generator when calculating the initial waveform, then apply the filter to this envelope-shaped waveform. A real Juno has a fixed-amplitude oscillator, then the filter, then the ADSR envelope shaping. By the graces of linear system commutativity, this gives the same result.

But if the filter is being used as a sine wave oscillator, it will bypass the application of the amplitude envelope, and the results will no longer correspond to a real juno.

We could put in a special-case for patches like the toy Rhodes to rewrite the config with an explicit sine wave osc input (look for all oscs off and resonance > 50%) but that's a big fake.

I think even with a little actual oscillator input, the self-oscillation doesn't happen.