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 Range<uint32_t> sampleCountRange { 0, std::numeric_limits<uint32_t>::max() };
|
||||||
constexpr SfzLoopMode loopMode { SfzLoopMode::no_loop };
|
constexpr SfzLoopMode loopMode { SfzLoopMode::no_loop };
|
||||||
constexpr Range<uint32_t> loopRange { 0, std::numeric_limits<uint32_t>::max() };
|
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
|
// common defaults
|
||||||
constexpr Range<uint8_t> midi7Range { 0, 127 };
|
constexpr Range<uint8_t> midi7Range { 0, 127 };
|
||||||
|
|
|
||||||
|
|
@ -138,6 +138,9 @@ bool sfz::Region::parseOpcode(const Opcode& rawOpcode)
|
||||||
case hash("loop_start"): // also loopstart
|
case hash("loop_start"): // also loopstart
|
||||||
setRangeStartFromOpcode(opcode, loopRange, Default::loopRange);
|
setRangeStartFromOpcode(opcode, loopRange, Default::loopRange);
|
||||||
break;
|
break;
|
||||||
|
case hash("loop_crossfade"):
|
||||||
|
setValueFromOpcode(opcode, loopCrossfade, Default::loopCrossfadeRange);
|
||||||
|
break;
|
||||||
|
|
||||||
// Wavetable oscillator
|
// Wavetable oscillator
|
||||||
case hash("oscillator_phase"):
|
case hash("oscillator_phase"):
|
||||||
|
|
|
||||||
|
|
@ -319,6 +319,7 @@ struct Region {
|
||||||
absl::optional<uint32_t> sampleCount {}; // count
|
absl::optional<uint32_t> sampleCount {}; // count
|
||||||
absl::optional<SfzLoopMode> loopMode {}; // loopmode
|
absl::optional<SfzLoopMode> loopMode {}; // loopmode
|
||||||
Range<uint32_t> loopRange { Default::loopRange }; //loopstart and loopend
|
Range<uint32_t> loopRange { Default::loopRange }; //loopstart and loopend
|
||||||
|
float loopCrossfade { Default::loopCrossfade }; // loop_crossfade
|
||||||
|
|
||||||
// Wavetable oscillator
|
// Wavetable oscillator
|
||||||
float oscillatorPhase { Default::oscillatorPhase };
|
float oscillatorPhase { Default::oscillatorPhase };
|
||||||
|
|
|
||||||
|
|
@ -174,6 +174,14 @@ TEST_CASE("[Region] Parsing opcodes")
|
||||||
REQUIRE(region.loopRange == Range<uint32_t>(0, 4294967295));
|
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")
|
SECTION("group")
|
||||||
{
|
{
|
||||||
REQUIRE(region.group == 0);
|
REQUIRE(region.group == 0);
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue