Example #1
0
void LinExpSignalUGenInternalK::processBlock(bool& shouldDelete, const unsigned int blockID, const int channel) throw()
{
	int numSamplesToProcess = uGenOutput.getBlockSize();
	float* outputSamples = uGenOutput.getSampleData();
	float* inputSamples = inputs[Input].processBlock(shouldDelete, blockID, channel);
	float* inLowSamples = inputs[InLow].processBlock(shouldDelete, blockID, channel);
	float* inHighSamples = inputs[InHigh].processBlock(shouldDelete, blockID, channel);
	float* outLowSamples = inputs[OutLow].processBlock(shouldDelete, blockID, channel);
	float* outHighSamples = inputs[OutHigh].processBlock(shouldDelete, blockID, channel);
	
	const int krBlockSize = UGen::getControlRateBlockSize();
	unsigned int blockPosition = blockID % krBlockSize;
	
	int numKrSamples = blockPosition % krBlockSize;
	
	while(numSamplesToProcess > 0)
	{
		float nextValue = value;
		
		if(numKrSamples == 0)
		{
			nextValue = linexp(*inputSamples, 
							   *inLowSamples, *inHighSamples,
							   *outLowSamples, *outHighSamples);
		}
		
		numKrSamples = krBlockSize - numKrSamples;
		blockPosition	+= numKrSamples;
		inputSamples	+= numKrSamples;
		inLowSamples	+= numKrSamples;
		inHighSamples	+= numKrSamples;
		outLowSamples	+= numKrSamples;
		outHighSamples	+= numKrSamples;
		
		if(nextValue == value)
		{
			while(numSamplesToProcess && numKrSamples)
			{
				*outputSamples++ = nextValue;
				--numSamplesToProcess;
				--numKrSamples;
			}
		}
		else
		{
			float valueSlope = (nextValue - value) / (float)UGen::getControlRateBlockSize();

			while(numSamplesToProcess && numKrSamples)
			{
				*outputSamples++ = value;
				value += valueSlope;
				--numSamplesToProcess;
				--numKrSamples;
			}
			
			value = nextValue;
		}
	}	
}
Example #2
0
float UGenPlugin::getMappedParameter(int index)
{
	if(getParameterWarp(index))
	{
		return linexp(getParameter(index), 
					  0.f, 1.f, 
					  getParameterMin(index), getParameterMax(index));
	}
	else
	{
		return linlin(getParameter(index), 
					  0.f, 1.f, 
					  getParameterMin(index), getParameterMax(index));		
	}	
}
Example #3
0
void LinExpSignalUGenInternal::processBlock(bool& shouldDelete, const unsigned int blockID, const int channel) throw()
{
	int numSamplesToProcess = uGenOutput.getBlockSize();
	float* outputSamples = uGenOutput.getSampleData();
	float* inputSamples = inputs[Input].processBlock(shouldDelete, blockID, channel);
	float* inLowSamples = inputs[InLow].processBlock(shouldDelete, blockID, channel);
	float* inHighSamples = inputs[InHigh].processBlock(shouldDelete, blockID, channel);
	float* outLowSamples = inputs[OutLow].processBlock(shouldDelete, blockID, channel);
	float* outHighSamples = inputs[OutHigh].processBlock(shouldDelete, blockID, channel);
	
	while(numSamplesToProcess--)
	{
		*outputSamples++ = linexp(*inputSamples++, 
								  *inLowSamples++, *inHighSamples++,
								  *outLowSamples++, *outHighSamples++);
	}
}