9template<
typename Float> Float
hz_changed (Float a, Float b);
12template<
typename Float> Float
voltage2hz (Float x);
18template<
typename Float> Float
hz2voltage (Float x);
24template<
typename Float> Float
db_changed (Float a, Float b);
27template<
typename Float> Float
voltage2db (Float x);
33template<
typename Float> Float
db2voltage (Float x);
44 double r2 = 1, ir = 1;
50 auto range = ::log2l (max) - b2;
58 return ::exp2 (b2 + normalized * r2);
64 return (::log2 (mmvalue) - b2) * ir;
69static constexpr const long double c3_hertz = 261.6255653005986346778499935233;
70static constexpr const long double c3_hertz_inv = 0.0038222564329714297410505703465146;
72template<
typename Float>
extern inline ASE_CONST Float
75 return std::exp2 (x * Float (10.0)) * Float (c3_hertz);
78extern inline ASE_CONST
float
84template<
typename Float>
extern inline ASE_CONST Float
87 return std::log2 (x * Float (c3_hertz_inv)) * Float (0.1);
90extern inline ASE_CONST
float
93 return fast_log2 (x *
float (c3_hertz_inv)) * 0.1f;
96template<
typename Float>
extern inline ASE_CONST Float
102extern inline ASE_CONST
float
105 return fast_log2 (__builtin_fabsf (x)) * 6.02059991327962390427477789448986f;
108template<
typename Float>
extern inline ASE_CONST Float
111 return std::pow (10, x * Float (0.05));
114extern inline ASE_CONST
float
117 return fast_exp2 (x * 0.1660964047443681173935159714744695f);
120template<
typename Float>
extern inline ASE_CONST Float
123 return __builtin_fabsf (a - b) > 1e-3;
126template<
typename Float>
extern inline ASE_CONST Float
129 return __builtin_fabsf (a - b) > 1e-3;
132template<
typename Float>
extern inline ASE_CONST Float
135 return __builtin_fabsf (a - b) > 1e-7;
The Anklang C++ API namespace.
float fast_voltage2hz(float x)
Float precision variant of voltage2hz using fast_exp2().
Float voltage2hz(Float x)
Convert synthesizer value (Voltage) to Hertz.
float fast_exp2(float x)
Fast approximation of 2 raised to the power of x.
float fast_hz2voltage(float x)
Float precision variant of hz2voltage using fast_log2().
Float db_changed(Float a, Float b)
Determine a significant Decibel change.
Float hz2voltage(Float x)
Convert Hertz to synthesizer value (Voltage).
float fast_db2voltage(float x)
Float precision variant of db2voltage using fast_exp2().
float fast_voltage2db(float x)
Float precision variant of voltage2db using fast_log2().
Float voltage_changed(Float a, Float b)
Determine a significant synthesizer value (Voltage) change.
Float hz_changed(Float a, Float b)
Determine a significant frequency change (audible Hertz).
Float voltage2db(Float x)
Convert synthesizer value (Voltage) to Decibel.
float fast_log2(float x)
Fast approximation of logarithm to base 2.
Float db2voltage(Float x)
Convert Decibel to synthesizer value (Voltage).
Logarithmically map (and invert) a range onto 0…+1.
double iscale(double mmvalue) const
Calculate normalized from a scale() result within [min … max].
double scale(double normalized) const
Calculate scale value within [min … max] from normalized x.
void setup(double min, double max)
Provide minimum and maximum values to be mapped.