Ejemplo n.º 1
0
pair<double, float> Param::findEndTimeAndValue() const
{
	auto ctx = getContext();
	lock_guard<mutex> lock( ctx->getMutex() );

	if( mEvents.empty() )
		return make_pair( ctx->getNumProcessedSeconds(), mValue.load() );
	else {
		const EventRef &event = mEvents.back();
		return make_pair( event->mTimeEnd, event->mValueEnd );
	}
}
Ejemplo n.º 2
0
float Param::findDuration() const
{
	auto ctx = getContext();
	lock_guard<mutex> lock( ctx->getMutex() );

	if( mEvents.empty() )
		return 0;
	else {
		const EventRef &event = mEvents.back();
		return event->mTimeEnd - (float)ctx->getNumProcessedSeconds();
	}
}
Ejemplo n.º 3
0
bool Param::eval()
{
	if( mProcessor ) {
		mProcessor->pullInputs( &mInternalBuffer );
		mValue = mInternalBuffer[mInternalBuffer.getNumFrames() - 1];
		return true;
	}
	else {
		auto ctx = getContext();
		return eval( (float)ctx->getNumProcessedSeconds(), mInternalBuffer.getData(), mInternalBuffer.getSize(), ctx->getSampleRate() );
	}
}
Ejemplo n.º 4
0
EventRef Param::applyRamp( float valueBegin, float valueEnd, float rampSeconds, const Options &options )
{
	initInternalBuffer();

	auto ctx = getContext();
	float timeBegin = (float)ctx->getNumProcessedSeconds() + options.getDelay();
	float timeEnd = timeBegin + rampSeconds;

	EventRef event( new Event( timeBegin, timeEnd, valueBegin, valueEnd, options.getRampFn() ) );

	lock_guard<mutex> lock( ctx->getMutex() );
	resetImpl();
	mEvents.push_back( event );

	return event;
}
Ejemplo n.º 5
0
EventRef Param::applyRamp( float valueEnd, double rampSeconds, const Options &options )
{
	initInternalBuffer();

	auto ctx = getContext();
	double timeBegin = ( options.getBeginTime() >= 0 ? options.getBeginTime() : ctx->getNumProcessedSeconds() + options.getDelay() );
	double timeEnd = timeBegin + rampSeconds;

	EventRef event( new Event( timeBegin, timeEnd, mValue, valueEnd, true, options.getRampFn() ) );

	if( ! options.getLabel().empty() )
		event->mLabel = options.getLabel();

	lock_guard<mutex> lock( ctx->getMutex() );

	removeEventsAt( timeBegin );
	if( mProcessor )
		mProcessor.reset();

	mEvents.push_back( event );
	return event;
}