Have the sequence start at the first item

This commit is contained in:
Jean Pierre Cimalando 2020-09-27 12:51:49 +02:00
parent 5b28feac03
commit d996130527
2 changed files with 19 additions and 30 deletions

View file

@ -363,7 +363,7 @@ bool sfz::Region::parseOpcode(const Opcode& rawOpcode)
break;
case hash("seq_position"):
setValueFromOpcode(opcode, sequencePosition, Default::sequenceRange);
sequenceSwitched = (opcode.value == "1");
sequenceSwitched = false;
break;
// Region logic: triggers
case hash("trigger"):
@ -1571,12 +1571,8 @@ bool sfz::Region::registerNoteOn(int noteNumber, float velocity, float randValue
ASSERT(velocity >= 0.0f && velocity <= 1.0f);
if (keyswitchRange.containsWithEnd(noteNumber)) {
if (keyswitch) {
if (*keyswitch == noteNumber)
keySwitched = true;
else
keySwitched = false;
}
if (keyswitch)
keySwitched = (*keyswitch == noteNumber);
if (keyswitchDown && *keyswitchDown == noteNumber)
keySwitched = true;
@ -1588,18 +1584,11 @@ bool sfz::Region::registerNoteOn(int noteNumber, float velocity, float randValue
const bool keyOk = keyRange.containsWithEnd(noteNumber);
if (keyOk) {
// Sequence activation
sequenceCounter += 1;
if ((sequenceCounter % sequenceLength) == sequencePosition - 1)
sequenceSwitched = true;
else
sequenceSwitched = false;
sequenceSwitched =
((sequenceCounter++ % sequenceLength) == sequencePosition - 1);
if (previousNote) {
if (*previousNote == noteNumber)
previousKeySwitched = true;
else
previousKeySwitched = false;
}
if (previousNote)
previousKeySwitched = (*previousNote == noteNumber);
}
if (!isSwitchedOn())

View file

@ -216,10 +216,6 @@ TEST_CASE("Region activation", "Region tests")
region.parseOpcode({ "seq_length", "2" });
region.parseOpcode({ "seq_position", "1" });
region.parseOpcode({ "key", "40" });
REQUIRE(region.isSwitchedOn());
region.registerNoteOn(40, 64_norm, 0.5f);
REQUIRE(!region.isSwitchedOn());
region.registerNoteOff(40, 0_norm, 0.5f);
REQUIRE(!region.isSwitchedOn());
region.registerNoteOn(40, 64_norm, 0.5f);
REQUIRE(region.isSwitchedOn());
@ -229,6 +225,10 @@ TEST_CASE("Region activation", "Region tests")
REQUIRE(!region.isSwitchedOn());
region.registerNoteOff(40, 0_norm, 0.5f);
REQUIRE(!region.isSwitchedOn());
region.registerNoteOn(40, 64_norm, 0.5f);
REQUIRE(region.isSwitchedOn());
region.registerNoteOff(40, 0_norm, 0.5f);
REQUIRE(region.isSwitchedOn());
}
SECTION("Sequences: length 2, position 2")
{
@ -237,10 +237,6 @@ TEST_CASE("Region activation", "Region tests")
region.parseOpcode({ "key", "40" });
REQUIRE(!region.isSwitchedOn());
region.registerNoteOn(40, 64_norm, 0.5f);
REQUIRE(region.isSwitchedOn());
region.registerNoteOff(40, 0_norm, 0.5f);
REQUIRE(region.isSwitchedOn());
region.registerNoteOn(40, 64_norm, 0.5f);
REQUIRE(!region.isSwitchedOn());
region.registerNoteOff(40, 0_norm, 0.5f);
REQUIRE(!region.isSwitchedOn());
@ -248,6 +244,10 @@ TEST_CASE("Region activation", "Region tests")
REQUIRE(region.isSwitchedOn());
region.registerNoteOff(40, 0_norm, 0.5f);
REQUIRE(region.isSwitchedOn());
region.registerNoteOn(40, 64_norm, 0.5f);
REQUIRE(!region.isSwitchedOn());
region.registerNoteOff(40, 0_norm, 0.5f);
REQUIRE(!region.isSwitchedOn());
}
SECTION("Sequences: length 3, position 2")
{
@ -256,6 +256,10 @@ TEST_CASE("Region activation", "Region tests")
region.parseOpcode({ "key", "40" });
REQUIRE(!region.isSwitchedOn());
region.registerNoteOn(40, 64_norm, 0.5f);
REQUIRE(!region.isSwitchedOn());
region.registerNoteOff(40, 0_norm, 0.5f);
REQUIRE(!region.isSwitchedOn());
region.registerNoteOn(40, 64_norm, 0.5f);
REQUIRE(region.isSwitchedOn());
region.registerNoteOff(40, 0_norm, 0.5f);
REQUIRE(region.isSwitchedOn());
@ -267,9 +271,5 @@ TEST_CASE("Region activation", "Region tests")
REQUIRE(!region.isSwitchedOn());
region.registerNoteOff(40, 0_norm, 0.5f);
REQUIRE(!region.isSwitchedOn());
region.registerNoteOn(40, 64_norm, 0.5f);
REQUIRE(region.isSwitchedOn());
region.registerNoteOff(40, 0_norm, 0.5f);
REQUIRE(region.isSwitchedOn());
}
}