Mapping of control parameters

Mapping of control parameters


When you create a synth or an effect device, there will be controls to set e.g. the volume, pitch, “phatness”, and whatnot. It is important to provide these controls each with a relevant range from min to max, say. For instance frequencies should usually be below 20 kHz (unless your target audience are dogs). However, it is also important that the response of each control is perceptively uniform across the whole range. Nothing is more frustrating than a control which makes a difference only in the first 10%, while not much happens in the remaining 90%. This applies to both software and hardware controls.

Recently I came across this article on Programming Volume Controls and I thought yes, I could not agree more! How many times have I cursed my stereo for its linear master volume control! The trouble with linear volume controls is that they completely ignore human perception of loudness, which is approximately logarithmic (or linear on a dB scale). Please check out the above article, really.

Unfortunately the various stock amp modules in FS all have linear controls. It is not hard, though, to map the slider position to dBs or, if you want complete silence at zero, to a function that starts off linear and then gradually changes to dBs. You can download a suitable mapper module (and some others) here.

These considerations are not restricted to volume controls, however. In fact any control has a response curve that should provide the perception of a uniform change as you go. Here are a few more examples:

Time constants for attack, decay, and release in envelope generators or followers may cover some 4 orders of magnitude e.g. from 1 ms to 10 s. It would certainly be very inappropriate to use linear controls. The stock ADSR module uses a quadratic response for A, D, and R, which is somewhat better than linear but still does not provide a good resolution at the low end. For me a log response feels more natural, although that may be a matter of what you are used to. I am not trying to give an ultimate answer, just intend to raise awareness that there is a choice to make.

Speaking about ADSR, I think that the sustain level is similar to a volume control and should therefore not be linear as in the stock module. As a matter of fact, the envelope output itself is a control signal which should be properly mapped before applying it to modulate e.g volume, filter parameters etc.. (Loosely related to this is the issue of linear decay and release as a function of time in the stock envelope generator.)

The speed or frequency of an LFO may cover a range from 0.1 Hz to 10 Hz or beyond, so again the linear control in the stock module seems inappropriate. My favourite choice would be a log mapping with the midpoint set to 1 Hz.

Sometimes a log or similar mapping won’t fit, but linear isn’t right either. For instance the resonance parameter of a filter would require more resolution towards the self-oscillation end. In these cases you can use the rational mapper in here which lets you set the endpoints and the midpoint mappings individually.

So, in a nutshell: it is not sufficient to set the range of a control parameter right, it is also important to choose a proper mapping that fits human perception.

Happy mapping!

0 0 0 0 0

About the author:



  1. micky  - May 28, 2015 - 9:05 pm

    Thanks for all this information

Add Comment Register

Leave a comment

You must be logged in to post a comment.

Back to Top