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.

81 lines
1.5KB

  1. #include "rack.hpp"
  2. #include "dsp/digital.hpp"
  3. #include "dsp/ringbuffer.hpp"
  4. #include "PatternData.hpp"
  5. #include "Transport.hpp"
  6. #include "Auditioner.hpp"
  7. #include "../ValueChangeTrigger.hpp"
  8. namespace rack_plugin_rcm {
  9. struct PianoRollModule : rack::Module {
  10. enum ParamIds {
  11. RUN_BUTTON_PARAM,
  12. RESET_BUTTON_PARAM,
  13. NUM_PARAMS
  14. };
  15. enum InputIds {
  16. CLOCK_INPUT,
  17. RUN_INPUT,
  18. RESET_INPUT,
  19. PATTERN_INPUT,
  20. RECORD_INPUT,
  21. VOCT_INPUT,
  22. GATE_INPUT,
  23. RETRIGGER_INPUT,
  24. VELOCITY_INPUT,
  25. NUM_INPUTS
  26. };
  27. enum OutputIds {
  28. CLOCK_OUTPUT,
  29. RUN_OUTPUT,
  30. RESET_OUTPUT,
  31. PATTERN_OUTPUT,
  32. RECORD_OUTPUT,
  33. VOCT_OUTPUT,
  34. GATE_OUTPUT,
  35. RETRIGGER_OUTPUT,
  36. VELOCITY_OUTPUT,
  37. END_OF_PATTERN_OUTPUT,
  38. NUM_OUTPUTS
  39. };
  40. enum LightIds {
  41. NUM_LIGHTS
  42. };
  43. rack::SchmittTrigger clockInputTrigger;
  44. rack::SchmittTrigger resetInputTrigger;
  45. rack::SchmittTrigger runInputTrigger;
  46. rack::PulseGenerator retriggerOutputPulse;
  47. rack::PulseGenerator eopOutputPulse;
  48. rack::PulseGenerator gateOutputPulse;
  49. Auditioner auditioner;
  50. ValueChangeTrigger<bool> runInputActive;
  51. rack::RingBuffer<float, 16> clockBuffer;
  52. int clockDelay = 0;
  53. rack::SchmittTrigger recordingIn;
  54. rack::RingBuffer<float, 512> voctInBuffer;
  55. rack::RingBuffer<float, 512> gateInBuffer;
  56. rack::RingBuffer<float, 512> retriggerInBuffer;
  57. rack::RingBuffer<float, 512> velocityInBuffer;
  58. PatternData patternData;
  59. Transport transport;
  60. PianoRollModule();
  61. void step() override;
  62. void onReset() override;
  63. json_t *toJson() override;
  64. void fromJson(json_t *rootJ) override;
  65. };
  66. } // namespace rack_plugin_rcm