From 9faef3013474a1bddd00d94319a945db12b14e1a Mon Sep 17 00:00:00 2001 From: Paul Fd Date: Sat, 30 Jul 2022 02:52:07 +0200 Subject: [PATCH] Last keyswitches don't change the midi state --- src/sfizz/Synth.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/sfizz/Synth.cpp b/src/sfizz/Synth.cpp index d589fafd..3042092c 100644 --- a/src/sfizz/Synth.cpp +++ b/src/sfizz/Synth.cpp @@ -1262,7 +1262,10 @@ void Synth::hdNoteOn(int delay, int noteNumber, float normalizedVelocity) noexce ASSERT(noteNumber >= 0); Impl& impl = *impl_; ScopedTiming logger { impl.dispatchDuration_, ScopedTiming::Operation::addToDuration }; - impl.resources_.getMidiState().noteOnEvent(delay, noteNumber, normalizedVelocity); + + if (impl.lastKeyswitchLists_[noteNumber].empty()) + impl.resources_.getMidiState().noteOnEvent(delay, noteNumber, normalizedVelocity); + impl.noteOnDispatch(delay, noteNumber, normalizedVelocity); } @@ -1283,7 +1286,10 @@ void Synth::hdNoteOff(int delay, int noteNumber, float normalizedVelocity) noexc // way in sfz to specify that a release trigger should NOT use the note-on velocity? // auto replacedVelocity = (velocity == 0 ? getNoteVelocity(noteNumber) : velocity); MidiState& midiState = impl.resources_.getMidiState(); - midiState.noteOffEvent(delay, noteNumber, normalizedVelocity); + + if (impl.lastKeyswitchLists_[noteNumber].empty()) + midiState.noteOffEvent(delay, noteNumber, normalizedVelocity); + const auto replacedVelocity = midiState.getNoteVelocity(noteNumber); for (auto& voice : impl.voiceManager_)