parse rt_dead
This commit is contained in:
parent
dc328cb9a7
commit
3dc98e7fd2
4 changed files with 33 additions and 10 deletions
|
|
@ -143,6 +143,7 @@ namespace Default
|
||||||
constexpr SfzCrossfadeCurve crossfadeVelCurve { SfzCrossfadeCurve::power };
|
constexpr SfzCrossfadeCurve crossfadeVelCurve { SfzCrossfadeCurve::power };
|
||||||
constexpr SfzCrossfadeCurve crossfadeCCCurve { SfzCrossfadeCurve::power };
|
constexpr SfzCrossfadeCurve crossfadeCCCurve { SfzCrossfadeCurve::power };
|
||||||
constexpr float rtDecay { 0.0f };
|
constexpr float rtDecay { 0.0f };
|
||||||
|
constexpr bool rtDead { false };
|
||||||
constexpr Range<float> rtDecayRange { 0.0f, 200.0f };
|
constexpr Range<float> rtDecayRange { 0.0f, 200.0f };
|
||||||
|
|
||||||
// Performance parameters: Filters
|
// Performance parameters: Filters
|
||||||
|
|
|
||||||
|
|
@ -111,7 +111,7 @@ bool sfz::Region::parseOpcode(const Opcode& rawOpcode)
|
||||||
loopMode = SfzLoopMode::loop_sustain;
|
loopMode = SfzLoopMode::loop_sustain;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
DBG("Unkown loop mode:" << std::string(opcode.value));
|
DBG("Unkown loop mode:" << opcode.value);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case hash("loop_end"): // also loopend
|
case hash("loop_end"): // also loopend
|
||||||
|
|
@ -161,7 +161,7 @@ bool sfz::Region::parseOpcode(const Opcode& rawOpcode)
|
||||||
offMode = SfzOffMode::normal;
|
offMode = SfzOffMode::normal;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
DBG("Unkown off mode:" << std::string(opcode.value));
|
DBG("Unkown off mode:" << opcode.value);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case hash("polyphony"):
|
case hash("polyphony"):
|
||||||
|
|
@ -181,7 +181,16 @@ bool sfz::Region::parseOpcode(const Opcode& rawOpcode)
|
||||||
selfMask = SfzSelfMask::dontMask;
|
selfMask = SfzSelfMask::dontMask;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
DBG("Unkown self mask value:" << std::string(opcode.value));
|
DBG("Unkown self mask value:" << opcode.value);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case hash("rt_dead"):
|
||||||
|
if (opcode.value == "on") {
|
||||||
|
rtDead = true;
|
||||||
|
} else if (opcode.value == "off") {
|
||||||
|
rtDead = false;
|
||||||
|
} else {
|
||||||
|
DBG("Unkown rt_dead value:" << opcode.value);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
// Region logic: key mapping
|
// Region logic: key mapping
|
||||||
|
|
@ -274,7 +283,7 @@ bool sfz::Region::parseOpcode(const Opcode& rawOpcode)
|
||||||
velocityOverride = SfzVelocityOverride::previous;
|
velocityOverride = SfzVelocityOverride::previous;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
DBG("Unknown velocity mode: " << std::string(opcode.value));
|
DBG("Unknown velocity mode: " << opcode.value);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
@ -337,7 +346,7 @@ bool sfz::Region::parseOpcode(const Opcode& rawOpcode)
|
||||||
trigger = SfzTrigger::release_key;
|
trigger = SfzTrigger::release_key;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
DBG("Unknown trigger mode: " << std::string(opcode.value));
|
DBG("Unknown trigger mode: " << opcode.value);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case hash("start_locc&"): // also on_locc&
|
case hash("start_locc&"): // also on_locc&
|
||||||
|
|
@ -468,7 +477,7 @@ bool sfz::Region::parseOpcode(const Opcode& rawOpcode)
|
||||||
crossfadeKeyCurve = SfzCrossfadeCurve::gain;
|
crossfadeKeyCurve = SfzCrossfadeCurve::gain;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
DBG("Unknown crossfade power curve: " << std::string(opcode.value));
|
DBG("Unknown crossfade power curve: " << opcode.value);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case hash("xf_velcurve"):
|
case hash("xf_velcurve"):
|
||||||
|
|
@ -480,7 +489,7 @@ bool sfz::Region::parseOpcode(const Opcode& rawOpcode)
|
||||||
crossfadeVelCurve = SfzCrossfadeCurve::gain;
|
crossfadeVelCurve = SfzCrossfadeCurve::gain;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
DBG("Unknown crossfade power curve: " << std::string(opcode.value));
|
DBG("Unknown crossfade power curve: " << opcode.value);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case hash("xfin_locc&"):
|
case hash("xfin_locc&"):
|
||||||
|
|
@ -516,7 +525,7 @@ bool sfz::Region::parseOpcode(const Opcode& rawOpcode)
|
||||||
crossfadeCCCurve = SfzCrossfadeCurve::gain;
|
crossfadeCCCurve = SfzCrossfadeCurve::gain;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
DBG("Unknown crossfade power curve: " << std::string(opcode.value));
|
DBG("Unknown crossfade power curve: " << opcode.value);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case hash("rt_decay"):
|
case hash("rt_decay"):
|
||||||
|
|
@ -636,7 +645,7 @@ bool sfz::Region::parseOpcode(const Opcode& rawOpcode)
|
||||||
filters[filterIndex].type = *ftype;
|
filters[filterIndex].type = *ftype;
|
||||||
else {
|
else {
|
||||||
filters[filterIndex].type = FilterType::kFilterNone;
|
filters[filterIndex].type = FilterType::kFilterNone;
|
||||||
DBG("Unknown filter type: " << std::string(opcode.value));
|
DBG("Unknown filter type: " << opcode.value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
@ -745,7 +754,7 @@ bool sfz::Region::parseOpcode(const Opcode& rawOpcode)
|
||||||
equalizers[eqNumber - 1].type = *ftype;
|
equalizers[eqNumber - 1].type = *ftype;
|
||||||
else {
|
else {
|
||||||
equalizers[eqNumber - 1].type = EqType::kEqNone;
|
equalizers[eqNumber - 1].type = EqType::kEqNone;
|
||||||
DBG("Unknown EQ type: " << std::string(opcode.value));
|
DBG("Unknown EQ type: " << opcode.value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
|
||||||
|
|
@ -288,6 +288,7 @@ struct Region {
|
||||||
absl::optional<uint32_t> notePolyphony {}; // note_polyphony
|
absl::optional<uint32_t> notePolyphony {}; // note_polyphony
|
||||||
unsigned polyphony { config::maxVoices }; // polyphony
|
unsigned polyphony { config::maxVoices }; // polyphony
|
||||||
SfzSelfMask selfMask { Default::selfMask };
|
SfzSelfMask selfMask { Default::selfMask };
|
||||||
|
bool rtDead { Default::rtDead };
|
||||||
|
|
||||||
// Region logic: key mapping
|
// Region logic: key mapping
|
||||||
Range<uint8_t> keyRange { Default::keyRange }; //lokey, hikey and key
|
Range<uint8_t> keyRange { Default::keyRange }; //lokey, hikey and key
|
||||||
|
|
|
||||||
|
|
@ -1628,6 +1628,18 @@ TEST_CASE("[Region] Parsing opcodes")
|
||||||
REQUIRE(region.selfMask == SfzSelfMask::dontMask);
|
REQUIRE(region.selfMask == SfzSelfMask::dontMask);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SECTION("Release dead")
|
||||||
|
{
|
||||||
|
REQUIRE(region.rtDead == false);
|
||||||
|
region.parseOpcode({ "rt_dead", "on" });
|
||||||
|
REQUIRE(region.rtDead == true);
|
||||||
|
region.parseOpcode({ "rt_dead", "off" });
|
||||||
|
REQUIRE(region.rtDead == false);
|
||||||
|
region.parseOpcode({ "rt_dead", "on" });
|
||||||
|
region.parseOpcode({ "rt_dead", "garbage" });
|
||||||
|
REQUIRE(region.rtDead == true);
|
||||||
|
}
|
||||||
|
|
||||||
SECTION("amplitude")
|
SECTION("amplitude")
|
||||||
{
|
{
|
||||||
REQUIRE(region.amplitude == 1.0_a);
|
REQUIRE(region.amplitude == 1.0_a);
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue