BogaudioModules

BogaudioModules for VCV Rack
Log | Files | Refs | README | LICENSE

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