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. struct Mixer : Module {
  3. enum ParamIds {
  4. CH1_PARAM,
  5. CH2_PARAM,
  6. CH3_PARAM,
  7. CH4_PARAM,
  8. NUM_PARAMS
  9. };
  10. enum InputIds {
  11. IN1_INPUT,
  12. IN2_INPUT,
  13. IN3_INPUT,
  14. IN4_INPUT,
  15. NUM_INPUTS
  16. };
  17. enum OutputIds {
  18. OUT1_OUTPUT,
  19. OUT2_OUTPUT,
  20. NUM_OUTPUTS
  21. };
  22. enum LightIds {
  23. OUT_POS_LIGHT,
  24. OUT_NEG_LIGHT,
  25. NUM_LIGHTS
  26. };
  27. Mixer() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) {}
  28. void step() override;
  29. };
  30. void Mixer::step() {
  31. float in1 = inputs[IN1_INPUT].value * params[CH1_PARAM].value;
  32. float in2 = inputs[IN2_INPUT].value * params[CH2_PARAM].value;
  33. float in3 = inputs[IN3_INPUT].value * params[CH3_PARAM].value;
  34. float in4 = inputs[IN4_INPUT].value * params[CH4_PARAM].value;
  35. float out = in1 + in2 + in3 + in4;
  36. outputs[OUT1_OUTPUT].value = out;
  37. outputs[OUT2_OUTPUT].value = -out;
  38. lights[OUT_POS_LIGHT].setBrightnessSmooth(out / 5.0);
  39. lights[OUT_NEG_LIGHT].setBrightnessSmooth(-out / 5.0);
  40. }
  41. struct MixerWidget : ModuleWidget {
  42. MixerWidget(Mixer *module) : ModuleWidget(module) {
  43. setPanel(SVG::load(assetPlugin(plugin, "res/Mixer.svg")));
  44. addChild(Widget::create<Knurlie>(Vec(15, 0)));
  45. addChild(Widget::create<Knurlie>(Vec(15, 365)));
  46. addParam(ParamWidget::create<Davies1900hWhiteKnob>(Vec(19, 32), module, Mixer::CH1_PARAM, 0.0, 1.0, 0.0));
  47. addParam(ParamWidget::create<Davies1900hWhiteKnob>(Vec(19, 85), module, Mixer::CH2_PARAM, 0.0, 1.0, 0.0));
  48. addParam(ParamWidget::create<Davies1900hWhiteKnob>(Vec(19, 137), module, Mixer::CH3_PARAM, 0.0, 1.0, 0.0));
  49. addParam(ParamWidget::create<Davies1900hWhiteKnob>(Vec(19, 190), module, Mixer::CH4_PARAM, 0.0, 1.0, 0.0));
  50. addInput(Port::create<PJ301MPort>(Vec(7, 242), Port::INPUT, module, Mixer::IN1_INPUT));
  51. addInput(Port::create<PJ301MPort>(Vec(43, 242), Port::INPUT, module, Mixer::IN2_INPUT));
  52. addInput(Port::create<PJ301MPort>(Vec(7, 281), Port::INPUT, module, Mixer::IN3_INPUT));
  53. addInput(Port::create<PJ301MPort>(Vec(43, 281), Port::INPUT, module, Mixer::IN4_INPUT));
  54. addOutput(Port::create<PJ301MPort>(Vec(7, 324), Port::OUTPUT, module, Mixer::OUT1_OUTPUT));
  55. addOutput(Port::create<PJ301MPort>(Vec(43, 324), Port::OUTPUT, module, Mixer::OUT2_OUTPUT));
  56. addChild(ModuleLightWidget::create<MediumLight<GreenRedLight>>(Vec(32.7, 310), module, Mixer::OUT_POS_LIGHT));
  57. }
  58. };
  59. RACK_PLUGIN_MODEL_INIT(Befaco, Mixer) {
  60. Model *modelMixer = Model::create<Mixer, MixerWidget>("Befaco", "Mixer", "Mixer", MIXER_TAG);
  61. return modelMixer;
  62. }