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.

140 lines
3.3KB

  1. #pragma once
  2. #include "bogaudio.hpp"
  3. #include "lfo_base.hpp"
  4. using namespace bogaudio::dsp;
  5. extern Model* modelEightFO;
  6. namespace bogaudio {
  7. struct EightFO : LFOBase {
  8. enum ParamsIds {
  9. FREQUENCY_PARAM,
  10. WAVE_PARAM,
  11. SAMPLE_PWM_PARAM,
  12. PHASE7_PARAM,
  13. PHASE6_PARAM,
  14. PHASE5_PARAM,
  15. PHASE4_PARAM,
  16. PHASE3_PARAM,
  17. PHASE2_PARAM,
  18. PHASE1_PARAM,
  19. PHASE0_PARAM,
  20. SLOW_PARAM,
  21. OFFSET_PARAM,
  22. SCALE_PARAM,
  23. NUM_PARAMS
  24. };
  25. enum InputsIds {
  26. SAMPLE_PWM_INPUT,
  27. PHASE7_INPUT,
  28. PHASE6_INPUT,
  29. PHASE5_INPUT,
  30. PHASE4_INPUT,
  31. PHASE3_INPUT,
  32. PHASE2_INPUT,
  33. PHASE1_INPUT,
  34. PHASE0_INPUT,
  35. PITCH_INPUT,
  36. RESET_INPUT,
  37. OFFSET_INPUT,
  38. SCALE_INPUT,
  39. NUM_INPUTS
  40. };
  41. enum OutputsIds {
  42. PHASE7_OUTPUT,
  43. PHASE6_OUTPUT,
  44. PHASE5_OUTPUT,
  45. PHASE4_OUTPUT,
  46. PHASE3_OUTPUT,
  47. PHASE2_OUTPUT,
  48. PHASE1_OUTPUT,
  49. PHASE0_OUTPUT,
  50. NUM_OUTPUTS
  51. };
  52. enum LightsIds {
  53. SLOW_LIGHT,
  54. NUM_LIGHTS
  55. };
  56. enum Wave {
  57. NO_WAVE,
  58. RAMP_UP_WAVE,
  59. RAMP_DOWN_WAVE,
  60. SINE_WAVE,
  61. TRIANGLE_WAVE,
  62. SQUARE_WAVE
  63. };
  64. const int modulationSteps = 100;
  65. const float amplitude = 5.0f;
  66. const Phasor::phase_delta_t basePhase7Offset = Phasor::radiansToPhase(1.75f * M_PI);
  67. const Phasor::phase_delta_t basePhase6Offset = Phasor::radiansToPhase(1.5f * M_PI);
  68. const Phasor::phase_delta_t basePhase5Offset = Phasor::radiansToPhase(1.25f * M_PI);
  69. const Phasor::phase_delta_t basePhase4Offset = Phasor::radiansToPhase(M_PI);
  70. const Phasor::phase_delta_t basePhase3Offset = Phasor::radiansToPhase(0.75f * M_PI);
  71. const Phasor::phase_delta_t basePhase2Offset = Phasor::radiansToPhase(0.5f * M_PI);
  72. const Phasor::phase_delta_t basePhase1Offset = Phasor::radiansToPhase(0.25f * M_PI);
  73. const Phasor::phase_delta_t basePhase0Offset = Phasor::radiansToPhase(0.0f);
  74. int _modulationStep = 0;
  75. Wave _wave = NO_WAVE;
  76. bool _slowMode = false;
  77. int _sampleSteps = 1;
  78. int _sampleStep = 0;
  79. float _offset = 0.0f;
  80. float _scale = 0.0f;
  81. PositiveZeroCrossing _resetTrigger;
  82. Phasor _phasor;
  83. SineTableOscillator _sine;
  84. TriangleOscillator _triangle;
  85. SawOscillator _ramp;
  86. SquareOscillator _square;
  87. Phasor::phase_delta_t _phase7Offset = 0.0f;
  88. Phasor::phase_delta_t _phase6Offset = 0.0f;
  89. Phasor::phase_delta_t _phase5Offset = 0.0f;
  90. Phasor::phase_delta_t _phase4Offset = 0.0f;
  91. Phasor::phase_delta_t _phase3Offset = 0.0f;
  92. Phasor::phase_delta_t _phase2Offset = 0.0f;
  93. Phasor::phase_delta_t _phase1Offset = 0.0f;
  94. Phasor::phase_delta_t _phase0Offset = 0.0f;
  95. float _phase7Sample = 0.0f;
  96. float _phase6Sample = 0.0f;
  97. float _phase5Sample = 0.0f;
  98. float _phase4Sample = 0.0f;
  99. float _phase3Sample = 0.0f;
  100. float _phase2Sample = 0.0f;
  101. float _phase1Sample = 0.0f;
  102. float _phase0Sample = 0.0f;
  103. bool _phase7Active = false;
  104. bool _phase6Active = false;
  105. bool _phase5Active = false;
  106. bool _phase4Active = false;
  107. bool _phase3Active = false;
  108. bool _phase2Active = false;
  109. bool _phase1Active = false;
  110. bool _phase0Active = false;
  111. EightFO() : LFOBase(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) {
  112. onReset();
  113. onSampleRateChange();
  114. }
  115. void onReset() override;
  116. void onSampleRateChange() override;
  117. void step() override;
  118. Phasor::phase_delta_t phaseOffset(Param& p, Input& i, Phasor::phase_delta_t baseOffset);
  119. void updateOutput(bool useSample, Output& output, Phasor::phase_delta_t& offset, float& sample, bool& active);
  120. };
  121. } // namespace bogaudio