From cfae639d5f5416976cbbe98b9a233798e501bb3f Mon Sep 17 00:00:00 2001 From: Paul Ferrand Date: Sat, 31 Oct 2020 20:29:08 +0100 Subject: [PATCH] Final cleanups --- src/sfizz/Oversampler.cpp | 2 +- src/sfizz/Synth.cpp | 15 +++------------ src/sfizz/VoiceManager.h | 2 +- src/sfizz/VoiceStealing.cpp | 4 ++-- src/sfizz/VoiceStealing.h | 7 ++++--- tests/SIMDHelpersT.cpp | 1 - 6 files changed, 11 insertions(+), 20 deletions(-) diff --git a/src/sfizz/Oversampler.cpp b/src/sfizz/Oversampler.cpp index b4f21621..954a6119 100644 --- a/src/sfizz/Oversampler.cpp +++ b/src/sfizz/Oversampler.cpp @@ -143,7 +143,7 @@ void sfz::Oversampler::stream(AudioSpan input, AudioSpan output, s void sfz::Oversampler::stream(AudioReader& input, AudioSpan output, std::atomic* framesReady) { - ASSERT(output.getNumFrames() >= input.frames() * static_cast(factor)); + ASSERT(output.getNumFrames() >= static_cast(input.frames() * static_cast(factor))); ASSERT(output.getNumChannels() == input.channels()); const auto numFrames = static_cast(input.frames()); diff --git a/src/sfizz/Synth.cpp b/src/sfizz/Synth.cpp index f40823ea..2515d1de 100644 --- a/src/sfizz/Synth.cpp +++ b/src/sfizz/Synth.cpp @@ -41,7 +41,7 @@ namespace sfz { -struct Synth::Impl: public Parser::Listener { +struct Synth::Impl final: public Parser::Listener { Impl(); ~Impl(); @@ -241,9 +241,6 @@ struct Synth::Impl: public Parser::Listener { // These are more general "groups" than sfz and encapsulates the full hierarchy RegionSet* currentSet_ { nullptr }; std::vector sets_; - // This region set holds the engine set of voices, which tries to respect the required - // engine polyphony - RegionSetPtr engineSet_; std::array lastKeyswitchLists_; std::array downKeyswitchLists_; @@ -261,7 +258,6 @@ struct Synth::Impl: public Parser::Listener { float sampleRate_ { config::defaultSampleRate }; float volume_ { Default::globalVolume }; int numVoices_ { config::numVoices }; - int activeVoices_ { 0 }; Oversampling oversamplingFactor_ { config::defaultOversamplingFactor }; // Distribution used to generate random value for the *rand opcodes @@ -319,7 +315,6 @@ Synth::Impl::Impl() initializeSIMDDispatchers(); const std::lock_guard disableCallback { callbackGuard_ }; - engineSet_ = absl::make_unique(nullptr, OpcodeScope::kOpcodeScopeGeneric); parser_.setListener(this); effectFactory_.registerStandardEffectTypes(); effectBuses_.reserve(5); // sufficient room for main and fx1-4 @@ -1131,7 +1126,6 @@ void Synth::renderBlock(AudioSpan buffer) noexcept } } - impl.activeVoices_ = 0; { // Main render block ScopedTiming logger { callbackBreakdown.renderMethod, ScopedTiming::Operation::addToDuration }; tempMixSpan->fill(0.0f); @@ -1142,8 +1136,6 @@ void Synth::renderBlock(AudioSpan buffer) noexcept mm.beginVoice(voice.getId(), voice.getRegion()->getId(), voice.getTriggerEvent().value); - impl.activeVoices_++; - const Region* region = voice.getRegion(); ASSERT(region != nullptr); @@ -1197,7 +1189,8 @@ void Synth::renderBlock(AudioSpan buffer) noexcept } callbackBreakdown.dispatch = impl.dispatchDuration_; - impl.resources_.logger.logCallbackTime(callbackBreakdown, impl.activeVoices_, numFrames); + impl.resources_.logger.logCallbackTime( + callbackBreakdown, impl.voiceManager_.getNumActiveVoices(), numFrames); // Reset the dispatch counter impl.dispatchDuration_ = Duration(0); @@ -1727,8 +1720,6 @@ void Synth::Impl::resetVoices(int numVoices) for (auto& set : sets_) set->removeAllVoices(); - engineSet_->removeAllVoices(); - engineSet_->setPolyphonyLimit(numVoices_); voiceManager_.requireNumVoices(numVoices_, resources_); diff --git a/src/sfizz/VoiceManager.h b/src/sfizz/VoiceManager.h index b9e8fff0..bdc3c6d1 100644 --- a/src/sfizz/VoiceManager.h +++ b/src/sfizz/VoiceManager.h @@ -16,7 +16,7 @@ namespace sfz { -struct VoiceManager : public Voice::StateListener +struct VoiceManager final : public Voice::StateListener { /** * @brief The voice callback which is called during a change of state. diff --git a/src/sfizz/VoiceStealing.cpp b/src/sfizz/VoiceStealing.cpp index 6d06f6e6..d99b447d 100644 --- a/src/sfizz/VoiceStealing.cpp +++ b/src/sfizz/VoiceStealing.cpp @@ -50,14 +50,14 @@ Voice* FirstStealer::checkRegionPolyphony(const Region* region, absl::Spanpolyphony, [=](const Voice* v) { return (!ignoreVoice(v) && v->getRegion() == region); }, - [=](const Voice* v, const Voice* c) { return c == nullptr; }); + [=](const Voice*, const Voice* c) { return c == nullptr; }); } Voice* FirstStealer::checkPolyphony(absl::Span candidates, unsigned maxPolyphony) { return genericPolyphonyCheck(candidates, maxPolyphony, [=](const Voice* v) { return (!ignoreVoice(v)); }, - [=](const Voice* v, const Voice* c) { return c == nullptr; }); + [=](const Voice*, const Voice* c) { return c == nullptr; }); } Voice* OldestStealer::checkRegionPolyphony(const Region* region, absl::Span candidates) diff --git a/src/sfizz/VoiceStealing.h b/src/sfizz/VoiceStealing.h index 78e5000c..6209fca3 100644 --- a/src/sfizz/VoiceStealing.h +++ b/src/sfizz/VoiceStealing.h @@ -25,6 +25,7 @@ enum class StealingAlgorithm { class VoiceStealer { public: + virtual ~VoiceStealer() {} /** * @brief Check that the region polyphony is respected. * @@ -43,21 +44,21 @@ public: virtual Voice* checkPolyphony(absl::Span candidates, unsigned maxPolyphony) = 0; }; -class FirstStealer : public VoiceStealer +class FirstStealer final : public VoiceStealer { public: Voice* checkRegionPolyphony(const Region* region, absl::Span candidates) final; Voice* checkPolyphony(absl::Span candidates, unsigned maxPolyphony) final; }; -class OldestStealer : public VoiceStealer +class OldestStealer final : public VoiceStealer { public: Voice* checkRegionPolyphony(const Region* region, absl::Span candidates) final; Voice* checkPolyphony(absl::Span candidates, unsigned maxPolyphony) final; }; -class EnvelopeAndAgeStealer : public VoiceStealer +class EnvelopeAndAgeStealer final : public VoiceStealer { public: EnvelopeAndAgeStealer(); diff --git a/tests/SIMDHelpersT.cpp b/tests/SIMDHelpersT.cpp index bbf9b70b..6bdf8cf6 100644 --- a/tests/SIMDHelpersT.cpp +++ b/tests/SIMDHelpersT.cpp @@ -19,7 +19,6 @@ using namespace Catch::literals; template using aligned_vector = std::vector>; -constexpr int smallBufferSize { 3 }; constexpr int bigBufferSize { 4095 }; constexpr int medBufferSize { 127 }; constexpr float fillValue { 1.3f };