32 jassert (value >= 0 && value <= 127);
34 auto valueAs14Bit = value <= 64 ? value << 7
35 : int (jmap<float> (
float (value - 64), 0.0f, 63.0f, 0.0f, 8191.0f)) + 8192;
37 return { valueAs14Bit };
42 jassert (value >= 0 && value <= 16383);
53 return normalisedValue >> 7;
58 return normalisedValue;
64 return (normalisedValue < 8192)
65 ? jmap<float> (float (normalisedValue), 0.0f, 8192.0f, -1.0f, 0.0f)
66 : jmap<float> (
float (normalisedValue), 8192.0f, 16383.0f, 0.0f, 1.0f);
71 return jmap<float> (float (normalisedValue), 0.0f, 16383.0f, 0.0f, 1.0f);
77 return normalisedValue == other.normalisedValue;
90 class MPEValueTests :
public UnitTest 94 :
UnitTest (
"MPEValue class", UnitTestCategories::midi)
97 void runTest()
override 99 beginTest (
"comparison operator");
105 expect (value1 == value1);
106 expect (value1 == value2);
107 expect (value1 != value3);
110 beginTest (
"special values");
122 beginTest (
"zero/minimum value");
128 beginTest (
"maximum value");
134 beginTest (
"centre value");
140 beginTest (
"value halfway between min and centre");
149 void expectValuesConsistent (
MPEValue value,
150 int expectedValueAs7BitInt,
151 int expectedValueAs14BitInt,
152 float expectedValueAsSignedFloat,
153 float expectedValueAsUnsignedFloat)
155 expectEquals (value.
as7BitInt(), expectedValueAs7BitInt);
156 expectEquals (value.
as14BitInt(), expectedValueAs14BitInt);
157 expectFloatWithinRelativeError (value.
asSignedFloat(), expectedValueAsSignedFloat, 0.0001f);
158 expectFloatWithinRelativeError (value.
asUnsignedFloat(), expectedValueAsUnsignedFloat, 0.0001f);
162 void expectFloatWithinRelativeError (
float actualValue,
float expectedValue,
float maxRelativeError)
164 const float maxAbsoluteError = jmax (1.0f, std::abs (expectedValue)) * maxRelativeError;
165 expect (std::abs (expectedValue - actualValue) < maxAbsoluteError);
169 static MPEValueTests MPEValueUnitTests;
bool operator==(const MPEValue &other) const noexcept
Returns true if two values are equal.
MPEValue() noexcept
Default constructor.
static MPEValue from7BitInt(int value) noexcept
Constructs an MPEValue from an integer between 0 and 127 (using 7-bit precision). ...
float asSignedFloat() const noexcept
Retrieves the current value mapped to a float between -1.0f and 1.0f.
int as14BitInt() const noexcept
Retrieves the current value as an integer between 0 and 16383.
This is a base class for classes that perform a unit test.
int as7BitInt() const noexcept
Retrieves the current value as an integer between 0 and 127.
static MPEValue centreValue() noexcept
Constructs an MPEValue corresponding to the centre value.
static MPEValue maxValue() noexcept
Constructs an MPEValue corresponding to the maximum value.
bool operator!=(const MPEValue &other) const noexcept
Returns true if two values are not equal.
float asUnsignedFloat() const noexcept
Retrieves the current value mapped to a float between 0.0f and 1.0f.
static MPEValue from14BitInt(int value) noexcept
Constructs an MPEValue from an integer between 0 and 16383 (using 14-bit precision).
This class represents a single value for any of the MPE dimensions of control.
static MPEValue minValue() noexcept
Constructs an MPEValue corresponding to the minimum value.