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.

135 lines
2.2KB

  1. #pragma once
  2. #include "bogaudio.hpp"
  3. #include "dadsrh_core.hpp"
  4. extern Model* modelDADSRH;
  5. namespace bogaudio {
  6. struct DADSRH : 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. TRIGGER_INPUT,
  26. NUM_INPUTS
  27. };
  28. enum OutputsIds {
  29. ENV_OUTPUT,
  30. INV_OUTPUT,
  31. TRIGGER_OUTPUT,
  32. NUM_OUTPUTS
  33. };
  34. enum LightsIds {
  35. DELAY_LIGHT,
  36. ATTACK_LIGHT,
  37. DECAY_LIGHT,
  38. SUSTAIN_LIGHT,
  39. RELEASE_LIGHT,
  40. ATTACK_SHAPE1_LIGHT,
  41. ATTACK_SHAPE2_LIGHT,
  42. ATTACK_SHAPE3_LIGHT,
  43. DECAY_SHAPE1_LIGHT,
  44. DECAY_SHAPE2_LIGHT,
  45. DECAY_SHAPE3_LIGHT,
  46. RELEASE_SHAPE1_LIGHT,
  47. RELEASE_SHAPE2_LIGHT,
  48. RELEASE_SHAPE3_LIGHT,
  49. NUM_LIGHTS
  50. };
  51. DADSRHCore _core;
  52. DADSRH() : TriggerOnLoadModule(
  53. NUM_PARAMS,
  54. NUM_INPUTS,
  55. NUM_OUTPUTS,
  56. NUM_LIGHTS
  57. )
  58. , _core(
  59. params[DELAY_PARAM],
  60. params[ATTACK_PARAM],
  61. params[DECAY_PARAM],
  62. params[SUSTAIN_PARAM],
  63. params[RELEASE_PARAM],
  64. params[HOLD_PARAM],
  65. params[ATTACK_SHAPE_PARAM],
  66. params[DECAY_SHAPE_PARAM],
  67. params[RELEASE_SHAPE_PARAM],
  68. params[TRIGGER_PARAM],
  69. params[MODE_PARAM],
  70. params[LOOP_PARAM],
  71. params[SPEED_PARAM],
  72. params[RETRIGGER_PARAM],
  73. NULL,
  74. NULL,
  75. NULL,
  76. NULL,
  77. NULL,
  78. NULL,
  79. inputs[TRIGGER_INPUT],
  80. NULL,
  81. NULL,
  82. NULL,
  83. NULL,
  84. NULL,
  85. outputs[ENV_OUTPUT],
  86. outputs[INV_OUTPUT],
  87. outputs[TRIGGER_OUTPUT],
  88. lights[DELAY_LIGHT],
  89. lights[ATTACK_LIGHT],
  90. lights[DECAY_LIGHT],
  91. lights[SUSTAIN_LIGHT],
  92. lights[RELEASE_LIGHT],
  93. lights[ATTACK_SHAPE1_LIGHT],
  94. lights[ATTACK_SHAPE2_LIGHT],
  95. lights[ATTACK_SHAPE3_LIGHT],
  96. lights[DECAY_SHAPE1_LIGHT],
  97. lights[DECAY_SHAPE2_LIGHT],
  98. lights[DECAY_SHAPE3_LIGHT],
  99. lights[RELEASE_SHAPE1_LIGHT],
  100. lights[RELEASE_SHAPE2_LIGHT],
  101. lights[RELEASE_SHAPE3_LIGHT],
  102. _triggerOnLoad,
  103. _shouldTriggerOnLoad
  104. ) {
  105. onReset();
  106. }
  107. void onReset() override {
  108. _core.reset();
  109. }
  110. void step() override {
  111. _core.step();
  112. }
  113. bool shouldTriggerOnNextLoad() override {
  114. return _core._stage != _core.STOPPED_STAGE;
  115. }
  116. };
  117. } // namespace bogaudio