diff --git a/src/sfizz/Synth.cpp b/src/sfizz/Synth.cpp index 3a872727..0f11bba4 100644 --- a/src/sfizz/Synth.cpp +++ b/src/sfizz/Synth.cpp @@ -1568,6 +1568,15 @@ void sfz::Synth::applySettingsPerVoice() voice->setPitchEGEnabledPerVoice(settingsPerVoice.havePitchEG); voice->setFilterEGEnabledPerVoice(settingsPerVoice.haveFilterEG); } + + if (stealer.getStealingAlgorithm() == + VoiceStealing::StealingAlgorithm::EnvelopeAndAge) { + for (auto& voice : voices) + voice->enablePowerFollower(); + } else { + for (auto& voice : voices) + voice->disablePowerFollower(); + } } void sfz::Synth::setupModMatrix() diff --git a/src/sfizz/VoiceStealing.cpp b/src/sfizz/VoiceStealing.cpp index 1c425ac7..878f5fb8 100644 --- a/src/sfizz/VoiceStealing.cpp +++ b/src/sfizz/VoiceStealing.cpp @@ -33,13 +33,13 @@ sfz::Voice* sfz::VoiceStealing::stealFirst(absl::Span voices) noexcept sfz::Voice* sfz::VoiceStealing::stealOldest(absl::Span voices) noexcept { - absl::c_stable_sort(voices, voiceOrdering); + absl::c_sort(voices, voiceOrdering); return voices.front(); } sfz::Voice* sfz::VoiceStealing::stealEnvelopeAndAge(absl::Span voices) noexcept { - absl::c_stable_sort(voices, voiceOrdering); + absl::c_sort(voices, voiceOrdering); const auto sumPower = absl::c_accumulate(voices, 0.0f, [](float sum, const Voice* v) { return sum + v->getAveragePower();