From f304c0b9889535a2207e42833a00a4b33253ee7c Mon Sep 17 00:00:00 2001 From: Praash Date: Mon, 7 Jun 2021 14:51:29 +0300 Subject: [PATCH 1/3] Use group cuts with CC triggered (pedal) samples --- src/sfizz/Voice.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/sfizz/Voice.cpp b/src/sfizz/Voice.cpp index fea3f196..64ec01c8 100644 --- a/src/sfizz/Voice.cpp +++ b/src/sfizz/Voice.cpp @@ -1648,7 +1648,9 @@ bool Voice::checkOffGroup(const Region* other, int delay, int noteNumber) noexce if (impl.released()) return false; - if (impl.triggerEvent_.type == TriggerEventType::NoteOn + if ( + (impl.triggerEvent_.type == TriggerEventType::NoteOn + || impl.triggerEvent_.type == TriggerEventType::CC) && region->offBy && *region->offBy == other->group && (region->group != other->group || noteNumber != impl.triggerEvent_.number)) { off(delay); From d00115ed7daebe4e843378feab5a67261020841e Mon Sep 17 00:00:00 2001 From: Paul Fd Date: Wed, 23 Jun 2021 00:12:05 +0200 Subject: [PATCH 2/3] Reformat --- src/sfizz/Voice.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/sfizz/Voice.cpp b/src/sfizz/Voice.cpp index 64ec01c8..c93d4ecf 100644 --- a/src/sfizz/Voice.cpp +++ b/src/sfizz/Voice.cpp @@ -1648,8 +1648,7 @@ bool Voice::checkOffGroup(const Region* other, int delay, int noteNumber) noexce if (impl.released()) return false; - if ( - (impl.triggerEvent_.type == TriggerEventType::NoteOn + if ((impl.triggerEvent_.type == TriggerEventType::NoteOn || impl.triggerEvent_.type == TriggerEventType::CC) && region->offBy && *region->offBy == other->group && (region->group != other->group || noteNumber != impl.triggerEvent_.number)) { From e4b4dcd6553edcf94e81c7bddbb38dda35be3023 Mon Sep 17 00:00:00 2001 From: Paul Fd Date: Wed, 23 Jun 2021 00:17:02 +0200 Subject: [PATCH 3/3] Add a test case --- tests/SynthT.cpp | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/tests/SynthT.cpp b/tests/SynthT.cpp index 3ca5db3f..a7108eaf 100644 --- a/tests/SynthT.cpp +++ b/tests/SynthT.cpp @@ -1693,6 +1693,23 @@ TEST_CASE("[Synth] Off by a CC event") REQUIRE( playingSamples(synth) == std::vector { "*sine" }); } +TEST_CASE("[Synth] CC triggered off by a CC event") +{ + sfz::Synth synth; + sfz::AudioBuffer buffer { 2, static_cast(synth.getSamplesPerBlock()) }; + + synth.loadSfzString(fs::current_path(), R"( + group=1 off_by=2 sample=*saw hikey=-1 on_locc64=126 on_hicc64=127 + group=2 sample=*triangle hikey=-1 on_locc64=0 on_hicc64=1 + )"); + synth.cc(0, 64, 127); + synth.renderBlock(buffer); + REQUIRE( playingSamples(synth) == std::vector { "*saw" }); + synth.cc(0, 64, 0); + synth.renderBlock(buffer); + REQUIRE( playingSamples(synth) == std::vector { "*triangle" }); +} + TEST_CASE("[Synth] Off by a note-off event") { sfz::Synth synth;