From 1215067dcfaea3eb4e33905ea50c509b0459b72f Mon Sep 17 00:00:00 2001 From: Paul Ferrand Date: Sun, 29 Mar 2020 13:13:19 +0200 Subject: [PATCH] Use vectors of events in the midi state --- src/sfizz/MidiState.cpp | 16 ++++++++++------ src/sfizz/MidiState.h | 4 +++- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/src/sfizz/MidiState.cpp b/src/sfizz/MidiState.cpp index 7b505ca3..0e207841 100644 --- a/src/sfizz/MidiState.cpp +++ b/src/sfizz/MidiState.cpp @@ -95,14 +95,14 @@ void sfz::MidiState::ccEvent(int delay, int ccNumber, float ccValue) noexcept { ASSERT(ccValue >= 0.0 && ccValue <= 1.0); - cc[ccNumber] = ccValue; + cc[ccNumber].emplace_back(delay, ccValue); } float sfz::MidiState::getCCValue(int ccNumber) const noexcept { ASSERT(ccNumber >= 0 && ccNumber < config::numCCs); - return cc[ccNumber]; + return cc[ccNumber].back().second; } void sfz::MidiState::reset(int delay) noexcept @@ -110,8 +110,10 @@ void sfz::MidiState::reset(int delay) noexcept for (auto& velocity: lastNoteVelocities) velocity = 0; - for (auto& ccValue: cc) - ccValue = 0; + for (auto& ccEvents: cc) { + ccEvents.clear(); + ccEvents.emplace_back(0, 0.0f); + } pitchBend = 0; activeNotes = 0; @@ -122,8 +124,10 @@ void sfz::MidiState::reset(int delay) noexcept void sfz::MidiState::resetAllControllers(int delay) noexcept { - for (unsigned idx = 0; idx < config::numCCs; idx++) - cc[idx] = 0; + for (auto& ccEvents: cc) { + ccEvents.clear(); + ccEvents.emplace_back(0, 0.0f); + } pitchBend = 0; } diff --git a/src/sfizz/MidiState.h b/src/sfizz/MidiState.h index c5ac1dba..1b73dc42 100644 --- a/src/sfizz/MidiState.h +++ b/src/sfizz/MidiState.h @@ -143,6 +143,8 @@ public: private: template using MidiNoteArray = std::array; + using MidiEvent = std::pair; + using EventVector = std::vector; int activeNotes { 0 }; /** @@ -165,7 +167,7 @@ private: * @brief Current known values for the CCs. * */ - std::array cc; + std::array cc; /** * Pitch bend status */