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.

80 lines
2.1KB

  1. #include "mtsch.hpp"
  2. #include <iostream>
  3. #define NUM_CHANNELS 8
  4. // IO and switch positions.
  5. #define X_POSITION 7
  6. #define Y_INPUT_POSITION 77
  7. #define Y_OUTPUT_POSITION 23
  8. #define SPACING 35
  9. namespace rack_plugin_mtsch_plugins {
  10. struct Sum : Module {
  11. enum ParamIds {
  12. PARAMS,
  13. NUM_PARAMS = PARAMS + NUM_CHANNELS
  14. };
  15. enum InputIds {
  16. INPUTS,
  17. NUM_INPUTS = INPUTS + NUM_CHANNELS
  18. };
  19. enum OutputIds {
  20. OUTPUT,
  21. NUM_OUTPUTS
  22. };
  23. enum LightIds {
  24. NUM_LIGHTS
  25. };
  26. Sum() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) {}
  27. void step() override;
  28. };
  29. void Sum::step() {
  30. float acc = 0;
  31. for (int i = 0; i < NUM_CHANNELS; i++) {
  32. acc += inputs[INPUTS + i].value * params[PARAMS + i].value;
  33. }
  34. outputs[OUTPUT].value = acc;
  35. }
  36. struct SumWidget : ModuleWidget {
  37. SumWidget(Sum *module);
  38. };
  39. SumWidget::SumWidget(Sum *module) : ModuleWidget(module) {
  40. box.size = Vec(4 * RACK_GRID_WIDTH, RACK_GRID_HEIGHT);
  41. {
  42. SVGPanel *panel = new SVGPanel();
  43. panel->box.size = box.size;
  44. panel->setBackground(SVG::load(assetPlugin(plugin, "res/Sum.svg")));
  45. addChild(panel);
  46. }
  47. addChild(Widget::create<ScrewSilver>(Vec(0, 0)));
  48. addChild(Widget::create<ScrewSilver>(Vec(0, RACK_GRID_HEIGHT - RACK_GRID_WIDTH)));
  49. for (int i = 0; i < NUM_CHANNELS; i++) {
  50. addInput(Port::create<PJ301MPort>(Vec(X_POSITION, Y_INPUT_POSITION + i * SPACING),
  51. Port::INPUT, module, Sum::INPUTS + i));
  52. addParam(ParamWidget::create<CKSSThree>(Vec(X_POSITION + 30, Y_INPUT_POSITION + i * SPACING),
  53. module, Sum::PARAMS + i, -1, 1, 1));
  54. }
  55. addOutput(Port::create<PJ301MPort>(Vec(X_POSITION, Y_OUTPUT_POSITION), Port::OUTPUT, module, Sum::OUTPUT));
  56. }
  57. } // namespace rack_plugin_mtsch_plugins
  58. using namespace rack_plugin_mtsch_plugins;
  59. RACK_PLUGIN_MODEL_INIT(mtsch_plugins, Sum) {
  60. Model *modelSum = Model::create<Sum, SumWidget>("mtsch", "Sum", "Sum", UTILITY_TAG);
  61. return modelSum;
  62. }