2#ifndef __ASE_SIGNALUTILS_HH__
3#define __ASE_SIGNALUTILS_HH__
10template<
typename Float> Float
hz_changed (Float a, Float b);
13template<
typename Float> Float
voltage2hz (Float x);
19template<
typename Float> Float
hz2voltage (Float x);
25template<
typename Float> Float
db_changed (Float a, Float b);
28template<
typename Float> Float
voltage2db (Float x);
34template<
typename Float> Float
db2voltage (Float x);
45 double r2 = 1, ir = 1;
51 auto range = ::log2l (max) - b2;
59 return ::exp2 (b2 + normalized * r2);
65 return (::log2 (mmvalue) - b2) * ir;
70static constexpr const long double c3_hertz = 261.6255653005986346778499935233;
71static constexpr const long double c3_hertz_inv = 0.0038222564329714297410505703465146;
73template<
typename Float>
extern inline ASE_CONST Float
76 return std::exp2 (x * Float (10.0)) * Float (c3_hertz);
79extern inline ASE_CONST
float
85template<
typename Float>
extern inline ASE_CONST Float
88 return std::log2 (x * Float (c3_hertz_inv)) * Float (0.1);
91extern inline ASE_CONST
float
94 return fast_log2 (x *
float (c3_hertz_inv)) * 0.1f;
97template<
typename Float>
extern inline ASE_CONST Float
100 return std::log10 (std::abs (x)) * Float (20);
103extern inline ASE_CONST
float
106 return fast_log2 (__builtin_fabsf (x)) * 6.02059991327962390427477789448986f;
109template<
typename Float>
extern inline ASE_CONST Float
112 return std::pow (10, x * Float (0.05));
115extern inline ASE_CONST
float
118 return fast_exp2 (x * 0.1660964047443681173935159714744695f);
121template<
typename Float>
extern inline ASE_CONST Float
124 return __builtin_fabsf (a - b) > 1e-3;
127template<
typename Float>
extern inline ASE_CONST Float
130 return __builtin_fabsf (a - b) > 1e-3;
133template<
typename Float>
extern inline ASE_CONST Float
136 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_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 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.