Gain Curve Request

Hi, I’m using FreeG to change gain in my racks, but it’s buggy; it’s like it updates (the rack state) when it wants to, and doesn’t update when I want it to, then decides to work again. I can’t reproduce it or find the bug :cry:, so here’s my request:

The only reason why I need FreeG is for the gain curve; it’s precise near zero, and accelerates as I drop it further, so could there be an option to set the gain curve to something other than the current one? I would prefer to get rid of all my FreeG plugins, and just use the output faders in Cantabile… One less (major) thing that could go wrong live. :confused:

I realize writing this that there has already been an update on the gain curve, or “scale,” but I don’t feel it’s practical compared to the FreeG. For example if I map a fader on my controller to both the FreeG and Cantabile’s gain slider, FreeG may be at -2db, while Cantabile’s is already at -4db, and it’s almost double like that all the way to about -10db. That’s the most crucial area for me!

Maybe (I wish) I missed something, and there’s an easier solution?

Thanks :sunglasses:

1 Like

Hi @Milo

Yes, the curve used for bindings has been tweaked a few times and your not the first to express problems with it.

I’m definitely open to suggestions for how this should be implemented.


Hi @brad thanks for replying. I thought about it a bit more, and compared Cantabile’s gain faders to several other gain sliders and faders, and realized there doesn’t seem to be much of a standard. Also, a huge factor that can change evrything is that not every fader (or setting thereof) has the same minimum/maximum Dbs of gain. For example I like to go from -60 to 0 db. The curve gets distorted (or cropped or something) if you change this setting in any volume fader.

That said, with a setting of -60 to 0db, I get similar results between vsts such as HOFA’s free gain plugin, ProQ2’s gain output, and FreeG, while Cantabile’s gain curve is (to me) basically impractical with this setting.

I guess if you were to implement this into Cantabile, it would have to be global, so a setting somewhere in the options menu could be nice, where we could change the gain curve. Maybe a selector to chose among different curves. Also what would be really nice is a selector for minimum - maximum gain so the curve doesn’t get distorted…

The ultimate solution however is one like I use in a plugin called “VSTForx”… You have a slider that changes the percentage of the slope to taste. It’s the ultimate customization. In the plugin, if you create 2 parameters, and connect them, you can add an “operator” to that connection which changes the slope between them. One of those “operators” is called “Logarithmic,” or also “LOG/EXP” (logarithmic/Exponential?). So with a slider, you can change the curve to taste.

Food for thought…

Thanks Milo,

That’s great feedback. Yes I need to think about this some more but I’ve logged it here for now.



I somehow managed to miss this when it was first posted. I agree with Milo, FreeG’s response curve is really nice, and feels natural when driven from an expression pedal etc. But each instance seems to add 2-3% load, which adds up quickly if I have one in each rack.

Selectable response curves would be great - a global preference would be enough. Selectable curves in bindings would take this to the next level.

Incidentally, can I point out that some of us have very carefully programmed volume levels tuned to the existing gain faders (I drive them via bindings from my controller), and so any changes to the fader response could undo people’s work. Not sure how that should be addressed if/when gain curves are implemented.



I too would apreciate this feature!

1 Like

So I’ve been thinking about this. It seems everybody’s preference and requirements here are a little different and that this might be something that’s going to be really tricky to nail down exactly.

So… how’s your maths?

This is just thinking out loud at the moment, but… what if you could specify gain control curves as math expressions.

eg: in options you could say curve 1 is this and curve 2 is that and then where ever there’s a gain slider you could associate a curve with it. (eg: right click -> Curve 1)

“Linear” -> x
"Decibels" -> 20 * log10(x)
“InverseLinear” => 1-x

You’d probably need to define an expression for both directions (ie: to linear and from linear) and possibly even a value formatting expression.

Cantabile could include a couple of built in ones and you could fairly easily exchange them between yourselves.

I’m not sure about this because it feels like a cop out - really Cantabile should be providing a solution that just works, but not sure I’m going to get there on this one as there seems to be a lot of personal preference. Maybe just provide it as a config file setting rather than configurable through options.


