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