93 if (lowerZone.isActive())
95 lowerZone.perNotePitchbendRange,
96 lowerZone.masterPitchbendRange),
100 if (upperZone.isActive())
102 upperZone.perNotePitchbendRange,
103 upperZone.masterPitchbendRange),
114class MPEMessagesTests final :
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");
183 MPEZoneLayout layout;
185 layout.setLowerZone (7, 96, 0);
186 layout.setUpperZone (7);
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)
220 for (
const auto metadata : midiBuffer)
222 const uint8* data = metadata.data;
223 std::size_t dataSize = (std::size_t) metadata.numBytes;
225 if (pos + dataSize > maxBytes)
228 std::memcpy ((
void*) (bufferToCopyTo + pos), data, dataSize);
234static MPEMessagesTests MPEMessagesUnitTests;
static MidiBuffer setUpperZone(int numMemberChannels=0, int perNotePitchbendRange=48, int masterPitchbendRange=2)
static MidiBuffer setUpperZoneMasterPitchbendRange(int masterPitchbendRange=2)
static MidiBuffer clearAllZones()
static MidiBuffer setZoneLayout(MPEZoneLayout layout)
static MidiBuffer setLowerZone(int numMemberChannels=0, int perNotePitchbendRange=48, int masterPitchbendRange=2)
static MidiBuffer clearUpperZone()
static MidiBuffer clearLowerZone()
static const int zoneLayoutMessagesRpnNumber
static MidiBuffer setLowerZoneMasterPitchbendRange(int masterPitchbendRange=2)
static MidiBuffer setLowerZonePerNotePitchbendRange(int perNotePitchbendRange=48)
static MidiBuffer setUpperZonePerNotePitchbendRange(int perNotePitchbendRange=48)
MPEZone getUpperZone() const noexcept
MPEZone getLowerZone() const noexcept
void addEvents(const MidiBuffer &otherBuffer, int startSample, int numSamples, int sampleDeltaToAdd)
static MidiBuffer generate(MidiRPNMessage message)