The sustain cc is still a CC and has to be registered in the regions

This commit is contained in:
Paul Ferrand 2020-08-18 22:36:00 +02:00
parent be7ff64a17
commit 05de17e32e
2 changed files with 27 additions and 4 deletions

View file

@ -1062,10 +1062,8 @@ void sfz::Synth::hdcc(int delay, int ccNumber, float normValue) noexcept
return matchReleaseRegionAndVoice(*region, *v);
};
if (absl::c_find_if(voices, compatibleVoice) == voices.end()) {
if (absl::c_find_if(voices, compatibleVoice) == voices.end())
region->delayedReleases.clear();
continue;
}
}
for (auto& note: region->delayedReleases) {
@ -1082,7 +1080,9 @@ void sfz::Synth::hdcc(int delay, int ccNumber, float normValue) noexcept
}
region->delayedReleases.clear();
} else if (region->registerCC(ccNumber, normValue)) {
}
if (region->registerCC(ccNumber, normValue)) {
auto voice = findFreeVoice();
if (voice == nullptr)
continue;

View file

@ -1120,3 +1120,26 @@ TEST_CASE("[Synth] Used CCs EGs")
// REQUIRE( usedCCs[27] );
// REQUIRE( !usedCCs[28] );
}
TEST_CASE("[Synth] Activate also on the sustain CC")
{
sfz::Synth synth;
synth.loadSfzString(fs::current_path(), R"(
<region> locc64=64 key=53 sample=*sine
)");
synth.noteOn(0, 53, 127);
REQUIRE( synth.getNumActiveVoices(true) == 0 );
synth.cc(1, 64, 127);
synth.noteOn(2, 53, 127);
REQUIRE( synth.getNumActiveVoices(true) == 1 );
}
TEST_CASE("[Synth] Trigger also on the sustain CC")
{
sfz::Synth synth;
synth.loadSfzString(fs::current_path(), R"(
<region> on_locc64=64 sample=*sine
)");
synth.cc(0, 64, 127);
REQUIRE( synth.getNumActiveVoices(true) == 1 );
}