13 #include <nap/signalslot.h>
14 #include <nap/logger.h>
17 #include <audio/utility/audiotypes.h>
18 #include <audio/utility/dirtyflag.h>
55 void ramp(
const T& destination,
int stepCount,
RampMode mode = RampMode::Linear)
57 assert(stepCount >= 0);
59 mDestination.store(destination);
60 mStepCount.store(stepCount);
61 mRampMode.store(mode);
69 void stop() { mStepCounter = 0; }
77 RampMode rampMode = mRampMode.load();
79 if (mStepCounter > 0) {
81 case RampMode::Linear:
84 case RampMode::Exponential:
89 if (mStepCounter == 0) {
90 if (rampMode == RampMode::Exponential && mDestinationZero)
93 mValue = mDestination.load();
121 T destination = mDestination.load();
122 int stepCount = mStepCount.load();
128 mValue = destination;
133 mStepCounter = mStepCount;
135 switch (mRampMode.load())
137 case RampMode::Linear:
138 mIncrement = (destination - mValue) / T(stepCount);
141 case RampMode::Exponential:
147 if (destination == 0)
150 mDestinationZero =
true;
153 mDestinationZero =
false;
156 mFactor = pow(
double(destination / mValue),
double(1.0 / stepCount));
169 std::atomic<T> mDestination = { 0 };
170 std::atomic<int> mStepCount = { 0 };
171 int mStepCounter = 0;
172 std::atomic<RampMode> mRampMode = {RampMode::Linear};
173 bool mDestinationZero =
false;
RampMode
Definition: audiotypes.h:131
T mIncrement
Definition: rampedvalue.h:166
T getValue() const
Definition: rampedvalue.h:105
void stop()
Definition: rampedvalue.h:69
nap::Signal< T > destinationReachedSignal
Definition: rampedvalue.h:116
static constexpr T smallestFactor
Definition: rampedvalue.h:34
bool isRamping() const
Definition: rampedvalue.h:111
RampedValue(const T &initValue)
Definition: rampedvalue.h:37
Definition: templateapp.h:17
void ramp(const T &destination, int stepCount, RampMode mode=RampMode::Linear)
Definition: rampedvalue.h:55
T mFactor
Definition: rampedvalue.h:167
T getNextValue()
Definition: rampedvalue.h:75
Definition: rampedvalue.h:31
void setValue(const T &value)
Definition: rampedvalue.h:43