diff --git a/Source/FXProcessor.cpp b/Source/FXProcessor.cpp index 72a296b..3e4e9a8 100644 --- a/Source/FXProcessor.cpp +++ b/Source/FXProcessor.cpp @@ -14,24 +14,27 @@ namespace serum FXProcessor::FXProcessor() { - units[0] = std::make_unique(); - units[1] = std::make_unique(); - units[2] = std::make_unique(); - units[3] = std::make_unique(); - units[4] = std::make_unique(); - units[5] = std::make_unique(); - units[6] = std::make_unique(); - units[7] = std::make_unique(); - units[8] = std::make_unique(); + for (auto& slotUnits : units) + { + slotUnits[0] = std::make_unique(); + slotUnits[1] = std::make_unique(); + slotUnits[2] = std::make_unique(); + slotUnits[3] = std::make_unique(); + slotUnits[4] = std::make_unique(); + slotUnits[5] = std::make_unique(); + slotUnits[6] = std::make_unique(); + slotUnits[7] = std::make_unique(); + slotUnits[8] = std::make_unique(); + } } FXProcessor::~FXProcessor() = default; void FXProcessor::prepare (double sampleRate, int maxBlockSize) { - for (auto& u : units) - u->prepare (sampleRate, maxBlockSize); - dry.setSize (2, maxBlockSize, false, false, true); + for (auto& slotUnits : units) + for (auto& u : slotUnits) + u->prepare (sampleRate, maxBlockSize); wet.setSize (2, maxBlockSize, false, false, true); reset(); } diff --git a/Source/FXProcessor.h b/Source/FXProcessor.h index 9eb6876..bc3919a 100644 --- a/Source/FXProcessor.h +++ b/Source/FXProcessor.h @@ -31,7 +31,7 @@ struct FxSlotParams // =========================================================================== // Reorderable effects rack. Slots are processed in list order; reordering is // simply swapping FxSlotParams entries. Nine effect unit implementations are -// owned here and shared across slots. +// preconstructed per slot with independent DSP history. // =========================================================================== class FXProcessor { @@ -47,8 +47,10 @@ public: static juce::String fxTypeName (int type); private: - std::array, 9> units; - juce::AudioBuffer dry, wet; + static constexpr int kNumEffectTypes = (int) FxType::Count - 1; + std::array, kNumEffectTypes>, kNumFxSlots> units; + std::array activeTypes {}; + juce::AudioBuffer wet; }; } // namespace serum