From 9d3364889b75374be7ff8ae0f63609e4d0ff7a7d Mon Sep 17 00:00:00 2001 From: Paul Fd Date: Thu, 5 Mar 2020 19:02:45 +0100 Subject: [PATCH] Adapt the block size of the effect bus to the one of the Synth --- src/sfizz/Effects.cpp | 8 +++++++- src/sfizz/Effects.h | 9 ++++++++- src/sfizz/Synth.cpp | 4 ++++ 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/src/sfizz/Effects.cpp b/src/sfizz/Effects.cpp index d9396516..c9fad083 100644 --- a/src/sfizz/Effects.cpp +++ b/src/sfizz/Effects.cpp @@ -124,10 +124,16 @@ void EffectBus::mixOutputsTo(float* const mainOutput[], float* const mixOutput[] const float gainToMix = _gainToMix; for (unsigned c = 0; c < EffectChannels; ++c) { - absl::Span fxOut = _outputs.getConstSpan(c); + auto fxOut = _outputs.getConstSpan(c); sfz::multiplyAdd(gainToMain, fxOut, absl::Span(mainOutput[c], nframes)); sfz::multiplyAdd(gainToMix, fxOut, absl::Span(mixOutput[c], nframes)); } } +void EffectBus::setSamplesPerBlock(int samplesPerBlock) noexcept +{ + _inputs.resize(samplesPerBlock); + _outputs.resize(samplesPerBlock); +} + } // namespace sfz diff --git a/src/sfizz/Effects.h b/src/sfizz/Effects.h index ff159d3c..0f7091fc 100644 --- a/src/sfizz/Effects.h +++ b/src/sfizz/Effects.h @@ -136,10 +136,17 @@ public: */ void mixOutputsTo(float* const mainOutput[], float* const mixOutput[], unsigned nframes); + /** + * @brief Sets the maximum number of frames to render at a time. The actual value can be lower + * but should never be higher. + * + */ + void setSamplesPerBlock(int samplesPerBlock) noexcept; + private: std::vector> _effects; AudioBuffer _inputs { EffectChannels, config::defaultSamplesPerBlock }; - AudioBuffer _outputs { EffectChannels, config::defaultSamplesPerBlock }; + AudioBuffer _outputs { EffectChannels, config::defaultSamplesPerBlock }; float _gainToMain = 0.0; float _gainToMix = 0.0; }; diff --git a/src/sfizz/Synth.cpp b/src/sfizz/Synth.cpp index 554c3894..92cfa552 100644 --- a/src/sfizz/Synth.cpp +++ b/src/sfizz/Synth.cpp @@ -125,6 +125,8 @@ void sfz::Synth::clear() effectBuses.clear(); effectBuses.emplace_back(new EffectBus); effectBuses[0]->setGainToMain(1.0); + effectBuses[0]->setSamplesPerBlock(samplesPerBlock); + effectBuses[0]->init(sampleRate); resources.filePool.clear(); resources.logger.clear(); numGroups = 0; @@ -463,6 +465,8 @@ void sfz::Synth::setSamplesPerBlock(int samplesPerBlock) noexcept this->tempMixNodeBuffer.resize(samplesPerBlock); for (auto& voice : voices) voice->setSamplesPerBlock(samplesPerBlock); + for (auto& bus: effectBuses) + bus->setSamplesPerBlock(samplesPerBlock); } void sfz::Synth::setSampleRate(float sampleRate) noexcept