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
1.6KB

  1. #include <stdint.h>
  2. #include "../deps/SynthDevKit/src/CV.hpp"
  3. #include "DrumKit.hpp"
  4. #include "DrumModule.hpp"
  5. namespace rack_plugin_DrumKit {
  6. DrumModule::DrumModule( ) : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) {
  7. cv1 = new SynthDevKit::CV(1.7f);
  8. cv2 = new SynthDevKit::CV(1.7f);
  9. currentStep1 = 0;
  10. currentStep2 = 0;
  11. ready1 = false;
  12. ready2 = false;
  13. numSamples = 0;
  14. }
  15. struct DrumContainer *DrumModule::getSample(float current) {
  16. if (numSamples == 0) {
  17. setupSamples();
  18. }
  19. if (current < 1 || current >= numSamples) {
  20. return &samples[ 0 ];
  21. }
  22. return &samples[ (int)current - 1 ];
  23. }
  24. void DrumModule::step( ) {
  25. float in1 = inputs[ CLOCK1_INPUT ].value;
  26. cv1->update(in1);
  27. if (cv1->newTrigger( )) {
  28. if (!ready1) {
  29. ready1 = true;
  30. }
  31. currentStep1 = 0;
  32. }
  33. float current1 = params[ DRUM1_PARAM ].value;
  34. struct DrumContainer *c = getSample(current1);
  35. if (currentStep1 >= c->length) {
  36. outputs[ AUDIO1_OUTPUT ].value = 0;
  37. } else {
  38. outputs[ AUDIO1_OUTPUT ].value = c->sample[ currentStep1 ];
  39. currentStep1++;
  40. }
  41. float in2 = inputs[ CLOCK2_INPUT ].value;
  42. cv2->update(in2);
  43. if (cv2->newTrigger( )) {
  44. if (!ready2) {
  45. ready2 = true;
  46. }
  47. currentStep2 = 0;
  48. }
  49. float current2 = params[ DRUM2_PARAM ].value;
  50. c = getSample(current2);
  51. if (currentStep2 >= c->length) {
  52. outputs[ AUDIO2_OUTPUT ].value = 0;
  53. } else {
  54. outputs[ AUDIO2_OUTPUT ].value = c->sample[ currentStep2 ];
  55. currentStep2++;
  56. }
  57. }
  58. void DrumModule::setupSamples( ) { }
  59. } // namespace rack_plugin_DrumKit