From 4703b939ab3ef6043ea3b92c11e169bab7533ce7 Mon Sep 17 00:00:00 2001 From: Jean Pierre Cimalando Date: Tue, 28 Jul 2020 13:37:08 +0200 Subject: [PATCH] Only init per-voice modulations which are of the region --- src/sfizz/Voice.cpp | 2 +- src/sfizz/modulations/ModMatrix.cpp | 4 ++-- src/sfizz/modulations/ModMatrix.h | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/sfizz/Voice.cpp b/src/sfizz/Voice.cpp index 9f1b9197..97fa044d 100644 --- a/src/sfizz/Voice.cpp +++ b/src/sfizz/Voice.cpp @@ -141,7 +141,7 @@ void sfz::Voice::startVoice(Region* region, int delay, int number, float value, bendSmoother.reset(centsFactor(region->getBendInCents(resources.midiState.getPitchBend()))); egEnvelope.reset(region->amplitudeEG, *region, resources.midiState, delay, value, sampleRate); - resources.modMatrix.initVoice(id); + resources.modMatrix.initVoice(id, region->getId()); } int sfz::Voice::getCurrentSampleQuality() const noexcept diff --git a/src/sfizz/modulations/ModMatrix.cpp b/src/sfizz/modulations/ModMatrix.cpp index 74fa25cd..c4893fd0 100644 --- a/src/sfizz/modulations/ModMatrix.cpp +++ b/src/sfizz/modulations/ModMatrix.cpp @@ -202,13 +202,13 @@ void ModMatrix::init() } } -void ModMatrix::initVoice(NumericId voiceId) +void ModMatrix::initVoice(NumericId voiceId, NumericId regionId) { Impl& impl = *impl_; for (Impl::Source &source : impl.sources_) { const int flags = source.key.flags(); - if (flags & kModIsPerVoice) + if ((flags & kModIsPerVoice) && source.key.region() == regionId) source.gen->init(source.key, voiceId); } } diff --git a/src/sfizz/modulations/ModMatrix.h b/src/sfizz/modulations/ModMatrix.h index 7cf51e6f..4622f4b1 100644 --- a/src/sfizz/modulations/ModMatrix.h +++ b/src/sfizz/modulations/ModMatrix.h @@ -104,7 +104,7 @@ public: * @brief Reinitialize modulation source for a given voice. * This must be called first after a voice enters active state. */ - void initVoice(NumericId voiceId); + void initVoice(NumericId voiceId, NumericId regionId); /** * @brief Start modulation processing for the entire cycle.