Not sure how HISE does it (I didn't look in the source) but here's the function from my math library:
inline function exponentialCurve(min, max, midpoint, alpha)
{
local a = Math.log((max - min) / (midpoint - min));
local b = Math.log(2);
local exponent = a / b;
return min + (max - min) * Math.pow(alpha, exponent);
}
inline function reverseExponentialCurve(min, max, midpoint, value)
{
local a = Math.log((max - min) / (midpoint - min));
local b = Math.log(2);
local exponent = a / b;
return Math.pow((value - min) / (max - min), 1 / exponent);
}
Basically it's
set the ratio
set the divisor, log(2) because you're aiming for the halfpoint
find the exponent
exponentiate the alpha to find the correct value in the range, add it to the minimum