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.

89 lines
2.3KB

  1. #include "XF.hpp"
  2. namespace rack_plugin_SubmarineFree {
  3. struct XF_101 : XF {
  4. enum ParamIds {
  5. PARAM_CV_1,
  6. PARAM_MODE_1,
  7. PARAM_FADE_1,
  8. NUM_PARAMS
  9. };
  10. enum InputIds {
  11. INPUT_A_1,
  12. INPUT_B_1,
  13. INPUT_CV_1,
  14. NUM_INPUTS
  15. };
  16. enum OutputIds {
  17. OUTPUT_1,
  18. NUM_OUTPUTS
  19. };
  20. enum LightIds {
  21. LIGHT_LIN_1,
  22. LIGHT_LOG_1,
  23. LIGHT_AUTO_1,
  24. LIGHT_INV_1,
  25. NUM_LIGHTS
  26. };
  27. XF_Correlator correlators[1];
  28. XF_Controls controls[1] = {
  29. {
  30. INPUT_A_1,
  31. 0,
  32. INPUT_B_1,
  33. 0,
  34. PARAM_FADE_1,
  35. INPUT_CV_1,
  36. OUTPUT_1,
  37. 0,
  38. PARAM_CV_1,
  39. PARAM_MODE_1,
  40. LIGHT_LIN_1,
  41. LIGHT_LOG_1,
  42. LIGHT_AUTO_1,
  43. &correlators[0]
  44. }
  45. };
  46. XF_101() : XF(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) {}
  47. void step() override;
  48. };
  49. void XF_101::step() {
  50. crossFade(&controls[0]);
  51. }
  52. struct XF101 : ModuleWidget {
  53. XF101(XF_101 *module) : ModuleWidget(module) {
  54. XF_LightKnob *fader;
  55. setPanel(SVG::load(assetPlugin(plugin, "res/XF-101.svg")));
  56. addInput(Port::create<sub_port>(Vec(27.5,18), Port::INPUT, module, XF_101::INPUT_A_1));
  57. addInput(Port::create<sub_port>(Vec(127.5,18), Port::INPUT, module, XF_101::INPUT_B_1));
  58. addInput(Port::create<sub_port>(Vec(27.5,74), Port::INPUT, module, XF_101::INPUT_CV_1));
  59. addOutput(Port::create<sub_port>(Vec(127.5,74), Port::OUTPUT, module, XF_101::OUTPUT_1));
  60. addParam(ParamWidget::create<sub_sw_2>(Vec(41, 46), module, XF_101::PARAM_CV_1, 0.0f, 1.0f, 0.0f));
  61. addParam(ParamWidget::create<sub_sw_3>(Vec(125, 43.5), module, XF_101::PARAM_MODE_1, 0.0f, 2.0f, 0.0f));
  62. fader = ParamWidget::create<XF_LightKnob>(Vec(63, 31), module, XF_101::PARAM_FADE_1, 0.0f, 10.0f, 5.0f);
  63. fader->cv = XF_101::INPUT_CV_1;
  64. fader->link = 0;
  65. addParam(fader);
  66. addChild(ModuleLightWidget::create<TinyLight<BlueLight>>(Vec(141, 47), module, XF_101::LIGHT_LIN_1));
  67. addChild(ModuleLightWidget::create<TinyLight<BlueLight>>(Vec(141, 57), module, XF_101::LIGHT_LOG_1));
  68. addChild(ModuleLightWidget::create<TinyLight<BlueRedLight>>(Vec(141, 67), module, XF_101::LIGHT_AUTO_1));
  69. }
  70. };
  71. } // namespace rack_plugin_SubmarineFree
  72. using namespace rack_plugin_SubmarineFree;
  73. RACK_PLUGIN_MODEL_INIT(SubmarineFree, XF101) {
  74. Model *modelXF101 = Model::create<XF_101, XF101>("SubmarineFree", "XF-101", "XF-101 Single Mono Cross Fader", MIXER_TAG);
  75. return modelXF101;
  76. }