BogaudioModules

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

lpg_common.cpp (3805B)


      1 
      2 #include "lpg_common.hpp"
      3 
      4 #define RISE_SHAPE_MODE "rise_shape_mode"
      5 #define FALL_SHAPE_MODE "fall_shape_mode"
      6 #define SHAPE_MODE_OFF "off"
      7 #define SHAPE_MODE_ON "on"
      8 #define SHAPE_MODE_INVERTED "inverted"
      9 
     10 json_t* LPGEnvBaseModule::saveToJson(json_t* root) {
     11 	switch (_riseShapeMode) {
     12 		case RiseFallShapedSlewLimiter::OFF_SCVM: {
     13 			json_object_set_new(root, RISE_SHAPE_MODE, json_string(SHAPE_MODE_OFF));
     14 			break;
     15 		}
     16 		case RiseFallShapedSlewLimiter::ON_SCVM: {
     17 			json_object_set_new(root, RISE_SHAPE_MODE, json_string(SHAPE_MODE_ON));
     18 			break;
     19 		}
     20 		case RiseFallShapedSlewLimiter::INVERTED_SCVM: {
     21 			json_object_set_new(root, RISE_SHAPE_MODE, json_string(SHAPE_MODE_INVERTED));
     22 			break;
     23 		}
     24 		default:;
     25 	}
     26 	switch (_fallShapeMode) {
     27 		case RiseFallShapedSlewLimiter::OFF_SCVM: {
     28 			json_object_set_new(root, FALL_SHAPE_MODE, json_string(SHAPE_MODE_OFF));
     29 			break;
     30 		}
     31 		case RiseFallShapedSlewLimiter::ON_SCVM: {
     32 			json_object_set_new(root, FALL_SHAPE_MODE, json_string(SHAPE_MODE_ON));
     33 			break;
     34 		}
     35 		case RiseFallShapedSlewLimiter::INVERTED_SCVM: {
     36 			json_object_set_new(root, FALL_SHAPE_MODE, json_string(SHAPE_MODE_INVERTED));
     37 			break;
     38 		}
     39 		default:;
     40 	}
     41 	return root;
     42 }
     43 
     44 void LPGEnvBaseModule::loadFromJson(json_t* root) {
     45 	json_t* rsm = json_object_get(root, RISE_SHAPE_MODE);
     46 	if (rsm) {
     47 		std::string s = json_string_value(rsm);
     48 		if (s == SHAPE_MODE_OFF) {
     49 			_riseShapeMode = RiseFallShapedSlewLimiter::OFF_SCVM;
     50 		}
     51 		else if (s == SHAPE_MODE_ON) {
     52 			_riseShapeMode = RiseFallShapedSlewLimiter::ON_SCVM;
     53 		}
     54 		else if (s == SHAPE_MODE_INVERTED) {
     55 			_riseShapeMode = RiseFallShapedSlewLimiter::INVERTED_SCVM;
     56 		}
     57 	}
     58 	json_t* fsm = json_object_get(root, FALL_SHAPE_MODE);
     59 	if (fsm) {
     60 		std::string s = json_string_value(fsm);
     61 		if (s == SHAPE_MODE_OFF) {
     62 			_fallShapeMode = RiseFallShapedSlewLimiter::OFF_SCVM;
     63 		}
     64 		else if (s == SHAPE_MODE_ON) {
     65 			_fallShapeMode = RiseFallShapedSlewLimiter::ON_SCVM;
     66 		}
     67 		else if (s == SHAPE_MODE_INVERTED) {
     68 			_fallShapeMode = RiseFallShapedSlewLimiter::INVERTED_SCVM;
     69 		}
     70 	}
     71 }
     72 
     73 void LPGEnvBaseModule::modulate() {
     74 	_gateToTrigger = _gateToTriggerParamID >= 0 && params[_gateToTriggerParamID].getValue() > 0.5f;
     75 	_timeScale = _timeScaleParamID >= 0 && params[_timeScaleParamID].getValue() > 0.5f ? _longTimeScale : 1.0f;
     76 }
     77 
     78 
     79 void LPGEnvBaseWidget::contextMenu(Menu* menu) {
     80 	auto m = dynamic_cast<LPGEnvBaseModule*>(module);
     81 	assert(m);
     82 
     83 	OptionsMenuItem* rm = new OptionsMenuItem("Rise shape CV");
     84 	rm->addItem(OptionMenuItem(
     85 		"Enable",
     86 		[m]() { return m->_riseShapeMode == RiseFallShapedSlewLimiter::ON_SCVM; },
     87 		[m]() { m->_riseShapeMode = RiseFallShapedSlewLimiter::ON_SCVM; }
     88 	));
     89 	rm->addItem(OptionMenuItem(
     90 		"Enable inverted",
     91 		[m]() { return m->_riseShapeMode == RiseFallShapedSlewLimiter::INVERTED_SCVM; },
     92 		[m]() { m->_riseShapeMode = RiseFallShapedSlewLimiter::INVERTED_SCVM; }
     93 	));
     94 	rm->addItem(OptionMenuItem(
     95 		"Disable",
     96 		[m]() { return m->_riseShapeMode == RiseFallShapedSlewLimiter::OFF_SCVM; },
     97 		[m]() { m->_riseShapeMode = RiseFallShapedSlewLimiter::OFF_SCVM; }
     98 	));
     99 	OptionsMenuItem::addToMenu(rm, menu);
    100 
    101 	OptionsMenuItem* fm = new OptionsMenuItem("Fall shape CV");
    102 	fm->addItem(OptionMenuItem(
    103 		"Enable",
    104 		[m]() { return m->_fallShapeMode == RiseFallShapedSlewLimiter::ON_SCVM; },
    105 		[m]() { m->_fallShapeMode = RiseFallShapedSlewLimiter::ON_SCVM; }
    106 	));
    107 	fm->addItem(OptionMenuItem(
    108 		"Enable inverted",
    109 		[m]() { return m->_fallShapeMode == RiseFallShapedSlewLimiter::INVERTED_SCVM; },
    110 		[m]() { m->_fallShapeMode = RiseFallShapedSlewLimiter::INVERTED_SCVM; }
    111 	));
    112 	fm->addItem(OptionMenuItem(
    113 		"Disable",
    114 		[m]() { return m->_fallShapeMode == RiseFallShapedSlewLimiter::OFF_SCVM; },
    115 		[m]() { m->_fallShapeMode = RiseFallShapedSlewLimiter::OFF_SCVM; }
    116 	));
    117 	OptionsMenuItem::addToMenu(fm, menu);
    118 }