8 #include "sequenceplayer.h"
9 #include "sequenceplayeradapter.h"
10 #include "sequenceplayercurveoutput.h"
11 #include "sequencetrackcurve.h"
14 #include <nap/logger.h>
15 #include <parametervec.h>
16 #include <parameternumeric.h>
30 virtual void setValue() = 0;
39 template<
typename CURVE_TYPE,
typename PARAMETER_TYPE,
typename PARAMETER_VALUE_TYPE>
49 : mParameter(static_cast<PARAMETER_TYPE&>(*output.mParameter.get())), mOutput(output) {
55 mSetFunction = &SequencePlayerCurveAdapter::storeParameterValue;
59 mSetFunction = &SequencePlayerCurveAdapter::setParameterValue;
62 mStoredValue = mParameter.mValue;
79 void tick(
double time)
override
81 for(
const auto &segment: mTrack->
mSegments)
85 if(time >= segment->mStartTime)
90 if(time < segment->mStartTime + source.mDuration)
93 CURVE_TYPE source_value = source.
getValue((time - source.mStartTime) / source.mDuration);
96 auto value =
static_cast<PARAMETER_VALUE_TYPE
>(source_value * (mTrack->
mMaximum - mTrack->
mMinimum) + mTrack->
mMinimum);
99 (*this.*mSetFunction)(value);
112 void setValue()
override
114 std::unique_lock<std::mutex> l(mMutex);
115 mParameter.setValue(mStoredValue);
123 void setParameterValue(PARAMETER_VALUE_TYPE& value)
125 mParameter.setValue(value);
133 void storeParameterValue(PARAMETER_VALUE_TYPE& value)
135 std::unique_lock<std::mutex> l(mMutex);
136 mStoredValue =
value;
140 PARAMETER_TYPE& mParameter;
141 const SequenceTrackCurve<CURVE_TYPE>* mTrack;
142 bool mUseMainThread{};
145 PARAMETER_VALUE_TYPE mStoredValue;