27template <
typename SampleType =
float>
31 explicit LogRampedValueT(SampleType initial) : current_(initial), target_(initial) {}
34 ramp_samples_ = std::max(1,
static_cast<int>(seconds * sample_rate));
39 if (ramp_samples_ <= 1 || current_ <= SampleType{0.0f} ||
40 target_ <= SampleType{0.0f}) {
43 multiplier_ = SampleType{1.0f};
46 multiplier_ = std::pow(target_ / current_,
48 static_cast<SampleType
>(ramp_samples_));
49 steps_remaining_ = ramp_samples_;
57 multiplier_ = SampleType{1.0f};
61 if (steps_remaining_ > 0) {
62 current_ *= multiplier_;
64 if (steps_remaining_ == 0) current_ = target_;
71 if (steps_remaining_ <= 0)
return;
72 if (n >= steps_remaining_) {
76 current_ *= std::pow(multiplier_,
static_cast<SampleType
>(n));
77 steps_remaining_ -= n;
86 SampleType current_ = SampleType{0.0f};
87 SampleType target_ = SampleType{0.0f};
88 SampleType multiplier_ = SampleType{1.0f};
89 int ramp_samples_ = 1;
90 int steps_remaining_ = 0;
Exponentially-smoothed value for parameters where linear ramping sounds wrong (pitch,...
Definition log_ramped_value.hpp:28
void set_ramp_time(SampleType seconds, SampleType sample_rate)
Definition log_ramped_value.hpp:33
SampleType current_value() const
Definition log_ramped_value.hpp:81
void set_immediate(SampleType value)
Definition log_ramped_value.hpp:53
void skip(int n)
Definition log_ramped_value.hpp:69
LogRampedValueT(SampleType initial)
Definition log_ramped_value.hpp:31
SampleType target_value() const
Definition log_ramped_value.hpp:82
LogRampedValueT()=default
bool is_smoothing() const
Definition log_ramped_value.hpp:83
void set_target(SampleType value)
Definition log_ramped_value.hpp:37
SampleType next()
Definition log_ramped_value.hpp:60
Definition additive_bank.hpp:218
LogRampedValueT< float > LogRampedValue
Definition log_ramped_value.hpp:93
LogRampedValueT< double > LogRampedValue64
Definition log_ramped_value.hpp:94