93 if (lowerZone.isActive())
95 lowerZone.perNotePitchbendRange,
96 lowerZone.masterPitchbendRange),
100 if (upperZone.isActive())
102 upperZone.perNotePitchbendRange,
103 upperZone.masterPitchbendRange),
114 class MPEMessagesTests :
public UnitTest 118 :
UnitTest (
"MPEMessages class", UnitTestCategories::midi)
121 void runTest()
override 123 beginTest (
"add zone");
128 const uint8 expectedBytes[] =
130 0xb0, 0x64, 0x06, 0xb0, 0x65, 0x00, 0xb0, 0x06, 0x07,
131 0xb1, 0x64, 0x00, 0xb1, 0x65, 0x00, 0xb1, 0x06, 0x30,
132 0xb0, 0x64, 0x00, 0xb0, 0x65, 0x00, 0xb0, 0x06, 0x02
135 testMidiBuffer (buffer, expectedBytes,
sizeof (expectedBytes));
140 const uint8 expectedBytes[] =
142 0xbf, 0x64, 0x06, 0xbf, 0x65, 0x00, 0xbf, 0x06, 0x05,
143 0xbe, 0x64, 0x00, 0xbe, 0x65, 0x00, 0xbe, 0x06, 0x60,
144 0xbf, 0x64, 0x00, 0xbf, 0x65, 0x00, 0xbf, 0x06, 0x00
147 testMidiBuffer (buffer, expectedBytes,
sizeof (expectedBytes));
151 beginTest (
"set per-note pitchbend range");
155 const uint8 expectedBytes[] = { 0xb1, 0x64, 0x00, 0xb1, 0x65, 0x00, 0xb1, 0x06, 0x60 };
157 testMidiBuffer (buffer, expectedBytes,
sizeof (expectedBytes));
161 beginTest (
"set master pitchbend range");
165 const uint8 expectedBytes[] = { 0xbf, 0x64, 0x00, 0xbf, 0x65, 0x00, 0xbf, 0x06, 0x3c };
167 testMidiBuffer (buffer, expectedBytes,
sizeof (expectedBytes));
170 beginTest (
"clear all zones");
174 const uint8 expectedBytes[] = { 0xb0, 0x64, 0x06, 0xb0, 0x65, 0x00, 0xb0, 0x06, 0x00,
175 0xbf, 0x64, 0x06, 0xbf, 0x65, 0x00, 0xbf, 0x06, 0x00
178 testMidiBuffer (buffer, expectedBytes,
sizeof (expectedBytes));
181 beginTest (
"set complete state");
190 const uint8 expectedBytes[] = {
191 0xb0, 0x64, 0x06, 0xb0, 0x65, 0x00, 0xb0, 0x06, 0x00,
192 0xbf, 0x64, 0x06, 0xbf, 0x65, 0x00, 0xbf, 0x06, 0x00,
193 0xb0, 0x64, 0x06, 0xb0, 0x65, 0x00, 0xb0, 0x06, 0x07,
194 0xb1, 0x64, 0x00, 0xb1, 0x65, 0x00, 0xb1, 0x06, 0x60,
195 0xb0, 0x64, 0x00, 0xb0, 0x65, 0x00, 0xb0, 0x06, 0x00,
196 0xbf, 0x64, 0x06, 0xbf, 0x65, 0x00, 0xbf, 0x06, 0x07,
197 0xbe, 0x64, 0x00, 0xbe, 0x65, 0x00, 0xbe, 0x06, 0x30,
198 0xbf, 0x64, 0x00, 0xbf, 0x65, 0x00, 0xbf, 0x06, 0x02
201 testMidiBuffer (buffer, expectedBytes,
sizeof (expectedBytes));
207 void testMidiBuffer (
MidiBuffer& buffer,
const uint8* expectedBytes,
int expectedBytesSize)
209 uint8 actualBytes[128] = { 0 };
210 extractRawBinaryData (buffer, actualBytes,
sizeof (actualBytes));
212 expectEquals (std::memcmp (actualBytes, expectedBytes, (std::size_t) expectedBytesSize), 0);
216 void extractRawBinaryData (
const MidiBuffer& midiBuffer,
const uint8* bufferToCopyTo, std::size_t maxBytes)
226 std::size_t dataSize = (std::size_t) midiMessage.
getRawDataSize();
228 if (pos + dataSize > maxBytes)
231 std::memcpy ((
void*) (bufferToCopyTo + pos), data, dataSize);
237 static MPEMessagesTests MPEMessagesUnitTests;
static MidiBuffer generate(MidiRPNMessage message)
bool getNextEvent(MidiMessage &result, int &samplePosition) noexcept
static MidiBuffer setUpperZonePerNotePitchbendRange(int perNotePitchbendRange=48)
int getRawDataSize() const noexcept
void setUpperZone(int numMemberChannels=0, int perNotePitchbendRange=48, int masterPitchbendRange=2) noexcept
static MidiBuffer setUpperZone(int numMemberChannels=0, int perNotePitchbendRange=48, int masterPitchbendRange=2)
static MidiBuffer setLowerZone(int numMemberChannels=0, int perNotePitchbendRange=48, int masterPitchbendRange=2)
const Zone getUpperZone() const noexcept
static MidiBuffer clearAllZones()
const Zone getLowerZone() const noexcept
static MidiBuffer setLowerZonePerNotePitchbendRange(int perNotePitchbendRange=48)
static MidiBuffer clearUpperZone()
static MidiBuffer clearLowerZone()
static MidiBuffer setLowerZoneMasterPitchbendRange(int masterPitchbendRange=2)
const uint8 * getRawData() const noexcept
static MidiBuffer setZoneLayout(MPEZoneLayout layout)
static MidiBuffer setUpperZoneMasterPitchbendRange(int masterPitchbendRange=2)
void addEvents(const MidiBuffer &otherBuffer, int startSample, int numSamples, int sampleDeltaToAdd)
static const int zoneLayoutMessagesRpnNumber
void setLowerZone(int numMemberChannels=0, int perNotePitchbendRange=48, int masterPitchbendRange=2) noexcept