30 return engine_.prepare(sample_rate);
34 if (!std::isfinite(
static_cast<double>(
low)) || !std::isfinite(
static_cast<double>(
high)))
73 SampleType
next() noexcept {
74 return engine_.next();
76 void process(std::span<SampleType> output)
noexcept {
77 engine_.process(output);
81 return engine_.current();
84 return engine_.active();
95 SampleType
low() const noexcept {
98 SampleType
high() const noexcept {
103 if (!engine_.active())
109 static bool valid_time_(
double time_ms)
noexcept {
113 void rebuild_() noexcept {
114 const std::array<typename Engine::Point, 3> points{{
115 {0.0, low_, rise_curve_},
116 {rise_ms_, high_, fall_curve_},
117 {rise_ms_ + fall_ms_, low_, {}},
119 (void)engine_.configure(points);
123 void apply_loop_() noexcept {
127 engine_.clear_loop();
131 double rise_ms_ = 10.0;
132 double fall_ms_ = 100.0;
133 SampleType low_ = SampleType{0};
134 SampleType high_ = SampleType{1};
135 ModulationCurve rise_curve_{};
136 ModulationCurve fall_curve_{};
137 bool looping_ =
false;
Fixed-capacity, sample-accurate breakpoint modulation envelope.
Definition breakpoint_envelope.hpp:58
static constexpr double kMaxProgramTimeMs
Definition breakpoint_envelope.hpp:68
static constexpr std::uint32_t kLoopForever
Definition breakpoint_envelope.hpp:69
Definition rise_fall_generator.hpp:21
void reset() noexcept
Definition rise_fall_generator.hpp:70
SampleType current() const noexcept
Definition rise_fall_generator.hpp:80
void set_fall_curve(ModulationCurve curve) noexcept
Definition rise_fall_generator.hpp:57
float low() const noexcept
Definition rise_fall_generator.hpp:95
void set_looping(bool looping) noexcept
Definition rise_fall_generator.hpp:62
bool set_times_ms(double rise_ms, double fall_ms) noexcept
Definition rise_fall_generator.hpp:42
BreakpointEnvelopeStatus prepare(double sample_rate) noexcept
Definition rise_fall_generator.hpp:29
bool looping() const noexcept
Definition rise_fall_generator.hpp:86
BreakpointEnvelopeT< SampleType, 3 > Engine
Definition rise_fall_generator.hpp:23
RiseFallStage stage() const noexcept
Definition rise_fall_generator.hpp:102
void trigger() noexcept
Definition rise_fall_generator.hpp:67
bool set_levels(SampleType low, SampleType high) noexcept
Definition rise_fall_generator.hpp:33
void set_rise_curve(ModulationCurve curve) noexcept
Definition rise_fall_generator.hpp:52
float high() const noexcept
Definition rise_fall_generator.hpp:98
double rise_ms() const noexcept
Definition rise_fall_generator.hpp:89
SampleType next() noexcept
Definition rise_fall_generator.hpp:73
void process(std::span< SampleType > output) noexcept
Definition rise_fall_generator.hpp:76
double fall_ms() const noexcept
Definition rise_fall_generator.hpp:92
bool active() const noexcept
Definition rise_fall_generator.hpp:83
RiseFallGeneratorT() noexcept
Definition rise_fall_generator.hpp:25
Definition additive_bank.hpp:218
RiseFallStage
Definition rise_fall_generator.hpp:19
@ falling
Definition rise_fall_generator.hpp:19
@ rising
Definition rise_fall_generator.hpp:19
@ idle
Definition rise_fall_generator.hpp:19
@ idle
Definition envelope.hpp:56
ModulationCurve sanitize_modulation_curve(ModulationCurve curve) noexcept
Definition modulation_curve.hpp:42
RiseFallGeneratorT< float > RiseFallGenerator
Definition rise_fall_generator.hpp:140
BreakpointEnvelopeStatus
Definition breakpoint_envelope.hpp:35
RiseFallGeneratorT< double > RiseFallGenerator64
Definition rise_fall_generator.hpp:141
Curve strength is dimensionless and legal in [0, 1].
Definition modulation_curve.hpp:37