BogaudioModules

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

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 }