param_quantities.hpp (1928B)
1 #pragma once 2 3 #include "rack.hpp" 4 #include <cmath> 5 6 using namespace rack; 7 8 #define SQUARE_ROOT_ONE_TENTH 0.31622776601683794 9 10 namespace bogaudio { 11 12 template <int scale> 13 struct ScaledSquaringParamQuantity : ParamQuantity { 14 float getDisplayValue() override { 15 float v = getValue(); 16 if (!module) { 17 return v; 18 } 19 20 float vv = v * v; 21 vv *= (float)scale; 22 vv += displayOffset; 23 if (v < 0.0f) { 24 return -vv; 25 } 26 return vv; 27 } 28 29 void setDisplayValue(float displayValue) override { 30 if (!module) { 31 return; 32 } 33 displayValue -= displayOffset; 34 float v = fabsf(displayValue) / (float)abs(scale); 35 v = powf(v, 0.5f); 36 if (displayValue < 0.0f && scale > 0) { 37 setValue(-v); 38 } 39 else { 40 setValue(v); 41 } 42 } 43 }; 44 45 typedef ScaledSquaringParamQuantity<1> OneXSquaringParamQuantity; 46 47 typedef ScaledSquaringParamQuantity<10> TenXSquaringParamQuantity; 48 49 typedef TenXSquaringParamQuantity EnvelopeSegmentParamQuantity; 50 51 template <class Base = ParamQuantity> 52 struct RoundingParamQuantity : Base { 53 float getDisplayValue() override { 54 float v = Base::getDisplayValue(); 55 if (!Base::module) { 56 return v; 57 } 58 return roundf(v); 59 } 60 61 void setDisplayValue(float displayValue) override { 62 if (!Base::module) { 63 return; 64 } 65 Base::setDisplayValue(roundf(displayValue)); 66 } 67 }; 68 69 struct AmplifierParamQuantity : ParamQuantity { 70 virtual bool isLinear(); 71 virtual void setUnits(bool linear); 72 float getDisplayValue() override; 73 void setDisplayValue(float displayValue) override; 74 }; 75 76 struct FrequencyParamQuantity : ParamQuantity { 77 virtual float offset(); 78 float getDisplayValue() override; 79 void setDisplayValue(float v) override; 80 }; 81 82 struct DynamicsRatioParamQuantity : ParamQuantity { 83 float getDisplayValue() override; 84 void setDisplayValue(float v) override; 85 }; 86 87 struct EQParamQuantity : ParamQuantity { 88 float getDisplayValue() override; 89 void setDisplayValue(float displayValue) override; 90 }; 91 92 } // namespace bogaudio