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.

160 lines
7.9KB

  1. #include "Mute8.hpp"
  2. #include "mixer.hpp"
  3. const float Mute8::maxDecibels = 0.0f;
  4. const float Mute8::minDecibels = Amplifier::minDecibels;
  5. const float Mute8::slewTimeMS = 5.0f;
  6. void Mute8::onReset() {
  7. for (int i = 0; i < 8; ++i) {
  8. _triggers[i].reset();
  9. }
  10. }
  11. void Mute8::onSampleRateChange() {
  12. float sampleRate = engineGetSampleRate();
  13. for (int i = 0; i < 8; ++i) {
  14. _slewLimiters[i].setParams(sampleRate, slewTimeMS, maxDecibels - minDecibels);
  15. }
  16. }
  17. void Mute8::step() {
  18. bool solo = false;
  19. for (int i = 0; i < 8; ++i) {
  20. solo = solo || params[MUTE1_PARAM + i].value > 1.5f;
  21. }
  22. for (int i = 0; i < 8; ++i) {
  23. stepChannel(i, solo);
  24. }
  25. }
  26. void Mute8::stepChannel(int i, bool solo) {
  27. _triggers[i].process(inputs[MUTE1_INPUT + i].value);
  28. bool muted = solo ? params[MUTE1_PARAM + i].value < 2.0f : (params[MUTE1_PARAM + i].value > 0.5f || _triggers[i].isHigh());
  29. if (muted) {
  30. lights[MUTE1_LIGHT + i].value = 1.0f;
  31. _amplifiers[i].setLevel(_slewLimiters[i].next(minDecibels));
  32. }
  33. else {
  34. lights[MUTE1_LIGHT + i].value = 0.0f;
  35. _amplifiers[i].setLevel(_slewLimiters[i].next(maxDecibels));
  36. }
  37. outputs[OUTPUT1_OUTPUT + i].value = _amplifiers[i].next(inputs[INPUT1_INPUT + i].active ? inputs[INPUT1_INPUT + i].value : 5.0f);
  38. }
  39. struct Mute8Widget : ModuleWidget {
  40. static constexpr int hp = 10;
  41. Mute8Widget(Mute8* module) : ModuleWidget(module) {
  42. box.size = Vec(RACK_GRID_WIDTH * hp, RACK_GRID_HEIGHT);
  43. {
  44. SVGPanel *panel = new SVGPanel();
  45. panel->box.size = box.size;
  46. panel->setBackground(SVG::load(assetPlugin(plugin, "res/Mute8.svg")));
  47. addChild(panel);
  48. }
  49. addChild(Widget::create<ScrewSilver>(Vec(0, 0)));
  50. addChild(Widget::create<ScrewSilver>(Vec(box.size.x - 15, 0)));
  51. addChild(Widget::create<ScrewSilver>(Vec(0, 365)));
  52. addChild(Widget::create<ScrewSilver>(Vec(box.size.x - 15, 365)));
  53. // generated by svg_widgets.rb
  54. auto mute1ParamPosition = Vec(78.2, 40.7);
  55. auto mute2ParamPosition = Vec(78.2, 80.7);
  56. auto mute3ParamPosition = Vec(78.2, 120.7);
  57. auto mute4ParamPosition = Vec(78.2, 160.7);
  58. auto mute5ParamPosition = Vec(78.2, 200.7);
  59. auto mute6ParamPosition = Vec(78.2, 240.7);
  60. auto mute7ParamPosition = Vec(78.2, 280.7);
  61. auto mute8ParamPosition = Vec(78.2, 318.7);
  62. auto input1InputPosition = Vec(11.0, 36.0);
  63. auto input2InputPosition = Vec(11.0, 76.0);
  64. auto input3InputPosition = Vec(11.0, 116.0);
  65. auto input4InputPosition = Vec(11.0, 156.0);
  66. auto input5InputPosition = Vec(11.0, 196.0);
  67. auto input6InputPosition = Vec(11.0, 236.0);
  68. auto input7InputPosition = Vec(11.0, 276.0);
  69. auto input8InputPosition = Vec(11.0, 316.0);
  70. auto mute1InputPosition = Vec(46.0, 36.0);
  71. auto mute2InputPosition = Vec(46.0, 76.0);
  72. auto mute3InputPosition = Vec(46.0, 116.0);
  73. auto mute4InputPosition = Vec(46.0, 156.0);
  74. auto mute5InputPosition = Vec(46.0, 196.0);
  75. auto mute6InputPosition = Vec(46.0, 236.0);
  76. auto mute7InputPosition = Vec(46.0, 276.0);
  77. auto mute8InputPosition = Vec(46.0, 316.0);
  78. auto output1OutputPosition = Vec(115.0, 36.0);
  79. auto output2OutputPosition = Vec(115.0, 76.0);
  80. auto output3OutputPosition = Vec(115.0, 116.0);
  81. auto output4OutputPosition = Vec(115.0, 156.0);
  82. auto output5OutputPosition = Vec(115.0, 196.0);
  83. auto output6OutputPosition = Vec(115.0, 236.0);
  84. auto output7OutputPosition = Vec(115.0, 276.0);
  85. auto output8OutputPosition = Vec(115.0, 316.0);
  86. auto mute1LightPosition = Vec(100.5, 46.8);
  87. auto mute2LightPosition = Vec(100.5, 86.8);
  88. auto mute3LightPosition = Vec(100.5, 126.8);
  89. auto mute4LightPosition = Vec(100.5, 166.8);
  90. auto mute5LightPosition = Vec(100.5, 206.8);
  91. auto mute6LightPosition = Vec(100.5, 246.8);
  92. auto mute7LightPosition = Vec(100.5, 286.8);
  93. auto mute8LightPosition = Vec(100.5, 324.8);
  94. // end generated by svg_widgets.rb
  95. addParam(ParamWidget::create<SoloMuteButton>(mute1ParamPosition, module, Mute8::MUTE1_PARAM, 0.0, 3.0, 0.0));
  96. addParam(ParamWidget::create<SoloMuteButton>(mute2ParamPosition, module, Mute8::MUTE2_PARAM, 0.0, 3.0, 0.0));
  97. addParam(ParamWidget::create<SoloMuteButton>(mute3ParamPosition, module, Mute8::MUTE3_PARAM, 0.0, 3.0, 0.0));
  98. addParam(ParamWidget::create<SoloMuteButton>(mute4ParamPosition, module, Mute8::MUTE4_PARAM, 0.0, 3.0, 0.0));
  99. addParam(ParamWidget::create<SoloMuteButton>(mute5ParamPosition, module, Mute8::MUTE5_PARAM, 0.0, 3.0, 0.0));
  100. addParam(ParamWidget::create<SoloMuteButton>(mute6ParamPosition, module, Mute8::MUTE6_PARAM, 0.0, 3.0, 0.0));
  101. addParam(ParamWidget::create<SoloMuteButton>(mute7ParamPosition, module, Mute8::MUTE7_PARAM, 0.0, 3.0, 0.0));
  102. addParam(ParamWidget::create<SoloMuteButton>(mute8ParamPosition, module, Mute8::MUTE8_PARAM, 0.0, 3.0, 0.0));
  103. addInput(Port::create<Port24>(input1InputPosition, Port::INPUT, module, Mute8::INPUT1_INPUT));
  104. addInput(Port::create<Port24>(input2InputPosition, Port::INPUT, module, Mute8::INPUT2_INPUT));
  105. addInput(Port::create<Port24>(input3InputPosition, Port::INPUT, module, Mute8::INPUT3_INPUT));
  106. addInput(Port::create<Port24>(input4InputPosition, Port::INPUT, module, Mute8::INPUT4_INPUT));
  107. addInput(Port::create<Port24>(input5InputPosition, Port::INPUT, module, Mute8::INPUT5_INPUT));
  108. addInput(Port::create<Port24>(input6InputPosition, Port::INPUT, module, Mute8::INPUT6_INPUT));
  109. addInput(Port::create<Port24>(input7InputPosition, Port::INPUT, module, Mute8::INPUT7_INPUT));
  110. addInput(Port::create<Port24>(input8InputPosition, Port::INPUT, module, Mute8::INPUT8_INPUT));
  111. addInput(Port::create<Port24>(mute1InputPosition, Port::INPUT, module, Mute8::MUTE1_INPUT));
  112. addInput(Port::create<Port24>(mute2InputPosition, Port::INPUT, module, Mute8::MUTE2_INPUT));
  113. addInput(Port::create<Port24>(mute3InputPosition, Port::INPUT, module, Mute8::MUTE3_INPUT));
  114. addInput(Port::create<Port24>(mute4InputPosition, Port::INPUT, module, Mute8::MUTE4_INPUT));
  115. addInput(Port::create<Port24>(mute5InputPosition, Port::INPUT, module, Mute8::MUTE5_INPUT));
  116. addInput(Port::create<Port24>(mute6InputPosition, Port::INPUT, module, Mute8::MUTE6_INPUT));
  117. addInput(Port::create<Port24>(mute7InputPosition, Port::INPUT, module, Mute8::MUTE7_INPUT));
  118. addInput(Port::create<Port24>(mute8InputPosition, Port::INPUT, module, Mute8::MUTE8_INPUT));
  119. addOutput(Port::create<Port24>(output1OutputPosition, Port::OUTPUT, module, Mute8::OUTPUT1_OUTPUT));
  120. addOutput(Port::create<Port24>(output2OutputPosition, Port::OUTPUT, module, Mute8::OUTPUT2_OUTPUT));
  121. addOutput(Port::create<Port24>(output3OutputPosition, Port::OUTPUT, module, Mute8::OUTPUT3_OUTPUT));
  122. addOutput(Port::create<Port24>(output4OutputPosition, Port::OUTPUT, module, Mute8::OUTPUT4_OUTPUT));
  123. addOutput(Port::create<Port24>(output5OutputPosition, Port::OUTPUT, module, Mute8::OUTPUT5_OUTPUT));
  124. addOutput(Port::create<Port24>(output6OutputPosition, Port::OUTPUT, module, Mute8::OUTPUT6_OUTPUT));
  125. addOutput(Port::create<Port24>(output7OutputPosition, Port::OUTPUT, module, Mute8::OUTPUT7_OUTPUT));
  126. addOutput(Port::create<Port24>(output8OutputPosition, Port::OUTPUT, module, Mute8::OUTPUT8_OUTPUT));
  127. addChild(ModuleLightWidget::create<SmallLight<GreenLight>>(mute1LightPosition, module, Mute8::MUTE1_LIGHT));
  128. addChild(ModuleLightWidget::create<SmallLight<GreenLight>>(mute2LightPosition, module, Mute8::MUTE2_LIGHT));
  129. addChild(ModuleLightWidget::create<SmallLight<GreenLight>>(mute3LightPosition, module, Mute8::MUTE3_LIGHT));
  130. addChild(ModuleLightWidget::create<SmallLight<GreenLight>>(mute4LightPosition, module, Mute8::MUTE4_LIGHT));
  131. addChild(ModuleLightWidget::create<SmallLight<GreenLight>>(mute5LightPosition, module, Mute8::MUTE5_LIGHT));
  132. addChild(ModuleLightWidget::create<SmallLight<GreenLight>>(mute6LightPosition, module, Mute8::MUTE6_LIGHT));
  133. addChild(ModuleLightWidget::create<SmallLight<GreenLight>>(mute7LightPosition, module, Mute8::MUTE7_LIGHT));
  134. addChild(ModuleLightWidget::create<SmallLight<GreenLight>>(mute8LightPosition, module, Mute8::MUTE8_LIGHT));
  135. }
  136. };
  137. RACK_PLUGIN_MODEL_INIT(Bogaudio, Mute8) {
  138. Model *modelMute8 = createModel<Mute8, Mute8Widget>("Bogaudio-Mute8", "Mute8", "eight mutes with CV", UTILITY_TAG);
  139. return modelMute8;
  140. }