From 1d74968bf02607873adfebf1776043cbd2f636b9 Mon Sep 17 00:00:00 2001 From: Paul Ferrand Date: Sun, 29 Mar 2020 13:27:47 +0200 Subject: [PATCH] Clear cc events on advanceTime --- src/sfizz/MidiState.cpp | 6 ++++++ src/sfizz/MidiState.h | 3 ++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/sfizz/MidiState.cpp b/src/sfizz/MidiState.cpp index b1536251..9406d66c 100644 --- a/src/sfizz/MidiState.cpp +++ b/src/sfizz/MidiState.cpp @@ -51,6 +51,12 @@ void sfz::MidiState::setSampleRate(float sampleRate) noexcept void sfz::MidiState::advanceTime(int numSamples) noexcept { internalClock += numSamples; + for (auto& ccEvents: cc) { + ASSERT(!ccEvents.empty()); // CC event vectors should never be empty + ccEvents.front().second = ccEvents.back().second; + ccEvents.front().first = 0; + ccEvents.resize(1); + } } void sfz::MidiState::setSamplesPerBlock(int samplesPerBlock) noexcept diff --git a/src/sfizz/MidiState.h b/src/sfizz/MidiState.h index 103ed9cd..22df7242 100644 --- a/src/sfizz/MidiState.h +++ b/src/sfizz/MidiState.h @@ -96,7 +96,8 @@ public: /** * @brief Advances the internal clock of a given amount of samples. - * You should call this at each callback. + * You should call this at each callback. This will flush the events + * in the midistate memory. * * @param numSamples the number of samples of clock advance */