Match as in ‘null when the phase is flipped’?
There is no guarantee that it will.
There is no standard way to implement a filter, instead, there are many different varieties, and even then, the plugin author may have decided to add non-standard parts (perhaps some subtle saturation).
That being said…
rq is the reciprocal of q, which is the bandwidth/cutoffFreq. Is resonance the some thing as q… maybe? It depends on what the plugin designer did. Perhaps the number for the setting shown in the picture would be 1/13.3, but its impossible to tell.
The Slope is even more complex as they have a knob for increasing slope. The built in filters do not support this. Instead, in super collider, you can double the slope by duplicating the filter in series. BHiPass4
does this for you. This is called the order of the filter - BHiPass
is a 2nd order filter and gives 12db/oct, BiHiPass4
is a 4th order and gives 24db/oct. Therefore each order is 6db/oct. I think - hopefully some one will correct me if I’m wrong - that you can add another filter in series, and blend it with the previous signal to get factional amounts? I have no idea if this will create odd phasing issues having not dived into filter design too much.
The frequency is generally agreed to be some fixed reduction point, I imagine this will line up with all the supercollide ugens, but again, no guarantee.
I’m not too sure what the overlapping circles mean, is that bar: left, mid, stereo, side, right? Not too sure what thats about.
So, I’d guess the correct way (without slope) to implement this would be…
BHiPass.ar(sig, \freq.kr, \resonance.kr.reciprocal, \gain.kr(0).dbamp.sanitize )
Now with the slope - and I’m really guessing here…
x = {
var max_slope = 24; // can change this if needed
var slope_per_filter = 6; // fixed by BHiPass
var num_filters = max_slope / slope_per_filter;
var slope = \slope.kr(0).clip(0, max_slope);
var lerp = (1..num_filters).collect{ |n|
(slope_per_filter + slope - (n*slope_per_filter)) / slope_per_filter // in db not amps, probably wrong
}.clip(0,1);
var filter_bank = lerp.collect{ |l| // an array of functions
{|in|
var rq = 1.blend(\resonance.kr(4).clip(0.00001, inf).reciprocal, l);
var f = BHiPass.ar(in, \freq.kr(220), rq);
in.blend(f, l)
}
};
var sig = WhiteNoise.ar();
filter_bank.inject(sig, {|i, f| f.(i) }) * \gain.kr(0).dbamp.sanitize;
}.play
x.set(\slope, 0)
x.set(\freq, 1500)
x.set(\resonance, 36)
x.set(\gain, -10)