1 Like

Here’s a relate-able thought on all this. This is a Virtual Stage modeling software so maybe the answer is to create a curve that is modeled after a live long throw fader curve of a common stage mixer ( ie Soundcraft etc) infinity to +18 db where 0 db = -18 db and + 18 v = 0dbFS ( digital). Many mixers also use infinity to +12db with 0db = to -12db and +12db + 0dbFS (digital ). And it would be nice if the fader related to the gain meters and their graduations ( also mentioned in another thread…) The reason I think this is the way to go is that almost all the vsts I use require or recommend old school (-18db) gain staging to ensure optimal power and minimal distortion. When chaining these vsts together it would greatly speed up the trimming of these interconnections and provide a recognizable picture to the user of the available headroom for their entire mix. So my vote would be for the traditional ( old ) system because it is how I learned to mix and I think a few others might be used to this system as well. At least it’s a configuration that’s been in use for many years and is still trusted by many. Maybe it could at least be one of the options you were seeking. Thanks for looking at this!

1 Like

Also found this while browsing. It is for mechanical potentioneters but it’s the same principle. (0 = infinity and 1 = 0 dbFS) Has anyone mapped aproximately how free-g plots on this type of “taper” graph?

1 Like

Great response Dave!

And in fact I think the FreeG fader plugin goes for that approach, with +18dB being 0dBFS, and the curve certainly feels “right”, allowing fine tuning where you need it.

I’m not sure how many people would really use the maths expressions - more likely to just fiddle until they find something they like and stick with it. If you believe you need that flexibility to keep people happy, an alternative might be a draggable curve of some kind, which can be reset to one of a handful of pre-defined curves.

But I bet just offering a small handful of fixed, pre-defined curves (eg linear, long-throw and the current Cantabile curve, along with their inverses) would satisfy 95% of the people, especially if one of them modeled the long-throw fader Dave talks about :smile:


1 Like

I agree with everything everyone is saying… The FreeG curve is the best reference I know of, and yes, it seems to resemble most plugins with gain knobs/sliders. I don’t think most people will need too many options to play with curve settings like in the bindings, etc… One master setting for Cantabile should be fine. However, maybe if you use more than one hardware controller, then you might need that?.. I don’t…

Other than that, I stand by my previous posts on this. It’s not a cop out, it’s a powerful feature to me; everyone uses different hardware. Have you ever seen the length of the faders on the NanoKontrol2? TEENY TINY!:blush:

@brad , I’m not that good with math, but maybe you can cheat, and look at what VSTForx does?

Just a few thoughts on this from my side:

  • A pretty good alternative to FreeG is BlueCat’s Gain suite (free as well). It allows you to choose different gain curves and doesn’t color the sound like FreeG does (listen closely to bypassed vs. active @ 0dB - interesting)
  • One key requirement for me is to have a consistent MIDI controller value for 0dB. 100 or 64, I don’t care, but whatever curve I choose needs to be predictable to be neutral at this value. This is what is currently tricky with BlueCat - you need to fiddle with curve and maximum to achieve consistent 0dB levels.
  • Parameters of the curve could be the minimum level (complete silence or a dB value) and the maximum amplification at controller value 127 (+18 dB, +6 dB or whatever). Plus of course the slope of the curve to get from minimum to 0 dB and from 0 dB to max
  • Lastly of course: smooth interpolation between volume levels - no zipper noise acceptable…

Hope this helps!



Absolutely, this is important for me too.

+1 on all Torsten’s other points too. Going to check out FreeG for this colouration - sounds worrying!

Incidentally, how do MIDI binding values map to the current gain control in terms of dB?


Interesting about the grouping and inverse features in the BlueCat Gain plugin. I enjoyed seeing its use in the example below applied to a distortion/compression plugin that responds to the gain of the input. Thanks for pointing this one out, Torsten!

