You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

79 lines
2.4KB

  1. #include "Befaco.hpp"
  2. /** Yes, in English this would be spelled "Attenuverter", but since attenuator is "atenuador" in Spanish, I suppose they (accidentally or not) went with one "t". */
  3. struct DualAtenuverter : Module {
  4. enum ParamIds {
  5. ATEN1_PARAM,
  6. OFFSET1_PARAM,
  7. ATEN2_PARAM,
  8. OFFSET2_PARAM,
  9. NUM_PARAMS
  10. };
  11. enum InputIds {
  12. IN1_INPUT,
  13. IN2_INPUT,
  14. NUM_INPUTS
  15. };
  16. enum OutputIds {
  17. OUT1_OUTPUT,
  18. OUT2_OUTPUT,
  19. NUM_OUTPUTS
  20. };
  21. float lights[2] = {};
  22. DualAtenuverter();
  23. void step();
  24. };
  25. DualAtenuverter::DualAtenuverter() {
  26. params.resize(NUM_PARAMS);
  27. inputs.resize(NUM_INPUTS);
  28. outputs.resize(NUM_OUTPUTS);
  29. }
  30. void DualAtenuverter::step() {
  31. float out1 = getf(inputs[IN1_INPUT]) * params[ATEN1_PARAM] + params[OFFSET1_PARAM];
  32. float out2 = getf(inputs[IN2_INPUT]) * params[ATEN2_PARAM] + params[OFFSET2_PARAM];
  33. out1 = clampf(out1, -10.0, 10.0);
  34. out2 = clampf(out2, -10.0, 10.0);
  35. setf(outputs[OUT1_OUTPUT], out1);
  36. setf(outputs[OUT2_OUTPUT], out2);
  37. lights[0] = out1 / 5.0;
  38. lights[1] = out2 / 5.0;
  39. }
  40. DualAtenuverterWidget::DualAtenuverterWidget() {
  41. DualAtenuverter *module = new DualAtenuverter();
  42. setModule(module);
  43. box.size = Vec(15*5, 380);
  44. {
  45. Panel *panel = new DarkPanel();
  46. panel->box.size = box.size;
  47. panel->backgroundImage = Image::load("plugins/Befaco/res/DualAtenuverter.png");
  48. addChild(panel);
  49. }
  50. addChild(createScrew<ScrewBlack>(Vec(15, 0)));
  51. addChild(createScrew<ScrewBlack>(Vec(15, 365)));
  52. addParam(createParam<Davies1900hWhiteKnob>(Vec(19, 33), module, DualAtenuverter::ATEN1_PARAM, -1.0, 1.0, 0.0));
  53. addParam(createParam<Davies1900hRedKnob>(Vec(19, 91), module, DualAtenuverter::OFFSET1_PARAM, -10.0, 10.0, 0.0));
  54. addParam(createParam<Davies1900hWhiteKnob>(Vec(19, 201), module, DualAtenuverter::ATEN2_PARAM, -1.0, 1.0, 0.0));
  55. addParam(createParam<Davies1900hRedKnob>(Vec(19, 260), module, DualAtenuverter::OFFSET2_PARAM, -10.0, 10.0, 0.0));
  56. addInput(createInput<PJ3410Port>(Vec(4, 149), module, DualAtenuverter::IN1_INPUT));
  57. addOutput(createOutput<PJ3410Port>(Vec(39, 149), module, DualAtenuverter::OUT1_OUTPUT));
  58. addInput(createInput<PJ3410Port>(Vec(4, 316), module, DualAtenuverter::IN2_INPUT));
  59. addOutput(createOutput<PJ3410Port>(Vec(39, 316), module, DualAtenuverter::OUT2_OUTPUT));
  60. addChild(createValueLight<SmallLight<GreenRedPolarityLight>>(Vec(33, 143), &module->lights[0]));
  61. addChild(createValueLight<SmallLight<GreenRedPolarityLight>>(Vec(33, 311), &module->lights[1]));
  62. }