Setting middlePosition for Slider affects minimum return valueNormalized
-
I have a Low Cut knob with a range 20-20000. I want to set the middlePosition to 400 so that the relevant frequencies are available.
If I monitor the valueNormalized, this does not affect the value itself; setting the knob halfway returns 0.5 as it should. So there's a translation layer that takes the middlePosition and the range and spits out the final output.
However, if I set this middlePosition to 400, the minimum return on valueNormalized I can get is 0.0790....
This negatively affects my LAF knob attempt.
If I delete the middlePoint parameter and have the response be linear, it behaves as expected.
Obligatory "I'm new here". What am I missing?
Thanks.
-
@aaronventure Are you using the normalized value to draw the knob?
-
@d-healey Yes, that's why the graphic jumps. The normalized value cannot go below 0.079 if I set middlePosition to 400
-
@aaronventure Can you post your laf function?
-
It's a modified version of the one from the examples.
filterLAF.registerFunction("drawRotarySlider", function(g, obj) { var leadPath = Content.createPath(); var backgroundPath = Content.createPath(); var range = obj.max - obj.min; var a = obj.area; var startOffset = Math.toRadians(135); var arcThickness = 0.06; var arcWidth = 0.6; var pathX = (1.0 - (arcWidth + arcThickness)) / 2; // centers it horizontally backgroundPath.clear(); var endOffset = -startOffset + 2.0 * startOffset * obj.valueNormalized; // Label Text g.setColour(COLOR_MONOCHROME_BASE); g.setFont("Arial", 14); g.drawAlignedText(obj.text, [a[0], UI_FILTERS_LABEL_OFFSET, a[2], a[3]], "centredBottom"); // Background Arc g.setColour(COLOR_LEAD_DARK); backgroundPath.addArc([pathX, pathX, arcWidth + arcThickness, arcWidth + arcThickness], -startOffset , startOffset); var pathArea = backgroundPath.getBounds(obj.area[2]); // get area with ui dimensions g.drawPath(backgroundPath, pathArea, obj.area[2] * arcThickness); // Lead Arc leadPath.addArc([pathX, pathX, arcWidth + arcThickness, arcWidth + arcThickness], -startOffset, endOffset); var pathArea = leadPath.getBounds(obj.area[2]); g.setColour(COLOR_LEAD_BASE); g.drawPath(leadPath, pathArea, obj.area[2] * arcThickness ); }
-
@aaronventure Thanks, I'll take a look at it shortly.
-
Seems to work here, perhaps I'm misunderstanding the issue
HiseSnippet 1342.3ocsWstaaaCElJMJa16BVG1C.Q9kbqiqcZZ1.BJlyMuk0bwnNsqCEEEzRT1rVhTijJotC8+6wZuC6EYuAcGRIKImaM0.0+HwjmaemOd3gG2WJ7oJkPhbpc5zDJx4qcGLkqGu6XBiiNXOXe2HRnlpzncllPTJZ.xw4N+hQrSskQ1O+2OuCIhv8okagPOWv7oGxhY5xc628Irnndj.5or3JZuQ2C7E7cEQhT.J2wsMJg3OgLhdLwn1RtHmU1OfoExAZB.FPmcDASGLVbNOS+myTrgQTyhNnAfix1Fs6XVTP+YooBgbVteYRemrj9GbOhEvJ1uL4+Nq.boEU4.mktIH04S.RNUfzxYP5ttC7krDcoDCd9J2C3ZpLj.TcUnjoKZo2rh6tBPCttULYBsmDVTXg2lsa2DC+owV0qCzsRiCYQfvC2tG9w3YF5KoP9bnvmDcnPLYadPOJMxqznyHR7S3hgcpXzHpdWQbhfCK7V0JcUiE0Y7HFmhCS49ZlfiEbqPicRQjm+LiZBtMJk1n9eUuFHTIhnsRjLvaEpXBxyMJcrPFShXuiF30.Bx6g3bi3nkxrqMf6RhhFBkVdyiCKTKHiVR5HlB9dubT6sZfjb9SEZhb5fHV.UtZyhTxaTSrX3arH2PMQTRPehd7knTylFZDCeLJZvwHoHke6TWR3infVPrfC22hWK6aLdoJjbwDvAY6VHRAXWeRXHPEfRGA9tkV7TR.ivUdcd3ipDHhz+zwL+IbntCzscq1atUspR+cVfEusas4EhRB32W.R75zpM.PuBku+bdsQC7CvquE9AO.6SMkmJLSiGKjr2AT.bDM05wbGOOO0xGHXosbbVTo7fhLaspI58wqC33dyk72yxPmMeczV0qUDN.T6TDQ71Re6tixJhLMn7LNX3nrE471EvHIH.Lz6kV9nIN+eWCabsBdUy4SmlUSjJGXF2uMbjCo+EvAbcXGyBk2rxhWt9qZXIdPD1rA9bFD3TFN.5HyUPAsJOgM071hv4cZyh30DWwq.wN2Qb94CDoCgKDE73raGednnlk0BPVdgBybJp.AWC4bkG2LMMNaYmBMJ3mYd71wLXSKKC8Xa.Yhyk50VzIpwVUZbdrPSOg6YazT+80wWTTX3UJKuEWDUdkhMODKuIC83owCoxpMnMJBuTM+yeqb6d9yOqIWEEE7C3L8IIz708DQAlm0Le+xOVhx6RZd1LGgfpZ6ilea9ilY8nQLvIegqklQVvWLvw+71tnmcvdDMYla.OBQIgJ0LSx3rG8LX7kr2hq4tGUMQKRr5l+5B7D8GMnuE4357XGDZp4K+FDXkdpgRVwp.JlEDDQ6KTLCkWNNzztvqOICfNSUmwJt5HWazEdCnX4e+ucUoggLS.cw+56PPETrRCv5fXXJJjy269LEEGPCIoQZrZB3J3c4IzfSE1wqN2b2pz6+Q2wT1nw5p6DKBnlIP5Io+YJk6OEofyP6Cx8EIoIlzd6ghynnxKKf8qfPe3CYC+cogbfwqDAoQD87ybYFtLWfgVpNniYXFnIkdZUh4SXPr123fX2VHdW29Ls+3qFiKcEXDpx9bfw7wW+F28CCo95R.trauWrnyp9QB+SEoZFeDLAgzVtcbZ7.3j1mBQmyoQJSo9Rl6oYqaaVaXfAPqY6hO.exE1wr1IWXmYBQwDeo309Y2tMCH+k1c.Lws+dfZtGYViKtV65BSoXtNwdsuuI8WCZcb01r9BXyCW.a1XAr4QKfMat.17iKfM+zMZi4mIscpVDmcc.1n+911qNN6yIPkksJD8+.XY1JM.
-
@d-healey Thanks for having a look at this.
I still get the same behavior with your version, though now it cuts off at 0.17.
I'm on commit
3235dac - - bump version to 3.6.0
-
Oh right, change the step size to 0.01, that might improve the resolution.
-
@d-healey Alright, now it's skipping at 0.079 like my own example.
Just to confirm, are you getting the same behavior?
-
@aaronventure I see the same but the behaviour looks correct to me. What value are you expecting to see?
I wonder also what the calculation is under-the-hood, because I get a different result with my own "standard" normalisation function.
inline function onKnob1Control(component, value) { local normalizedValue = (value - component.get("min")) / (component.get("max") - component.get("min")); Console.print(normalizedValue + " : " + component.getValueNormalized()); };
-
@d-healey When using the control while holding the mouse down, it snaps down to 0 after getting down to 7.9%. That leaves the entire 7.9% of the range inaccessible.
Shift clicking and manually altering the decimal values of the slider when at 20.x will let the normalizedValue go down as it should, as the graphic will update properly.
But when dragging with the mouse, it always snaps. After monitoring the "filter freq" value it outputs, I think it's because that always gets rounded to two decimal points, as the set step size is 0.01.
Moving the midpoint further up alleviates the situation, but it's not the correct move design-wise in this case. I'll try doing manual translation.
I wonder if I could force denser step size.
-
Huh.
knob_LowCut.set("stepSize", 0.000001);
does indeed work. But that's as dense as it'll go.
I wonder if there are any downsides. Perhaps in DAW automation?
-
Does adjusting the mouse sensitivity help?
-
@d-healey No.
I have settled on stepSize 0.0001 with middlePosition 1000 and it works well. I think stepsize is the culprit, and the 20-20000 range is so insane in this curve that the frequency value just gets truncated, but that's the nature of filter frequency response being mapped to a knob.
Thanks for helping me work through this.