diff --git a/src/sfizz/Effects.cpp b/src/sfizz/Effects.cpp index 9ae699fb..c31f245e 100644 --- a/src/sfizz/Effects.cpp +++ b/src/sfizz/Effects.cpp @@ -91,10 +91,10 @@ void EffectBus::addToInputs(const float* const addInput[], float addGain, unsign } } -void EffectBus::init(double sampleRate) +void EffectBus::setSampleRate(double sampleRate) { for (const auto& effectPtr : _effects) - effectPtr->init(sampleRate); + effectPtr->setSampleRate(sampleRate); } void EffectBus::clear() @@ -130,6 +130,10 @@ void EffectBus::mixOutputsTo(float* const mainOutput[], float* const mixOutput[] } } +size_t EffectBus::numEffects() const noexcept +{ + return _effects.size(); +} void EffectBus::setSamplesPerBlock(int samplesPerBlock) noexcept { _inputs.resize(samplesPerBlock); diff --git a/src/sfizz/Effects.h b/src/sfizz/Effects.h index 17ded9de..0ea8d195 100644 --- a/src/sfizz/Effects.h +++ b/src/sfizz/Effects.h @@ -30,7 +30,7 @@ public: /** @brief Initializes with the given sample rate. */ - virtual void init(double sampleRate) = 0; + virtual void setSampleRate(double sampleRate) = 0; /** @brief Reset the state to initial. @@ -133,7 +133,7 @@ public: /** @brief Initializes all effects in the bus with the given sample rate. */ - void init(double sampleRate); + void setSampleRate(double sampleRate); /** @brief Resets the state of all effects in the bus. diff --git a/src/sfizz/Synth.cpp b/src/sfizz/Synth.cpp index eeedafe1..efefd1e7 100644 --- a/src/sfizz/Synth.cpp +++ b/src/sfizz/Synth.cpp @@ -126,7 +126,7 @@ void sfz::Synth::clear() effectBuses.emplace_back(new EffectBus); effectBuses[0]->setGainToMain(1.0); effectBuses[0]->setSamplesPerBlock(samplesPerBlock); - effectBuses[0]->init(sampleRate); + effectBuses[0]->setSampleRate(sampleRate); resources.filePool.clear(); resources.logger.clear(); numGroups = 0; @@ -201,10 +201,13 @@ void sfz::Synth::handleEffectOpcodes(const std::vector& members) auto getOrCreateBus = [this](unsigned index) -> EffectBus& { if (index + 1 > effectBuses.size()) effectBuses.resize(index + 1); - EffectBusPtr& slot = effectBuses[index]; - if (!slot) - slot.reset(new EffectBus); - return *slot; + EffectBusPtr& bus = effectBuses[index]; + if (!bus) { + bus.reset(new EffectBus); + bus->setSampleRate(sampleRate); + bus->setSamplesPerBlock(samplesPerBlock); + } + return *bus; }; for (const Opcode& opcode : members) { @@ -255,7 +258,7 @@ void sfz::Synth::handleEffectOpcodes(const std::vector& members) // create the effect and add it EffectBus& bus = getOrCreateBus(busIndex); auto fx = effectFactory.makeEffect(members); - fx->init(sampleRate); + fx->setSampleRate(sampleRate); bus.addEffect(std::move(fx)); } @@ -482,7 +485,7 @@ void sfz::Synth::setSampleRate(float sampleRate) noexcept for (size_t i = 0, n = effectBuses.size(); i < n; ++i) { if (EffectBus* bus = effectBuses[i].get()) - bus->init(sampleRate); + bus->setSampleRate(sampleRate); } } diff --git a/src/sfizz/effects/Lofi.cpp b/src/sfizz/effects/Lofi.cpp index 7c1c95d4..fdd511d1 100644 --- a/src/sfizz/effects/Lofi.cpp +++ b/src/sfizz/effects/Lofi.cpp @@ -45,7 +45,7 @@ namespace sfz { namespace fx { - void Lofi::init(double sampleRate) + void Lofi::setSampleRate(double sampleRate) { for (unsigned c = 0; c < EffectChannels; ++c) { _bitred[c].init(sampleRate); diff --git a/src/sfizz/effects/Lofi.h b/src/sfizz/effects/Lofi.h index 65b5e54e..1c745154 100644 --- a/src/sfizz/effects/Lofi.h +++ b/src/sfizz/effects/Lofi.h @@ -19,7 +19,7 @@ namespace fx { /** * @brief Initializes with the given sample rate. */ - void init(double sampleRate) override; + void setSampleRate(double sampleRate) override; /** * @brief Reset the state to initial. diff --git a/src/sfizz/effects/Nothing.cpp b/src/sfizz/effects/Nothing.cpp index 527ce5ae..47a3f8b0 100644 --- a/src/sfizz/effects/Nothing.cpp +++ b/src/sfizz/effects/Nothing.cpp @@ -10,7 +10,7 @@ namespace sfz { namespace fx { - void Nothing::init(double sampleRate) + void Nothing::setSampleRate(double sampleRate) { (void)sampleRate; } diff --git a/src/sfizz/effects/Nothing.h b/src/sfizz/effects/Nothing.h index 239697d8..12326897 100644 --- a/src/sfizz/effects/Nothing.h +++ b/src/sfizz/effects/Nothing.h @@ -18,7 +18,7 @@ namespace fx { /** * @brief Initializes with the given sample rate. */ - void init(double sampleRate) override; + void setSampleRate(double sampleRate) override; /** * @brief Reset the state to initial.