Handle default switch at all levels
This commit is contained in:
parent
20bc1e93d0
commit
1b5a841d97
2 changed files with 48 additions and 0 deletions
|
|
@ -226,6 +226,9 @@ void sfz::Synth::handleMasterOpcodes(const std::vector<Opcode>& members)
|
|||
if (auto value = readOpcode(member.value, Default::polyphonyRange))
|
||||
currentSet->setPolyphonyLimit(*value);
|
||||
break;
|
||||
case hash("sw_default"):
|
||||
setValueFromOpcode(member, defaultSwitch, Default::keyRange);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -267,6 +270,9 @@ void sfz::Synth::handleGroupOpcodes(const std::vector<Opcode>& members, const st
|
|||
case hash("polyphony"):
|
||||
setValueFromOpcode(member, maxPolyphony, Default::polyphonyRange);
|
||||
break;
|
||||
case hash("sw_default"):
|
||||
setValueFromOpcode(member, defaultSwitch, Default::keyRange);
|
||||
break;
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -939,3 +939,45 @@ TEST_CASE("[Synth] If rt_dead is active the release sample can sound after the a
|
|||
|
||||
REQUIRE( synth.getRegionView(1)->delayedReleases.empty() );
|
||||
}
|
||||
|
||||
TEST_CASE("[Synth] sw_default works at a global level")
|
||||
{
|
||||
sfz::Synth synth;
|
||||
synth.loadSfzString(fs::current_path(), R"(
|
||||
<global> sw_default=36 sw_lokey=36 sw_hikey=39
|
||||
<region> sw_last=36 key=62 sample=*sine
|
||||
<region> sw_last=37 key=63 sample=*sine
|
||||
)");
|
||||
synth.noteOn(0, 63, 85);
|
||||
REQUIRE( synth.getNumActiveVoices(true) == 0 );
|
||||
synth.noteOn(0, 62, 85);
|
||||
REQUIRE( synth.getNumActiveVoices(true) == 1 );
|
||||
}
|
||||
|
||||
TEST_CASE("[Synth] sw_default works at a master level")
|
||||
{
|
||||
sfz::Synth synth;
|
||||
synth.loadSfzString(fs::current_path(), R"(
|
||||
<master> sw_default=36 sw_lokey=36 sw_hikey=39
|
||||
<region> sw_last=36 key=62 sample=*sine
|
||||
<region> sw_last=37 key=63 sample=*sine
|
||||
)");
|
||||
synth.noteOn(0, 63, 85);
|
||||
REQUIRE( synth.getNumActiveVoices(true) == 0 );
|
||||
synth.noteOn(0, 62, 85);
|
||||
REQUIRE( synth.getNumActiveVoices(true) == 1 );
|
||||
}
|
||||
|
||||
TEST_CASE("[Synth] sw_default works at a group level")
|
||||
{
|
||||
sfz::Synth synth;
|
||||
synth.loadSfzString(fs::current_path(), R"(
|
||||
<group> sw_default=36 sw_lokey=36 sw_hikey=39
|
||||
<region> sw_last=36 key=62 sample=*sine
|
||||
<region> sw_last=37 key=63 sample=*sine
|
||||
)");
|
||||
synth.noteOn(0, 63, 85);
|
||||
REQUIRE( synth.getNumActiveVoices(true) == 0 );
|
||||
synth.noteOn(0, 62, 85);
|
||||
REQUIRE( synth.getNumActiveVoices(true) == 1 );
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue