Slightly looser masking condition
This commit is contained in:
parent
9b11530331
commit
a8c524b7e8
2 changed files with 19 additions and 1 deletions
|
|
@ -930,7 +930,7 @@ void sfz::Synth::noteOnDispatch(int delay, int noteNumber, float velocity) noexc
|
||||||
notePolyphonyCounter += 1;
|
notePolyphonyCounter += 1;
|
||||||
switch (region->selfMask) {
|
switch (region->selfMask) {
|
||||||
case SfzSelfMask::mask:
|
case SfzSelfMask::mask:
|
||||||
if (voice->getTriggerValue() < velocity) {
|
if (voice->getTriggerValue() <= velocity) {
|
||||||
if (!selfMaskCandidate || selfMaskCandidate->getTriggerValue() > voice->getTriggerValue())
|
if (!selfMaskCandidate || selfMaskCandidate->getTriggerValue() > voice->getTriggerValue())
|
||||||
selfMaskCandidate = voice.get();
|
selfMaskCandidate = voice.get();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -224,3 +224,21 @@ TEST_CASE("[Polyphony] Not self-masking")
|
||||||
REQUIRE(synth.getVoiceView(2)->getTriggerValue() == 64_norm);
|
REQUIRE(synth.getVoiceView(2)->getTriggerValue() == 64_norm);
|
||||||
REQUIRE(!synth.getVoiceView(2)->releasedOrFree());
|
REQUIRE(!synth.getVoiceView(2)->releasedOrFree());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST_CASE("[Polyphony] Self-masking with the exact same velocity")
|
||||||
|
{
|
||||||
|
sfz::Synth synth;
|
||||||
|
synth.loadSfzString(fs::current_path(), R"(
|
||||||
|
<region> sample=*sine key=64 note_polyphony=2
|
||||||
|
)");
|
||||||
|
synth.noteOn(0, 64, 64);
|
||||||
|
synth.noteOn(0, 64, 63);
|
||||||
|
synth.noteOn(0, 64, 63);
|
||||||
|
REQUIRE(synth.getNumActiveVoices(true) == 3); // One of these is releasing
|
||||||
|
REQUIRE(synth.getVoiceView(0)->getTriggerValue() == 64_norm);
|
||||||
|
REQUIRE(!synth.getVoiceView(0)->releasedOrFree());
|
||||||
|
REQUIRE(synth.getVoiceView(1)->getTriggerValue() == 63_norm);
|
||||||
|
REQUIRE(synth.getVoiceView(1)->releasedOrFree()); // The first one is the masking candidate since they have the same velocity
|
||||||
|
REQUIRE(synth.getVoiceView(2)->getTriggerValue() == 63_norm);
|
||||||
|
REQUIRE(!synth.getVoiceView(2)->releasedOrFree());
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue