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.

66 lines
1.8KB

  1. #include "Bidoo.hpp"
  2. #include "BidooComponents.hpp"
  3. using namespace std;
  4. namespace rack_plugin_Bidoo {
  5. struct MS : Module {
  6. enum ParamIds {
  7. NUM_PARAMS
  8. };
  9. enum InputIds {
  10. L_INPUT,
  11. R_INPUT,
  12. M_INPUT,
  13. S_INPUT,
  14. NUM_INPUTS
  15. };
  16. enum OutputIds {
  17. L_OUTPUT,
  18. R_OUTPUT,
  19. M_OUTPUT,
  20. S_OUTPUT,
  21. NUM_OUTPUTS
  22. };
  23. enum LightIds {
  24. NUM_LIGHTS
  25. };
  26. MS() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) { }
  27. void step() override;
  28. };
  29. void MS::step() {
  30. outputs[S_OUTPUT].value = 0.5f * (inputs[L_INPUT].value - inputs[R_INPUT].value);
  31. outputs[M_OUTPUT].value = 0.5f * (inputs[L_INPUT].value + inputs[R_INPUT].value);
  32. outputs[L_OUTPUT].value = inputs[M_INPUT].value + inputs[S_INPUT].value;
  33. outputs[R_OUTPUT].value = inputs[M_INPUT].value - inputs[S_INPUT].value;
  34. }
  35. struct MSWidget : ModuleWidget {
  36. MSWidget(MS *module) : ModuleWidget(module) {
  37. setPanel(SVG::load(assetPlugin(plugin, "res/MS.svg")));
  38. addInput(Port::create<PJ301MPort>(Vec(10, 30), Port::INPUT, module, MS::L_INPUT));
  39. addInput(Port::create<PJ301MPort>(Vec(10, 70), Port::INPUT, module, MS::R_INPUT));
  40. addOutput(Port::create<PJ301MPort>(Vec(10, 110), Port::OUTPUT, module, MS::M_OUTPUT));
  41. addOutput(Port::create<PJ301MPort>(Vec(10, 150), Port::OUTPUT, module, MS::S_OUTPUT));
  42. addInput(Port::create<PJ301MPort>(Vec(10, 190), Port::INPUT, module, MS::M_INPUT));
  43. addInput(Port::create<PJ301MPort>(Vec(10, 230), Port::INPUT, module, MS::S_INPUT));
  44. addOutput(Port::create<PJ301MPort>(Vec(10, 270), Port::OUTPUT, module, MS::L_OUTPUT));
  45. addOutput(Port::create<PJ301MPort>(Vec(10, 310), Port::OUTPUT, module, MS::R_OUTPUT));
  46. }
  47. };
  48. } // namespace rack_plugin_Bidoo
  49. using namespace rack_plugin_Bidoo;
  50. RACK_PLUGIN_MODEL_INIT(Bidoo, MS) {
  51. Model *modelMS = Model::create<MS, MSWidget>("Bidoo", "MS", "MS Mid/Side decoder/encoder", PANNING_TAG, MIXER_TAG);
  52. return modelMS;
  53. }