Enable looping if unset in the region

This commit is contained in:
Paul Ferrand 2019-12-29 10:45:41 +01:00
parent 3aa341e0aa
commit 8dc532b58d
4 changed files with 14 additions and 7 deletions

1
external/benchmark vendored Submodule

@ -0,0 +1 @@
Subproject commit 090faecb454fbd6e6e17a75ef8146acb037118d4

View file

@ -227,7 +227,7 @@ struct Region {
uint32_t offsetRandom { Default::offsetRandom }; // offset_random
uint32_t sampleEnd { Default::sampleEndRange.getEnd() }; // end
absl::optional<uint32_t> sampleCount {}; // count
SfzLoopMode loopMode { Default::loopMode }; // loopmode
absl::optional<SfzLoopMode> loopMode {}; // loopmode
Range<uint32_t> loopRange { Default::loopRange }; //loopstart and loopend
// Instrument settings: voice lifecycle

View file

@ -252,11 +252,17 @@ bool sfz::Synth::loadSfzFile(const fs::path& filename)
}
region->sampleEnd = std::min(region->sampleEnd, fileInformation->end);
if (region->loopRange.getStart() == Default::loopRange.getStart())
region->loopRange.setStart(fileInformation->loopBegin);
if (fileInformation->loopBegin != Default::loopRange.getStart() &&
fileInformation->loopEnd != Default::loopRange.getEnd()) {
if (region->loopRange.getStart() == Default::loopRange.getStart())
region->loopRange.setStart(fileInformation->loopBegin);
if (region->loopRange.getEnd() == Default::loopRange.getEnd())
region->loopRange.setEnd(fileInformation->loopEnd);
if (region->loopRange.getEnd() == Default::loopRange.getEnd())
region->loopRange.setEnd(fileInformation->loopEnd);
if (!region->loopMode)
region->loopMode = SfzLoopMode::loop_continuous;
}
if (fileInformation->numChannels == 2)
region->isStereo = true;

View file

@ -99,7 +99,7 @@ TEST_CASE("[Region] Parsing opcodes")
SECTION("loop_mode")
{
REQUIRE(region.loopMode == SfzLoopMode::no_loop);
REQUIRE( !region.loopMode );
region.parseOpcode({ "loop_mode", "no_loop" });
REQUIRE(region.loopMode == SfzLoopMode::no_loop);
region.parseOpcode({ "loop_mode", "one_shot" });
@ -112,7 +112,7 @@ TEST_CASE("[Region] Parsing opcodes")
SECTION("loopmode")
{
REQUIRE(region.loopMode == SfzLoopMode::no_loop);
REQUIRE( !region.loopMode );
region.parseOpcode({ "loopmode", "no_loop" });
REQUIRE(region.loopMode == SfzLoopMode::no_loop);
region.parseOpcode({ "loopmode", "one_shot" });