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.

140 lines
4.6KB

  1. #include <dsp/functions.hpp>
  2. #include "LindenbergResearch.hpp"
  3. using namespace rack;
  4. using namespace lrt;
  5. namespace rack_plugin_LindenbergResearch {
  6. struct QuickMix : Module {
  7. enum ParamIds {
  8. LEVEL1_PARAM,
  9. LEVEL2_PARAM,
  10. LEVEL3_PARAM,
  11. LEVEL4_PARAM,
  12. LEVEL5_PARAM,
  13. LEVEL6_PARAM,
  14. LEVELM_PARAM,
  15. NUM_PARAMS
  16. };
  17. enum InputIds {
  18. M1_INPUT,
  19. M2_INPUT,
  20. M3_INPUT,
  21. M4_INPUT,
  22. M5_INPUT,
  23. M6_INPUT,
  24. NUM_INPUTS
  25. };
  26. enum OutputIds {
  27. MASTER_OUTPUT,
  28. NUM_OUTPUTS
  29. };
  30. enum LightIds {
  31. LEVEL1_LIGHT,
  32. LEVEL2_LIGHT,
  33. LEVEL3_LIGHT,
  34. LEVEL4_LIGHT,
  35. LEVEL5_LIGHT,
  36. LEVEL6_LIGHT,
  37. LEVELM_LIGHT,
  38. NUM_LIGHTS
  39. };
  40. QuickMix() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) {}
  41. void step() override;
  42. };
  43. void QuickMix::step() {
  44. float out = 0;
  45. /* lights */
  46. for (int i = 0; i < NUM_LIGHTS - 1; i++) {
  47. lights[i].value = quadraticBipolar(params[i].value) * inputs[i].value / 10;
  48. }
  49. /* mixup all signals */
  50. for (int i = 0; i < NUM_INPUTS; i++) {
  51. out += inputs[i].value * quadraticBipolar(params[i].value);
  52. }
  53. /* master out light */
  54. lights[LEVELM_LIGHT].value = quadraticBipolar(params[LEVELM_PARAM].value) * out / 10;
  55. out *= quadraticBipolar(params[LEVELM_PARAM].value);
  56. outputs[MASTER_OUTPUT].value = out;
  57. }
  58. /**
  59. * @brief Blank Panel Small
  60. */
  61. struct QuickMixWidget : LRModuleWidget {
  62. QuickMixWidget(QuickMix *module);
  63. };
  64. QuickMixWidget::QuickMixWidget(QuickMix *module) : LRModuleWidget(module) {
  65. panel = new LRPanel();
  66. panel->setBackground(SVG::load(assetPlugin(plugin, "res/QuickMix.svg")));
  67. addChild(panel);
  68. box.size = panel->box.size;
  69. // ***** SCREWS **********
  70. addChild(Widget::create<ScrewDarkA>(Vec(4.7f, 1)));
  71. addChild(Widget::create<ScrewDarkA>(Vec(4.7f, 366)));
  72. addChild(Widget::create<ScrewDarkA>(Vec(75.f - 19.3f, 1)));
  73. addChild(Widget::create<ScrewDarkA>(Vec(75.f - 19.3f, 366))); // ***** SCREWS **********
  74. // ***** MAIN KNOBS ******
  75. addParam(ParamWidget::create<LRSmallKnob>(Vec(43, 55.8), module, QuickMix::LEVEL1_PARAM, -1.f, 1.f, 0.f));
  76. addParam(ParamWidget::create<LRSmallKnob>(Vec(43, 100.8), module, QuickMix::LEVEL2_PARAM, -1.f, 1.f, 0.f));
  77. addParam(ParamWidget::create<LRSmallKnob>(Vec(43, 145.8), module, QuickMix::LEVEL3_PARAM, -1.f, 1.f, 0.f));
  78. addParam(ParamWidget::create<LRSmallKnob>(Vec(43, 190.8), module, QuickMix::LEVEL4_PARAM, -1.f, 1.f, 0.f));
  79. addParam(ParamWidget::create<LRSmallKnob>(Vec(43, 235.8), module, QuickMix::LEVEL5_PARAM, -1.f, 1.f, 0.f));
  80. addParam(ParamWidget::create<LRSmallKnob>(Vec(43, 280.8), module, QuickMix::LEVEL6_PARAM, -1.f, 1.f, 0.f));
  81. addParam(ParamWidget::create<LRSmallKnob>(Vec(8, 326.5), module, QuickMix::LEVELM_PARAM, -3.f, 3.f, 1.f));
  82. // ***** MAIN KNOBS ******
  83. // ***** INPUTS **********
  84. addInput(Port::create<LRIOPort>(Vec(7, 55.f), Port::INPUT, module, QuickMix::M1_INPUT));
  85. addInput(Port::create<LRIOPort>(Vec(7, 100.f), Port::INPUT, module, QuickMix::M2_INPUT));
  86. addInput(Port::create<LRIOPort>(Vec(7, 145.f), Port::INPUT, module, QuickMix::M3_INPUT));
  87. addInput(Port::create<LRIOPort>(Vec(7, 190.f), Port::INPUT, module, QuickMix::M4_INPUT));
  88. addInput(Port::create<LRIOPort>(Vec(7, 235.f), Port::INPUT, module, QuickMix::M5_INPUT));
  89. addInput(Port::create<LRIOPort>(Vec(7, 280.f), Port::INPUT, module, QuickMix::M6_INPUT));
  90. // ***** INPUTS **********
  91. // ***** OUTPUTS *********
  92. addOutput(Port::create<LRIOPort>(Vec(40, 326.05), Port::OUTPUT, module, QuickMix::MASTER_OUTPUT));
  93. // ***** OUTPUTS *********
  94. // ***** LIGHTS **********
  95. addChild(ModuleLightWidget::create<LRLight>(Vec(33, 81.6), module, QuickMix::LEVEL1_LIGHT));
  96. addChild(ModuleLightWidget::create<LRLight>(Vec(33, 125.6), module, QuickMix::LEVEL2_LIGHT));
  97. addChild(ModuleLightWidget::create<LRLight>(Vec(33, 169.6), module, QuickMix::LEVEL3_LIGHT));
  98. addChild(ModuleLightWidget::create<LRLight>(Vec(33, 214.6), module, QuickMix::LEVEL4_LIGHT));
  99. addChild(ModuleLightWidget::create<LRLight>(Vec(33, 259.6), module, QuickMix::LEVEL5_LIGHT));
  100. addChild(ModuleLightWidget::create<LRLight>(Vec(33, 304.6), module, QuickMix::LEVEL6_LIGHT));
  101. addChild(ModuleLightWidget::create<LRLight>(Vec(33, 344.6), module, QuickMix::LEVELM_LIGHT));
  102. // ***** LIGHTS **********
  103. }
  104. } // namespace rack_plugin_LindenbergResearch
  105. using namespace rack_plugin_LindenbergResearch;
  106. RACK_PLUGIN_MODEL_INIT(LindenbergResearch, QuickMix) {
  107. Model *modelQuickMix = Model::create<QuickMix, QuickMixWidget>("Lindenberg Research", "QuickMixer", "Q: Quick Mixer", MIXER_TAG);
  108. return modelQuickMix;
  109. }