diff --git a/src/sfizz/Synth.cpp b/src/sfizz/Synth.cpp index e1bc441f..15395563 100644 --- a/src/sfizz/Synth.cpp +++ b/src/sfizz/Synth.cpp @@ -1144,9 +1144,6 @@ void Synth::Impl::noteOnDispatch(int delay, int noteNumber, float velocity) noex } TriggerEvent triggerEvent { TriggerEventType::NoteOn, noteNumber, velocity }; - if (region.velocityOverride == VelocityOverride::previous) - triggerEvent.value = resources_.midiState.getLastVelocity(); - startVoice(layer, delay, triggerEvent, ring); } } @@ -1199,7 +1196,7 @@ void Synth::cc(int delay, int ccNumber, uint8_t ccValue) noexcept void Synth::Impl::ccDispatch(int delay, int ccNumber, float value) noexcept { SisterVoiceRingBuilder ring; - const TriggerEvent triggerEvent { TriggerEventType::CC, ccNumber, value }; + TriggerEvent triggerEvent { TriggerEventType::CC, ccNumber, value }; for (Layer* layer : ccActivationLists_[ccNumber]) { const Region& region = layer->getRegion(); @@ -1217,8 +1214,9 @@ void Synth::Impl::ccDispatch(int delay, int ccNumber, float value) noexcept } } - if (layer->registerCC(ccNumber, value)) + if (layer->registerCC(ccNumber, value)) { startVoice(layer, delay, triggerEvent, ring); + } } } diff --git a/src/sfizz/Voice.cpp b/src/sfizz/Voice.cpp index 65b13cb9..ff5610ea 100644 --- a/src/sfizz/Voice.cpp +++ b/src/sfizz/Voice.cpp @@ -401,6 +401,9 @@ bool Voice::startVoice(Layer* layer, int delay, const TriggerEvent& event) noexc if (impl.triggerEvent_.type == TriggerEventType::CC) impl.triggerEvent_.number = region.pitchKeycenter; + if (region.velocityOverride == VelocityOverride::previous) + impl.triggerEvent_.value = resources.midiState.getLastVelocity(); + if (region.disabled()) { impl.switchState(State::cleanMeUp); return false;