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.

97 lines
3.7KB

  1. #include "plugin.hpp"
  2. struct _8vert : Module {
  3. enum ParamIds {
  4. ENUMS(GAIN_PARAMS, 8),
  5. NUM_PARAMS
  6. };
  7. enum InputIds {
  8. ENUMS(IN_INPUTS, 8),
  9. NUM_INPUTS
  10. };
  11. enum OutputIds {
  12. ENUMS(OUT_OUTPUTS, 8),
  13. NUM_OUTPUTS
  14. };
  15. enum LightIds {
  16. NUM_LIGHTS
  17. };
  18. _8vert() {
  19. config(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS);
  20. for (int i = 0; i < 8; i++) {
  21. configParam(GAIN_PARAMS + i, -1.f, 1.f, 0.f, string::f("Ch %d gain", i + 1), "%", 0, 100);
  22. }
  23. }
  24. void process(const ProcessArgs& args) override {
  25. float in[16] = {10.f};
  26. int channels = 1;
  27. for (int i = 0; i < 8; i++) {
  28. // Get input
  29. if (inputs[IN_INPUTS + i].isConnected()) {
  30. channels = inputs[IN_INPUTS + i].getChannels();
  31. inputs[IN_INPUTS + i].readVoltages(in);
  32. }
  33. if (outputs[OUT_OUTPUTS + i].isConnected()) {
  34. // Apply gain
  35. float out[16];
  36. float gain = params[GAIN_PARAMS + i].getValue();
  37. for (int c = 0; c < channels; c++) {
  38. out[c] = gain * in[c];
  39. }
  40. // Set output
  41. outputs[OUT_OUTPUTS + i].setChannels(channels);
  42. outputs[OUT_OUTPUTS + i].writeVoltages(out);
  43. }
  44. }
  45. }
  46. };
  47. struct _8vertWidget : ModuleWidget {
  48. _8vertWidget(_8vert* module) {
  49. setModule(module);
  50. setPanel(APP->window->loadSvg(asset::plugin(pluginInstance, "res/8vert.svg")));
  51. addChild(createWidget<ScrewSilver>(Vec(15, 0)));
  52. addChild(createWidget<ScrewSilver>(Vec(box.size.x - 30, 0)));
  53. addChild(createWidget<ScrewSilver>(Vec(15, 365)));
  54. addChild(createWidget<ScrewSilver>(Vec(box.size.x - 30, 365)));
  55. addParam(createParam<RoundBlackKnob>(Vec(45.308, 47.753), module, _8vert::GAIN_PARAMS + 0));
  56. addParam(createParam<RoundBlackKnob>(Vec(45.308, 86.198), module, _8vert::GAIN_PARAMS + 1));
  57. addParam(createParam<RoundBlackKnob>(Vec(45.308, 124.639), module, _8vert::GAIN_PARAMS + 2));
  58. addParam(createParam<RoundBlackKnob>(Vec(45.308, 163.084), module, _8vert::GAIN_PARAMS + 3));
  59. addParam(createParam<RoundBlackKnob>(Vec(45.308, 201.529), module, _8vert::GAIN_PARAMS + 4));
  60. addParam(createParam<RoundBlackKnob>(Vec(45.308, 239.974), module, _8vert::GAIN_PARAMS + 5));
  61. addParam(createParam<RoundBlackKnob>(Vec(45.308, 278.415), module, _8vert::GAIN_PARAMS + 6));
  62. addParam(createParam<RoundBlackKnob>(Vec(45.308, 316.86), module, _8vert::GAIN_PARAMS + 7));
  63. addInput(createInput<PJ301MPort>(Vec(9.507, 50.397), module, _8vert::IN_INPUTS + 0));
  64. addInput(createInput<PJ301MPort>(Vec(9.507, 88.842), module, _8vert::IN_INPUTS + 1));
  65. addInput(createInput<PJ301MPort>(Vec(9.507, 127.283), module, _8vert::IN_INPUTS + 2));
  66. addInput(createInput<PJ301MPort>(Vec(9.507, 165.728), module, _8vert::IN_INPUTS + 3));
  67. addInput(createInput<PJ301MPort>(Vec(9.507, 204.173), module, _8vert::IN_INPUTS + 4));
  68. addInput(createInput<PJ301MPort>(Vec(9.507, 242.614), module, _8vert::IN_INPUTS + 5));
  69. addInput(createInput<PJ301MPort>(Vec(9.507, 281.059), module, _8vert::IN_INPUTS + 6));
  70. addInput(createInput<PJ301MPort>(Vec(9.507, 319.504), module, _8vert::IN_INPUTS + 7));
  71. addOutput(createOutput<PJ301MPort>(Vec(86.393, 50.397), module, _8vert::OUT_OUTPUTS + 0));
  72. addOutput(createOutput<PJ301MPort>(Vec(86.393, 88.842), module, _8vert::OUT_OUTPUTS + 1));
  73. addOutput(createOutput<PJ301MPort>(Vec(86.393, 127.283), module, _8vert::OUT_OUTPUTS + 2));
  74. addOutput(createOutput<PJ301MPort>(Vec(86.393, 165.728), module, _8vert::OUT_OUTPUTS + 3));
  75. addOutput(createOutput<PJ301MPort>(Vec(86.393, 204.173), module, _8vert::OUT_OUTPUTS + 4));
  76. addOutput(createOutput<PJ301MPort>(Vec(86.393, 242.614), module, _8vert::OUT_OUTPUTS + 5));
  77. addOutput(createOutput<PJ301MPort>(Vec(86.393, 281.059), module, _8vert::OUT_OUTPUTS + 6));
  78. addOutput(createOutput<PJ301MPort>(Vec(86.393, 319.504), module, _8vert::OUT_OUTPUTS + 7));
  79. }
  80. };
  81. Model* model_8vert = createModel<_8vert, _8vertWidget>("8vert");