Adapt start_lohdccN to match ARIA: float 0-127 range

This commit is contained in:
Jean Pierre Cimalando 2020-05-16 20:15:51 +02:00
parent 513055980b
commit ac8d2d24a3
4 changed files with 32 additions and 8 deletions

View file

@ -102,6 +102,20 @@ public:
_start = value; _start = value;
} }
/**
* @brief Convert the range to a different value type
*
* @return Range<Other>
*/
template <class Other>
Range<Other> to() const noexcept
{
return Range<Other> {
static_cast<Other>(_start),
static_cast<Other>(_end),
};
}
private: private:
Type _start { static_cast<Type>(0.0) }; Type _start { static_cast<Type>(0.0) };
Type _end { static_cast<Type>(0.0) }; Type _end { static_cast<Type>(0.0) };

View file

@ -324,14 +324,14 @@ bool sfz::Region::parseOpcode(const Opcode& rawOpcode)
case hash("start_lohdcc&"): // also on_lohdcc& case hash("start_lohdcc&"): // also on_lohdcc&
if (opcode.parameters.back() >= config::numCCs) if (opcode.parameters.back() >= config::numCCs)
return false; return false;
if (auto value = readOpcode(opcode.value, Default::normalizedRange)) if (auto value = readOpcode(opcode.value, Default::midi7Range.to<float>()))
ccTriggers[opcode.parameters.back()].setStart(*value); ccTriggers[opcode.parameters.back()].setStart(normalizeCC(*value));
break; break;
case hash("start_hihdcc&"): // also on_hihdcc& case hash("start_hihdcc&"): // also on_hihdcc&
if (opcode.parameters.back() >= config::numCCs) if (opcode.parameters.back() >= config::numCCs)
return false; return false;
if (auto value = readOpcode(opcode.value, Default::normalizedRange)) if (auto value = readOpcode(opcode.value, Default::midi7Range.to<float>()))
ccTriggers[opcode.parameters.back()].setEnd(*value); ccTriggers[opcode.parameters.back()].setEnd(normalizeCC(*value));
break; break;
// Performance parameters: amplifier // Performance parameters: amplifier

View file

@ -194,6 +194,16 @@ namespace literals {
return normalize7Bits(value); return normalize7Bits(value);
} }
inline float operator""_norm(long double value)
{
if (value < 0)
value = 0;
if (value > 127)
value = 127;
return normalize7Bits(value);
}
} }
/** /**

View file

@ -501,14 +501,14 @@ TEST_CASE("[Region] Parsing opcodes")
for (int ccIdx = 1; ccIdx < 128; ++ccIdx) { for (int ccIdx = 1; ccIdx < 128; ++ccIdx) {
REQUIRE(!region.ccTriggers.contains(ccIdx)); REQUIRE(!region.ccTriggers.contains(ccIdx));
} }
region.parseOpcode({ "on_lohdcc46", "0.15" }); region.parseOpcode({ "on_lohdcc46", "15.9" });
REQUIRE(region.ccTriggers.contains(46)); REQUIRE(region.ccTriggers.contains(46));
REQUIRE(region.ccTriggers[46].getStart() == Approx(0.15f)); REQUIRE(region.ccTriggers[46].getStart() == Approx(15.9_norm));
REQUIRE(region.ccTriggers[46].getEnd() == 1.0f); REQUIRE(region.ccTriggers[46].getEnd() == 1.0f);
region.parseOpcode({ "on_hihdcc5", "0.47" }); region.parseOpcode({ "on_hihdcc5", "47.3" });
REQUIRE(region.ccTriggers.contains(5)); REQUIRE(region.ccTriggers.contains(5));
REQUIRE(region.ccTriggers[5].getStart() == 0.0f); REQUIRE(region.ccTriggers[5].getStart() == 0.0f);
REQUIRE(region.ccTriggers[5].getEnd() == Approx(0.47f)); REQUIRE(region.ccTriggers[5].getEnd() == Approx(47.3_norm));
} }
SECTION("volume") SECTION("volume")