The goal of this is to link two parameters of different known low and high values so one affects the other. In this case, I want to link Relative Volume to the length of an EMA, so it responds faster in times of high volume. As an animator I am used to linking values in this way with Maya using a set driven key, took some work to figure it out in pine. Looking up this concept, it has a few names, Relative values, linear interpolation, or rescale values.
Thanks to pinecoders for writing the EMA funciton that can accept length variables!
Here's a quick look at the root function to link the two values.
f_relativeVal(_source, in_bot, in_top, out_bot, out_top) => // float _source: input signal // float in_bot : minimum range of input signal. // float in_top : maximum range of input signal. // float out_bot : minimum range of output signal. // float out_top : maximum range of output signal. clampSrc = _source > in_top ? in_top : _source < in_bot ? in_bot : _source //claps source to create a controlled range //relInput = (clampSrc - in_bot) / (in_top - in_bot) * 100 inDiffIncrement = (in_top - in_bot) outDiffIncrement = (out_top - out_bot) out_bot + (clampSrc - in_bot) * outDiffIncrement / inDiffIncrement // rescale input range to output range