From d03495d5686b15c0ddd233a6bcdd6f0a421edba7 Mon Sep 17 00:00:00 2001 From: Jean Pierre Cimalando Date: Sat, 3 Apr 2021 03:07:13 +0200 Subject: [PATCH] Handle message /cc/changed --- src/sfizz/Synth.cpp | 2 ++ src/sfizz/SynthMessaging.cpp | 12 ++++++++++++ src/sfizz/SynthPrivate.h | 1 + 3 files changed, 15 insertions(+) diff --git a/src/sfizz/Synth.cpp b/src/sfizz/Synth.cpp index 8f51064a..2b713909 100644 --- a/src/sfizz/Synth.cpp +++ b/src/sfizz/Synth.cpp @@ -258,6 +258,7 @@ void Synth::Impl::clear() clearCCLabels(); currentUsedCCs_.clear(); changedCCsThisCycle_.clear(); + changedCCsLastCycle_.clear(); clearKeyLabels(); keySlots_.clear(); swLastSlots_.clear(); @@ -1025,6 +1026,7 @@ void Synth::renderBlock(AudioSpan buffer) noexcept sfizz_blob_t blob { changedCCs.data(), static_cast(changedCCs.byte_size()) }; broadcaster.receive<'b'>(finalFrameNumber, "/cc/changed", &blob); } + impl.changedCCsLastCycle_ = impl.changedCCsThisCycle_; impl.changedCCsThisCycle_.clear(); // Send the changed keyswitch if (impl.currentSwitchChanged_) { diff --git a/src/sfizz/SynthMessaging.cpp b/src/sfizz/SynthMessaging.cpp index 940bb2a9..e96f0040 100644 --- a/src/sfizz/SynthMessaging.cpp +++ b/src/sfizz/SynthMessaging.cpp @@ -134,6 +134,18 @@ void sfz::Synth::dispatchMessage(Client& client, int delay, const char* path, co client.receive<'s'>(delay, path, label ? label->c_str() : ""); } break; + MATCH("/cc/changed", "") { + const BitArray& changedCCs = impl.changedCCsThisCycle_; + sfizz_blob_t blob { changedCCs.data(), static_cast(changedCCs.byte_size()) }; + client.receive<'b'>(delay, path, &blob); + } break; + + MATCH("/cc/changed~", "") { + const BitArray& changedCCs = impl.changedCCsLastCycle_; + sfizz_blob_t blob { changedCCs.data(), static_cast(changedCCs.byte_size()) }; + client.receive<'b'>(delay, path, &blob); + } break; + //---------------------------------------------------------------------- MATCH("/mem/buffers", "") { diff --git a/src/sfizz/SynthPrivate.h b/src/sfizz/SynthPrivate.h index 0f698124..960fe9f2 100644 --- a/src/sfizz/SynthPrivate.h +++ b/src/sfizz/SynthPrivate.h @@ -315,6 +315,7 @@ struct Synth::Impl final: public Parser::Listener { std::array defaultCCValues_; BitArray currentUsedCCs_; BitArray changedCCsThisCycle_; + BitArray changedCCsLastCycle_; // Messaging sfizz_receive_t* broadcastReceiver = nullptr;