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.

95 lines
2.6KB

  1. ///////////////////////////////////////////////////
  2. //
  3. // Mental Sums summing - VCV Module
  4. //
  5. // Strum 2017
  6. //
  7. ///////////////////////////////////////////////////
  8. #include "mental.hpp"
  9. namespace rack_plugin_mental {
  10. struct MentalSums : Module {
  11. enum ParamIds {
  12. NUM_PARAMS
  13. };
  14. enum InputIds {
  15. INPUT_1,
  16. INPUT_2,
  17. INPUT_3,
  18. INPUT_4,
  19. INPUT_5,
  20. INPUT_2_1,
  21. INPUT_2_2,
  22. INPUT_2_3,
  23. INPUT_2_4,
  24. INPUT_2_5,
  25. NUM_INPUTS
  26. };
  27. enum OutputIds {
  28. OUTPUT_1,
  29. OUTPUT_2,
  30. NUM_OUTPUTS
  31. };
  32. float sum_out_1 = 0.0;
  33. float sum_out_2 = 0.0;
  34. MentalSums() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS) {}
  35. void step() override;
  36. };
  37. void MentalSums::step()
  38. {
  39. sum_out_1 = 0.0;
  40. sum_out_2 = 0.0;
  41. for (int i = 0 ; i < 5 ; i++)
  42. {
  43. sum_out_1 += inputs[INPUT_1 + i].value;
  44. sum_out_2 += inputs[INPUT_2_1 + i].value;
  45. }
  46. outputs[OUTPUT_1].value = sum_out_1;
  47. outputs[OUTPUT_2].value = sum_out_2;
  48. }
  49. ////////////////////////////////////////////////////////////////
  50. struct MentalSumsWidget : ModuleWidget {
  51. MentalSumsWidget(MentalSums *module);
  52. };
  53. MentalSumsWidget::MentalSumsWidget(MentalSums *module) : ModuleWidget(module)
  54. {
  55. setPanel(SVG::load(assetPlugin(plugin, "res/MentalSums.svg")));
  56. addOutput(Port::create<OutPort>(Vec(3, 22), Port::OUTPUT, module, MentalSums::OUTPUT_1));
  57. addOutput(Port::create<OutPort>(Vec(3, 190), Port::OUTPUT, module, MentalSums::OUTPUT_2));
  58. addInput(Port::create<InPort>(Vec(3, 58), Port::INPUT, module, MentalSums::INPUT_1));
  59. addInput(Port::create<InPort>(Vec(3, 83), Port::INPUT, module, MentalSums::INPUT_2));
  60. addInput(Port::create<InPort>(Vec(3, 108), Port::INPUT, module, MentalSums::INPUT_3));
  61. addInput(Port::create<InPort>(Vec(3, 133), Port::INPUT, module, MentalSums::INPUT_4));
  62. addInput(Port::create<InPort>(Vec(3, 158), Port::INPUT, module, MentalSums::INPUT_5));
  63. addInput(Port::create<InPort>(Vec(3, 230), Port::INPUT, module, MentalSums::INPUT_2_1));
  64. addInput(Port::create<InPort>(Vec(3, 255), Port::INPUT, module, MentalSums::INPUT_2_2));
  65. addInput(Port::create<InPort>(Vec(3, 280), Port::INPUT, module, MentalSums::INPUT_2_3));
  66. addInput(Port::create<InPort>(Vec(3, 305), Port::INPUT, module, MentalSums::INPUT_2_4));
  67. addInput(Port::create<InPort>(Vec(3, 330), Port::INPUT, module, MentalSums::INPUT_2_5));
  68. }
  69. } // namespace rack_plugin_mental
  70. using namespace rack_plugin_mental;
  71. RACK_PLUGIN_MODEL_INIT(mental, MentalSums) {
  72. Model *modelMentalSums = Model::create<MentalSums, MentalSumsWidget>("mental", "MentalSums", "Summing Mixer", MIXER_TAG, UTILITY_TAG);
  73. return modelMentalSums;
  74. }