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.

34 lines
900B

  1. #pragma once
  2. #include "util/range.h"
  3. namespace DHE {
  4. namespace Rotation {
  5. constexpr auto gain_range = Range{0.f, 2.f};
  6. constexpr auto av_range = Range{-1.f, 1.f};
  7. inline auto cv_offset(float bipolar_voltage) -> float {
  8. static constexpr auto cv_to_offset = 0.1f;
  9. return bipolar_voltage * cv_to_offset;
  10. }
  11. inline auto av_multiplier(float av_amount) -> float {
  12. return av_range.scale(av_amount);
  13. }
  14. inline auto gain_multiplier(float gain_amount) -> float {
  15. return gain_range.scale(gain_amount);
  16. }
  17. inline auto modulated(float knob_rotation, float cv_bipolar_voltage,
  18. float av_amount) -> float {
  19. return knob_rotation +
  20. av_multiplier(av_amount) * cv_offset(cv_bipolar_voltage);
  21. }
  22. inline auto modulated(float knob_rotation, float cv_bipolar_voltage) -> float {
  23. return knob_rotation + cv_offset(cv_bipolar_voltage);
  24. }
  25. } // namespace Rotation
  26. } // namespace DHE