param_quantities.cpp (2067B)
1 #include "param_quantities.hpp" 2 #include "dsp/filters/equalizer.hpp" 3 #include "dsp/pitch.hpp" 4 #include "dsp/signal.hpp" 5 6 using namespace bogaudio; 7 using namespace bogaudio::dsp; 8 9 bool AmplifierParamQuantity::isLinear() { 10 return false; 11 } 12 13 void AmplifierParamQuantity::setUnits(bool linear) { 14 if (linear) { 15 unit = ""; 16 } 17 else { 18 unit = " dB"; 19 } 20 } 21 22 float AmplifierParamQuantity::getDisplayValue() { 23 float v = getValue(); 24 if (!module) { 25 return v; 26 } 27 28 if (!isLinear()) { 29 v = 1.0f - v; 30 v *= dsp::Amplifier::minDecibels; 31 setUnits(false); 32 } 33 else { 34 setUnits(true); 35 } 36 return v; 37 } 38 39 void AmplifierParamQuantity::setDisplayValue(float displayValue) { 40 if (!module) { 41 return; 42 } 43 44 if (!isLinear()) { 45 displayValue /= dsp::Amplifier::minDecibels; 46 displayValue = 1.0f - displayValue; 47 } 48 setValue(displayValue); 49 } 50 51 52 float FrequencyParamQuantity::offset() { 53 return 0.0f; 54 } 55 56 float FrequencyParamQuantity::getDisplayValue() { 57 float v = getValue(); 58 if (!module) { 59 return v; 60 } 61 62 v += offset(); 63 v = powf(2.0f, v); 64 v *= dsp::referenceFrequency; 65 return v; 66 } 67 68 void FrequencyParamQuantity::setDisplayValue(float v) { 69 if (!module) { 70 return; 71 } 72 73 v /= dsp::referenceFrequency; 74 v = log2f(v); 75 v -= offset(); 76 setValue(v); 77 } 78 79 80 float DynamicsRatioParamQuantity::getDisplayValue() { 81 float v = getValue(); 82 if (!module) { 83 return v; 84 } 85 86 v = powf(v, 1.5f); 87 v = 1.0f - v; 88 v *= M_PI; 89 v *= 0.25f; 90 v = tanf(v); 91 v = 1.0f / v; 92 return v; 93 } 94 95 void DynamicsRatioParamQuantity::setDisplayValue(float v) { 96 if (!module) { 97 return; 98 } 99 100 v = 1.0f / v; 101 v = atanf(v); 102 v *= 4.0f; 103 v /= M_PI; 104 v = 1.0f - v; 105 v = powf(v, 1.0f / 1.5f); 106 setValue(v); 107 } 108 109 110 float EQParamQuantity::getDisplayValue() { 111 float v = getValue(); 112 if (!module) { 113 return v; 114 } 115 116 if (v < 0.0f) { 117 return -v * Equalizer::cutDb; 118 } 119 return v * Equalizer::gainDb; 120 } 121 122 void EQParamQuantity::setDisplayValue(float displayValue) { 123 if (!module) { 124 return; 125 } 126 127 if (displayValue < 0.0f) { 128 setValue(-(displayValue / Equalizer::cutDb)); 129 } 130 else { 131 setValue(displayValue / Equalizer::gainDb); 132 } 133 }