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.

47 lines
721B

  1. #pragma once
  2. #include "rack.hpp"
  3. using namespace rack;
  4. namespace bogaudio {
  5. struct Trigger : SchmittTrigger {
  6. float _highThreshold;
  7. float _lowThreshold;
  8. Trigger(float highThreshold = 1.0f, float lowThreshold = 0.1f)
  9. : _highThreshold(highThreshold)
  10. , _lowThreshold(lowThreshold)
  11. {
  12. reset();
  13. }
  14. bool process(float in) {
  15. switch (state) {
  16. case LOW:
  17. if (in >= _highThreshold) {
  18. state = HIGH;
  19. return true;
  20. }
  21. break;
  22. case HIGH:
  23. if (in <= _lowThreshold) {
  24. state = LOW;
  25. }
  26. break;
  27. default:
  28. if (in >= _highThreshold) {
  29. state = HIGH;
  30. }
  31. else if (in <= _lowThreshold) {
  32. state = LOW;
  33. }
  34. break;
  35. }
  36. return false;
  37. }
  38. };
  39. } // namespace bogaudio