commit 0b2466f8c24677a0392943f4e8151a0291d2b8c8
parent 2a94da6329d51ed83cacb6a7f485fe2778ad821e
Author: jatinchowdhury18 <jatinchowdhury18@gmail.com>
Date: Mon, 1 Jun 2020 16:57:30 -0700
Working on fixing clicks (#35)
* Fix clicks in GainProcessor and DegradeProcessor
* Fix clicks on start playback
Co-authored-by: jatinchowdhury18 <jatinchowdhury18@users.noreply.github.com>
Diffstat:
5 files changed, 34 insertions(+), 11 deletions(-)
diff --git a/Plugin/Source/Processors/Degrade/DegradeProcessor.cpp b/Plugin/Source/Processors/Degrade/DegradeProcessor.cpp
@@ -14,14 +14,29 @@ void DegradeProcessor::createParameterLayout (std::vector<std::unique_ptr<Ranged
params.push_back (std::make_unique<AudioParameterFloat> ("deg_var", "Variance", 0.0f, 1.0f, 0.0f));
}
+void DegradeProcessor::cookParams()
+{
+ float freqHz = 200.0f * powf (20000.0f / 200.0f, 1.0f - *amtParam);
+ float gainDB = -24.0f * *depthParam;
+
+ for (int ch = 0; ch < 2; ++ch)
+ {
+ noiseProc[ch].setGain (0.5f * *depthParam * *amtParam);
+ filterProc[ch].setFreq (jmin (freqHz + (*varParam * (freqHz / 0.6f) * (random.nextFloat() - 0.5f)), 0.49f * fs));
+ }
+
+ gainProc.setGain (Decibels::decibelsToGain (jmin (gainDB + (*varParam * 36.0f * (random.nextFloat() - 0.5f)), 3.0f)));
+}
+
void DegradeProcessor::prepareToPlay (double sampleRate, int samplesPerBlock)
{
fs = (float) sampleRate;
+ cookParams();
for (int ch = 0; ch < 2; ++ch)
{
noiseProc[ch].prepare();
- filterProc[ch].reset ((float) sampleRate);
+ filterProc[ch].reset ((float) sampleRate, 20);
}
gainProc.prepareToPlay (sampleRate, samplesPerBlock);
@@ -29,18 +44,13 @@ void DegradeProcessor::prepareToPlay (double sampleRate, int samplesPerBlock)
void DegradeProcessor::processBlock (AudioBuffer<float>& buffer, MidiBuffer& midi)
{
- float freqHz = 200.0f * powf (20000.0f / 200.0f, 1.0f - *amtParam);
- float gainDB = -24.0f * *depthParam;
+ cookParams();
for (int ch = 0; ch < buffer.getNumChannels(); ++ch)
{
- noiseProc[ch].setGain (0.5f * *depthParam * *amtParam);
noiseProc[ch].processBlock (buffer.getWritePointer (ch), buffer.getNumSamples());
-
- filterProc[ch].setFreq (jmin (freqHz + (*varParam * (freqHz / 0.6f) * (random.nextFloat() - 0.5f)), 0.49f * fs));
filterProc[ch].process (buffer.getWritePointer (ch), buffer.getNumSamples());
}
- gainProc.setGain (Decibels::decibelsToGain (jmin (gainDB + (*varParam * 36.0f * (random.nextFloat() - 0.5f)), 3.0f)));
gainProc.processBlock (buffer, midi);
}
diff --git a/Plugin/Source/Processors/Degrade/DegradeProcessor.h b/Plugin/Source/Processors/Degrade/DegradeProcessor.h
@@ -12,6 +12,7 @@ public:
static void createParameterLayout (std::vector<std::unique_ptr<RangedAudioParameter>>& params);
+ void cookParams();
void prepareToPlay (double sampleRate, int samplesPerBlock);
void processBlock (AudioBuffer<float>& buffer, MidiBuffer& midi);
diff --git a/Plugin/Source/Processors/GainProcessor.h b/Plugin/Source/Processors/GainProcessor.h
@@ -10,7 +10,7 @@ public:
void prepareToPlay (double /*sampleRate*/, int /*maximumExpectedSamplesPerBlock*/)
{
- oldGain = 0.0f;
+ oldGain = curGain;
}
void processBlock (AudioBuffer<float>& buffer, MidiBuffer& /*midiMessages*/)
diff --git a/Plugin/Source/Processors/Loss_Effects/LossFilter.h b/Plugin/Source/Processors/Loss_Effects/LossFilter.h
@@ -64,6 +64,8 @@ public:
prevSpacing = *spacing;
prevThickness = *thickness;
prevGap = *gap;
+
+ starting = true;
}
void calcCoefs()
@@ -100,7 +102,10 @@ public:
{
if (*spacing == (float) 1.0e-6 && *thickness == (float) 1.0e-6 && *gap == (float) 1.0e-6
&& *spacing == prevSpacing && *thickness == prevThickness && *gap == prevGap)
+ {
+ filters[activeFilter]->processBypassed (buffer, numSamples);
return;
+ }
if ((*speed != prevSpeed || *spacing != prevSpacing ||
*thickness != prevThickness || *gap != prevGap) && fadeCount == 0)
@@ -121,7 +126,13 @@ public:
else
filters[! activeFilter]->processBypassed (buffer, numSamples);
- filters[activeFilter]->process (buffer, numSamples);
+ if (! starting)
+ filters[activeFilter]->process (buffer, numSamples);
+ else
+ {
+ starting = false;
+ filters[activeFilter]->processBypassed (buffer, numSamples);
+ }
if (fadeCount > 0)
{
@@ -148,6 +159,7 @@ private:
int fadeCount = 0;
const int fadeLength = 512;
Array<float> fadeBuffer;
+ bool starting = false;
std::atomic<float>* speed = nullptr;
std::atomic<float>* spacing = nullptr;
diff --git a/Plugin/Source/Processors/Timing_Effects/DelayProcessor.cpp b/Plugin/Source/Processors/Timing_Effects/DelayProcessor.cpp
@@ -9,8 +9,8 @@ void DelayProcessor::setReadPtr (int maxLength)
void DelayProcessor::setLengthMs (double lengthMs, bool force)
{
- int newLength = (int) (lengthMs * sampleRate / 1000.0);
- newLength = jmin (newLength, bufferSize);
+ auto newLength = lengthMs * sampleRate / 1000.0;
+ newLength = jmin (newLength, (double) bufferSize);
if (! force)
length.setTargetValue ((float) newLength);