Moog VCF , below Zero hertz ,clipping

I am audio rate modulating the moog vcf wit a Sinosc.ar , intial frequency of vcf is set 500 , mouse is controlling resonance.

{MoogVCF.ar(Saw.ar([120,118],1,-0.5),500+SinOsc.ar(150,0,700,1),MouseY.kr(0.1,1),1,0)}.play

Obviously I need a pretty high value for the sinosc’s third argument , mutliply is set 700 , as soon as the Filter’s initial frequency is set to 100 things start to sound prett bad
{MoogVCF.ar(Saw.ar([120,118],1,-0.5),100+SinOsc.ar(150,0,500,1),MouseY.kr(0.1,1),1,0)}.play

Even when setting sinosc to low freq of 2 Hz and mod o amount of 500, the filter will clip
I must be obvioulsy missing something but initial frequncy of 500 + 200 (sinosc’s multiply value ) aren’t exactly out of this world numbers , certainly not when it comes to filter frequency and these are not exponentially scaled but linear
I guess what is happening is that the frequency of the filter is going way below zero which causes clipping ( 200 initial frequency ) and 500 from the sineOsc mod amount , which is a bi-polar value
Is this a bug in the filter ?

{MoogVCF.ar(Saw.ar([120,118],1,-0.5),200+SinOsc.ar(2,0,500,1),MouseY.kr(0.1,1),1,0)}.play

Filter math never works well when the frequencies cross 0 or the Nyquist frequency = half sampling rate (or even get too close to either of those boundaries).

SC allows you to specify bad filter frequencies, but it doesn’t promise a beautiful clean sound in that case. The SC philosophy is more like, “you can abuse UGens if you want, and to get a clean sound, it’s your responsibility to keep the inputs in safe limits.”

Concretely that means, for 200+SinOsc.ar(2,0,500,1):

  • Either the 200 should be at least 510 or 520 instead;
  • Or, clip(200+SinOsc.ar(2,0,500,1), 20, 20000) (which breaks the sctweet aesthetic).

hjh