Reset note and octave offset when resetting the synth
This commit is contained in:
parent
956b0c9c13
commit
cd6bba5378
3 changed files with 37 additions and 0 deletions
|
|
@ -263,6 +263,8 @@ void Synth::Impl::clear()
|
|||
rootPath_.clear();
|
||||
numGroups_ = 0;
|
||||
numMasters_ = 0;
|
||||
noteOffset_ = 0;
|
||||
octaveOffset_ = 0;
|
||||
currentSwitch_ = absl::nullopt;
|
||||
defaultPath_ = "";
|
||||
image_ = "";
|
||||
|
|
|
|||
|
|
@ -87,6 +87,14 @@ void sfz::Synth::dispatchMessage(Client& client, int delay, const char* path, co
|
|||
client.receive<'i'>(delay, path, int(impl.resources_.getFilePool().getNumPreloadedSamples()));
|
||||
} break;
|
||||
|
||||
MATCH("/octave_offset", "") {
|
||||
client.receive<'i'>(delay, path, impl.octaveOffset_);
|
||||
} break;
|
||||
|
||||
MATCH("/note_offset", "") {
|
||||
client.receive<'i'>(delay, path, impl.noteOffset_);
|
||||
} break;
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
MATCH("/key/slots", "") {
|
||||
|
|
|
|||
|
|
@ -1937,3 +1937,30 @@ TEST_CASE("[Synth] Sequences also work on cc triggers")
|
|||
synth.renderBlock(buffer);
|
||||
REQUIRE( playingSamples(synth) == std::vector<std::string> { "*sine", "*saw", "*sine" } );
|
||||
}
|
||||
|
||||
TEST_CASE("[Synth] Loading resets note and octave offsets")
|
||||
{
|
||||
sfz::Synth synth;
|
||||
std::vector<std::string> messageList;
|
||||
sfz::Client client(&messageList);
|
||||
client.setReceiveCallback(&simpleMessageReceiver);
|
||||
sfz::AudioBuffer<float> buffer { 2, static_cast<unsigned>(synth.getSamplesPerBlock()) };
|
||||
synth.loadSfzString(fs::current_path() / "tests/TestFiles/octave_offset.sfz", R"(
|
||||
<control> note_offset=1 octave_offset=-1
|
||||
<region> sample=*sine
|
||||
)");
|
||||
synth.dispatchMessage(client, 0, "/note_offset", "", nullptr);
|
||||
synth.dispatchMessage(client, 0, "/octave_offset", "", nullptr);
|
||||
synth.loadSfzString(fs::current_path() / "tests/TestFiles/octave_offset.sfz", R"(
|
||||
<region> sample=*sine
|
||||
)");
|
||||
synth.dispatchMessage(client, 0, "/note_offset", "", nullptr);
|
||||
synth.dispatchMessage(client, 0, "/octave_offset", "", nullptr);
|
||||
std::vector<std::string> expected {
|
||||
"/note_offset,i : { 1 }",
|
||||
"/octave_offset,i : { -1 }",
|
||||
"/note_offset,i : { 0 }",
|
||||
"/octave_offset,i : { 0 }",
|
||||
};
|
||||
REQUIRE(messageList == expected);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue