Add opcode: loop_crossfade
This commit is contained in:
parent
7933bcec8d
commit
f6d05509cb
4 changed files with 14 additions and 0 deletions
|
|
@ -54,6 +54,8 @@ namespace Default
|
|||
constexpr Range<uint32_t> sampleCountRange { 0, std::numeric_limits<uint32_t>::max() };
|
||||
constexpr SfzLoopMode loopMode { SfzLoopMode::no_loop };
|
||||
constexpr Range<uint32_t> loopRange { 0, std::numeric_limits<uint32_t>::max() };
|
||||
constexpr float loopCrossfade { 1e-3 };
|
||||
constexpr Range<float> loopCrossfadeRange { loopCrossfade, 1.0 };
|
||||
|
||||
// common defaults
|
||||
constexpr Range<uint8_t> midi7Range { 0, 127 };
|
||||
|
|
|
|||
|
|
@ -138,6 +138,9 @@ bool sfz::Region::parseOpcode(const Opcode& rawOpcode)
|
|||
case hash("loop_start"): // also loopstart
|
||||
setRangeStartFromOpcode(opcode, loopRange, Default::loopRange);
|
||||
break;
|
||||
case hash("loop_crossfade"):
|
||||
setValueFromOpcode(opcode, loopCrossfade, Default::loopCrossfadeRange);
|
||||
break;
|
||||
|
||||
// Wavetable oscillator
|
||||
case hash("oscillator_phase"):
|
||||
|
|
|
|||
|
|
@ -319,6 +319,7 @@ struct Region {
|
|||
absl::optional<uint32_t> sampleCount {}; // count
|
||||
absl::optional<SfzLoopMode> loopMode {}; // loopmode
|
||||
Range<uint32_t> loopRange { Default::loopRange }; //loopstart and loopend
|
||||
float loopCrossfade { Default::loopCrossfade }; // loop_crossfade
|
||||
|
||||
// Wavetable oscillator
|
||||
float oscillatorPhase { Default::oscillatorPhase };
|
||||
|
|
|
|||
|
|
@ -174,6 +174,14 @@ TEST_CASE("[Region] Parsing opcodes")
|
|||
REQUIRE(region.loopRange == Range<uint32_t>(0, 4294967295));
|
||||
}
|
||||
|
||||
SECTION("loop_crossfade")
|
||||
{
|
||||
region.parseOpcode({ "loop_crossfade", "0.5" });
|
||||
REQUIRE(region.loopCrossfade == Approx(0.5f));
|
||||
region.parseOpcode({ "loop_crossfade", "0" });
|
||||
REQUIRE(region.loopCrossfade > 0);
|
||||
}
|
||||
|
||||
SECTION("group")
|
||||
{
|
||||
REQUIRE(region.group == 0);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue