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

View file

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