Adapt start_lohdccN to match ARIA: float 0-127 range
This commit is contained in:
parent
513055980b
commit
ac8d2d24a3
4 changed files with 32 additions and 8 deletions
|
|
@ -102,6 +102,20 @@ public:
|
|||
_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:
|
||||
Type _start { static_cast<Type>(0.0) };
|
||||
Type _end { static_cast<Type>(0.0) };
|
||||
|
|
|
|||
|
|
@ -324,14 +324,14 @@ bool sfz::Region::parseOpcode(const Opcode& rawOpcode)
|
|||
case hash("start_lohdcc&"): // also on_lohdcc&
|
||||
if (opcode.parameters.back() >= config::numCCs)
|
||||
return false;
|
||||
if (auto value = readOpcode(opcode.value, Default::normalizedRange))
|
||||
ccTriggers[opcode.parameters.back()].setStart(*value);
|
||||
if (auto value = readOpcode(opcode.value, Default::midi7Range.to<float>()))
|
||||
ccTriggers[opcode.parameters.back()].setStart(normalizeCC(*value));
|
||||
break;
|
||||
case hash("start_hihdcc&"): // also on_hihdcc&
|
||||
if (opcode.parameters.back() >= config::numCCs)
|
||||
return false;
|
||||
if (auto value = readOpcode(opcode.value, Default::normalizedRange))
|
||||
ccTriggers[opcode.parameters.back()].setEnd(*value);
|
||||
if (auto value = readOpcode(opcode.value, Default::midi7Range.to<float>()))
|
||||
ccTriggers[opcode.parameters.back()].setEnd(normalizeCC(*value));
|
||||
break;
|
||||
|
||||
// Performance parameters: amplifier
|
||||
|
|
|
|||
|
|
@ -194,6 +194,16 @@ namespace literals {
|
|||
|
||||
return normalize7Bits(value);
|
||||
}
|
||||
|
||||
inline float operator""_norm(long double value)
|
||||
{
|
||||
if (value < 0)
|
||||
value = 0;
|
||||
if (value > 127)
|
||||
value = 127;
|
||||
|
||||
return normalize7Bits(value);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -501,14 +501,14 @@ TEST_CASE("[Region] Parsing opcodes")
|
|||
for (int ccIdx = 1; ccIdx < 128; ++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[46].getStart() == Approx(0.15f));
|
||||
REQUIRE(region.ccTriggers[46].getStart() == Approx(15.9_norm));
|
||||
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[5].getStart() == 0.0f);
|
||||
REQUIRE(region.ccTriggers[5].getEnd() == Approx(0.47f));
|
||||
REQUIRE(region.ccTriggers[5].getEnd() == Approx(47.3_norm));
|
||||
}
|
||||
|
||||
SECTION("volume")
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue