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.

146 lines
2.6KB

  1. #pragma once
  2. #include "bogaudio.hpp"
  3. #include "dadsrh_core.hpp"
  4. extern Model* modelDADSRHPlus;
  5. namespace bogaudio {
  6. struct DADSRHPlus : TriggerOnLoadModule {
  7. enum ParamsIds {
  8. DELAY_PARAM,
  9. ATTACK_PARAM,
  10. DECAY_PARAM,
  11. SUSTAIN_PARAM,
  12. RELEASE_PARAM,
  13. HOLD_PARAM,
  14. ATTACK_SHAPE_PARAM,
  15. DECAY_SHAPE_PARAM,
  16. RELEASE_SHAPE_PARAM,
  17. TRIGGER_PARAM,
  18. MODE_PARAM,
  19. LOOP_PARAM,
  20. SPEED_PARAM,
  21. RETRIGGER_PARAM,
  22. NUM_PARAMS
  23. };
  24. enum InputsIds {
  25. DELAY_INPUT,
  26. ATTACK_INPUT,
  27. DECAY_INPUT,
  28. SUSTAIN_INPUT,
  29. RELEASE_INPUT,
  30. HOLD_INPUT,
  31. TRIGGER_INPUT,
  32. NUM_INPUTS
  33. };
  34. enum OutputsIds {
  35. DELAY_OUTPUT,
  36. ATTACK_OUTPUT,
  37. DECAY_OUTPUT,
  38. SUSTAIN_OUTPUT,
  39. RELEASE_OUTPUT,
  40. ENV_OUTPUT,
  41. INV_OUTPUT,
  42. TRIGGER_OUTPUT,
  43. NUM_OUTPUTS
  44. };
  45. enum LightsIds {
  46. DELAY_LIGHT,
  47. ATTACK_LIGHT,
  48. DECAY_LIGHT,
  49. SUSTAIN_LIGHT,
  50. RELEASE_LIGHT,
  51. ATTACK_SHAPE1_LIGHT,
  52. ATTACK_SHAPE2_LIGHT,
  53. ATTACK_SHAPE3_LIGHT,
  54. DECAY_SHAPE1_LIGHT,
  55. DECAY_SHAPE2_LIGHT,
  56. DECAY_SHAPE3_LIGHT,
  57. RELEASE_SHAPE1_LIGHT,
  58. RELEASE_SHAPE2_LIGHT,
  59. RELEASE_SHAPE3_LIGHT,
  60. NUM_LIGHTS
  61. };
  62. DADSRHCore _core;
  63. DADSRHPlus() : TriggerOnLoadModule(
  64. NUM_PARAMS,
  65. NUM_INPUTS,
  66. NUM_OUTPUTS,
  67. NUM_LIGHTS
  68. )
  69. , _core(
  70. params[DELAY_PARAM],
  71. params[ATTACK_PARAM],
  72. params[DECAY_PARAM],
  73. params[SUSTAIN_PARAM],
  74. params[RELEASE_PARAM],
  75. params[HOLD_PARAM],
  76. params[ATTACK_SHAPE_PARAM],
  77. params[DECAY_SHAPE_PARAM],
  78. params[RELEASE_SHAPE_PARAM],
  79. params[TRIGGER_PARAM],
  80. params[MODE_PARAM],
  81. params[LOOP_PARAM],
  82. params[SPEED_PARAM],
  83. params[RETRIGGER_PARAM],
  84. &inputs[DELAY_INPUT],
  85. &inputs[ATTACK_INPUT],
  86. &inputs[DECAY_INPUT],
  87. &inputs[SUSTAIN_INPUT],
  88. &inputs[RELEASE_INPUT],
  89. &inputs[HOLD_INPUT],
  90. inputs[TRIGGER_INPUT],
  91. &outputs[DELAY_OUTPUT],
  92. &outputs[ATTACK_OUTPUT],
  93. &outputs[DECAY_OUTPUT],
  94. &outputs[SUSTAIN_OUTPUT],
  95. &outputs[RELEASE_OUTPUT],
  96. outputs[ENV_OUTPUT],
  97. outputs[INV_OUTPUT],
  98. outputs[TRIGGER_OUTPUT],
  99. lights[DELAY_LIGHT],
  100. lights[ATTACK_LIGHT],
  101. lights[DECAY_LIGHT],
  102. lights[SUSTAIN_LIGHT],
  103. lights[RELEASE_LIGHT],
  104. lights[ATTACK_SHAPE1_LIGHT],
  105. lights[ATTACK_SHAPE2_LIGHT],
  106. lights[ATTACK_SHAPE3_LIGHT],
  107. lights[DECAY_SHAPE1_LIGHT],
  108. lights[DECAY_SHAPE2_LIGHT],
  109. lights[DECAY_SHAPE3_LIGHT],
  110. lights[RELEASE_SHAPE1_LIGHT],
  111. lights[RELEASE_SHAPE2_LIGHT],
  112. lights[RELEASE_SHAPE3_LIGHT],
  113. _triggerOnLoad,
  114. _shouldTriggerOnLoad
  115. ) {
  116. onReset();
  117. }
  118. void onReset() override {
  119. _core.reset();
  120. }
  121. void step() override {
  122. _core.step();
  123. }
  124. bool shouldTriggerOnNextLoad() override {
  125. return _core._stage != _core.STOPPED_STAGE;
  126. }
  127. };
  128. } // namespace bogaudio