Added the use of sample exact controls to the Delay plugin

Added Sample exactness to the following parameters

Delay time
Regen
Lfo time
Lfo amount

Did not add this to the output gain contol, This model is used in
a dbScale, and a much more pleaseing result was gained by using an
amplifier plugin.
This commit is contained in:
Dave French
2015-02-27 18:00:56 +00:00
parent a0360d2a8e
commit 0d220b9584

View File

@@ -82,15 +82,20 @@ bool DelayEffect::processAudioBuffer( sampleFrame* buf, const fpp_t frames )
return( false );
}
double outSum = 0.0;
const float sr = Engine::mixer()->processingSampleRate();
const float d = dryLevel();
const float w = wetLevel();
const float amplitude = m_delayControls.m_lfoAmountModel.value() * Engine::mixer()->processingSampleRate();
m_lfo->setFrequency( 1.0 / m_delayControls.m_lfoTimeModel.value() );
m_delay->setFeedback( m_delayControls.m_feedbackModel.value() );
float length = m_delayControls.m_delayTimeModel.value();
float amplitude = m_delayControls.m_lfoAmountModel.value() * sr;
float lfoTime = 1.0 / m_delayControls.m_lfoTimeModel.value();
float feedback = m_delayControls.m_feedbackModel.value();
sample_t dryS[2];
float lPeak = 0.0;
float rPeak = 0.0;
ValueBuffer *lengthBuffer = m_delayControls.m_delayTimeModel.valueBuffer();
ValueBuffer *feedbackBuffer = m_delayControls.m_feedbackModel.valueBuffer();
ValueBuffer *lfoTimeBuffer = m_delayControls.m_lfoTimeModel.valueBuffer();
ValueBuffer *lfoAmountBuffer = m_delayControls.m_lfoAmountModel.valueBuffer();
if( m_delayControls.m_outGainModel.isValueChanged() )
{
m_outGain = dbvToAmp( m_delayControls.m_outGainModel.value() );
@@ -99,7 +104,14 @@ bool DelayEffect::processAudioBuffer( sampleFrame* buf, const fpp_t frames )
{
dryS[0] = buf[f][0];
dryS[1] = buf[f][1];
float length = lengthBuffer ? lengthBuffer->values()[ f ] : m_delayControls.m_delayTimeModel.value();
length = lengthBuffer ? lengthBuffer->values()[ f ] : length;
amplitude = lfoAmountBuffer ? lfoAmountBuffer->values()[ f ] * sr : amplitude;
lfoTime = lfoTimeBuffer ? 1 / lfoTimeBuffer->values()[ f ] : lfoTime;
feedback = feedbackBuffer ? feedbackBuffer->values()[ f ] : feedback;
m_delay->setFeedback( feedback );
m_lfo->setFrequency( lfoTime );
length *= Engine::mixer()->processingSampleRate();
m_delay->setLength( length + ( amplitude * ( float )m_lfo->tick() ) );
m_delay->tick( buf[f] );