AnalogTapeModel

Physical modelling signal processing for analog tape recording
Log | Files | Refs | Submodules | README | LICENSE

commit 810b690bb6b8124a516518fb38c9b82a39c35187
parent bfa667185d089a206c923eaf3e02ac948421532c
Author: jatinchowdhury18 <jatinchowdhury18@users.noreply.github.com>
Date:   Sun, 19 Apr 2020 11:24:23 -0700

Bug fixes and efficiency improvements

Diffstat:
MPlugin/Source/PluginProcessor.cpp | 4++--
MPlugin/Source/Processors/Chew/ChewProcessor.cpp | 5+----
MPlugin/Source/Processors/Degrade/DegradeProcessor.cpp | 3---
MPlugin/Source/Processors/Loss_Effects/FIRFilter.h | 22++++++++++++++++------
MPlugin/Source/gui.xml | 2+-
5 files changed, 20 insertions(+), 16 deletions(-)

diff --git a/Plugin/Source/PluginProcessor.cpp b/Plugin/Source/PluginProcessor.cpp @@ -171,8 +171,8 @@ void ChowtapeModelAudioProcessor::processBlock (AudioBuffer<float>& buffer, Midi inGain.processBlock (buffer, midiMessages); hysteresis.processBlock (buffer, midiMessages); - degrade.processBlock (buffer, midiMessages); chewer.processBlock (buffer); + degrade.processBlock (buffer, midiMessages); flutter.processBlock (buffer, midiMessages); @@ -203,7 +203,7 @@ void ChowtapeModelAudioProcessor::getStateInformation (MemoryBlock& destData) void ChowtapeModelAudioProcessor::setStateInformation (const void* data, int sizeInBytes) { - magicState.setStateInformation (data, sizeInBytes); + magicState.setStateInformation (data, sizeInBytes, getActiveEditor()); } //============================================================================== diff --git a/Plugin/Source/Processors/Chew/ChewProcessor.cpp b/Plugin/Source/Processors/Chew/ChewProcessor.cpp @@ -25,9 +25,6 @@ void ChewProcessor::prepare (double sr, int samplesPerBlock) void ChewProcessor::processBlock (AudioBuffer<float>& buffer) { - if (*depth == 0.0f) - return; - if (sampleCounter >= samplesUntilChange) { sampleCounter = 0; @@ -36,7 +33,7 @@ void ChewProcessor::processBlock (AudioBuffer<float>& buffer) if (isCrinkled) // start crinkle { mix = 1.0f; - power = 0.5f; //depth->control->get(); + power = *depth; samplesUntilChange = getWetTime(); } else // end crinkle diff --git a/Plugin/Source/Processors/Degrade/DegradeProcessor.cpp b/Plugin/Source/Processors/Degrade/DegradeProcessor.cpp @@ -27,9 +27,6 @@ void DegradeProcessor::prepareToPlay (double sampleRate, int samplesPerBlock) void DegradeProcessor::processBlock (AudioBuffer<float>& buffer, MidiBuffer& midi) { - if (*amtParam == 0.0f || *depthParam == 0.0f) - return; - float freqHz = 200.0f * powf (20000.0f / 200.0f, 1.0f - *amtParam); float gainDB = -24.0f * *depthParam; diff --git a/Plugin/Source/Processors/Loss_Effects/FIRFilter.h b/Plugin/Source/Processors/Loss_Effects/FIRFilter.h @@ -9,10 +9,15 @@ public: FIRFilter (int order) : order (order) { - h.reset (new float[order]); - z.reset (new float[order]); + h = new float[order]; + z = new float[order]; + } + + ~FIRFilter() + { + delete[] h; + delete[] z; } - ~FIRFilter() {} void reset() { @@ -36,7 +41,12 @@ public: z[zPtr] = buffer[n]; for (int m = 0; m < order; ++m) - y += h[m] * z[negativeAwareModulo<int> (zPtr - m, order)]; + { + int idx = zPtr - m; + idx = (idx < 0) ? idx + order : idx; + + y += h[m] * z[idx]; + } buffer[n] = y; zPtr = (zPtr + 1) % order; @@ -53,11 +63,11 @@ public: } protected: - std::unique_ptr<float[]> h; + float* h; const int order; private: - std::unique_ptr<float[]> z; + float* z; int zPtr = 0; JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (FIRFilter) diff --git a/Plugin/Source/gui.xml b/Plugin/Source/gui.xml @@ -22,7 +22,7 @@ </Style> </Styles> <View id="root" resizable="1" resize-corner="1" flex-direction="column" - background-color="FF7D2C2C" padding="0"> + background-color="FF7D2C2C" padding="0" width="600" height="600"> <View max-height="100" padding="0" background-color="FF7D2C2C" margin="0"> <Label text="CHOW Tape Model" font-size="20" padding="0" background-color="FF7D2C2C" border="" max-width="180"/>