Again, it depends on the gain range you define in the binding. For the default values (min = off, max=+14dB), the neutral controller value is 103. For FreeG, the neutral value is 64 (that’s actually what I like about it - 0dB gain is the middle of the controller range. Generally it is more useful to have half the range for fading between silence and 0 gain, and then the other half for a more careful boost of up to 18 dB - who needs more than that?

That’s what I dislike about a lot of gain plugins: they are symmetrical around 0 dB. So if I want to reduce a sound to almost silence, I need some serious dB reduction (say -64 dB) - but who will ever need 64 dB of positive gain???

Took me quite a bit of fiddling with BlueCat’s parameter (max value and curve) to get to a reasonable usage profile.

So what if @brad gave us a volume fader with a user-defined curve that passes through

  • minimum value at controller value 0
  • 0 dB at controller value 64
  • maximum value (above or equal to 0 dB) at controller value 127

and allowed us to select a curve profile

  • linear (hard or soft knee)
  • single curve (will be concave or convex depending on values of min and max)
  • S-curve (two types: concave up to 0dB convex right of 0dB vs. convex on the left, concave on the right)

The mathematics should be manageable (spline calculations).

How’s that sound?



I’d second all of Torsten’s suggestions above, although perhaps it would be nice if the controller value representing 0dB could be adjusted, to accommodate people who like 100 etc as their 0dB point.

On my controller keyboard for a long time I’ve set things up so that a controller value of 96 represents 0dB (96 being 75% of the way up to 127). I tend to find I generally need more resolution below than above. It’s arbitrary but works for me.


Hey Guys,

Thanks for all this great feedback. I’ve read through all this many times over now and I’ve been reading up on audio fader taps and log pots in general and unless I hear otherwise, this is what I’m going to do…

Firstly I’m not going to hard code any of this. Rather, there’s going to be a new file format that defines a “gain control curve” - it’ll be a nerdy json file that defines everything about a gain control slider, including:

  • An expression to translate a slider position to amplitude scale factor.
  • An expression to translate a amplitude scale position to a slider position. (Cantabile stores all gains internally as amplitude scales so it needs this to re-position the slider knobs correctly)
  • A list of major and minor tick marks, snap points and labels. Probably multiple sets of these - as I can eventually envisage different settings for small horizontal slider, large vertical slider, knob, etc…
  • A set of constants that can be referenced by the expression (to simplify tweaking a function)
  • Possibly - a set of parameters that can be tweaked from Cantabile’s UI.

The expressions will support all the common floating point math operations and a ternary operator so we can build piece-wise functions. To start with there will be just one setting in Options to choose which control curve to use and it will affect all gain sliders. A factory set of curves will be included or you can browse to load a custom one. The same mechanism will also be used for level meters and the long promised level meter dB ticks.

That covers the on-screen sliders and the control curve in general but it doesn’t cover how MIDI controller values are mapped. I’m wondering if each binding should let you choose a control curve. This would let you for example create one control curve that works really well for the on-screen sliders and a different one for mapping MIDI CC values (so that 64 or 100 hits exactly on 0db) and perhaps even another for fine CCs.

I realize this isn’t a slick GUI where you can click and draw a curve, but I’m not even sure that’s a good idea. Certainly though it provides a flexible framework for those who want to dive in and a simple option for the more casual user.



That all sound good to me, and it would open up the opportunity for sharing good fader/meter types within the community.

It would be nice to have a separately selectable control curve for bindings, as you mention, to get the best out of different types of external controller, from tiny faders on those cheap USB controller devices to big foot pedals and beyond.

Perhaps a slick GUI for drawing a curve isn’t on the cards, but how about miniature thumbnail images of the curves, generated from the control curve files, to ease selection?


1 Like

Well, according to my highly educated hypothesis, the quantum interpolations of all your mathematical equations are flawed.

My point is: my mind is blown by the complexity I’ve sparked… I hope the end result will be tweakable for a mortal like me…

At least this is a bit reassuring:

Anyway, I’m excited! :beers:

1 Like

HI @Milo,

Definitely the intention here is to keep it simple however fader controls are actually a fairly complicated (and opinionated) topic so the idea is to provide the flexibility under the covers but wrap it up into a simple choice for most users.

(and yes community sharing of these curves was definitely a consideration when thinking about this)