93 if (lowerZone.isActive())
94 buffer.addEvents (
setLowerZone (lowerZone.numMemberChannels,
95 lowerZone.perNotePitchbendRange,
96 lowerZone.masterPitchbendRange),
100 if (upperZone.isActive())
101 buffer.addEvents (
setUpperZone (upperZone.numMemberChannels,
102 upperZone.perNotePitchbendRange,
103 upperZone.masterPitchbendRange),
114class MPEMessagesTests :
public UnitTest
121 void runTest()
override
123 beginTest (
"add zone");
126 MidiBuffer buffer = MPEMessages::setLowerZone (7);
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));
138 MidiBuffer
buffer = MPEMessages::setUpperZone (5, 96, 0);
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");
153 MidiBuffer
buffer = MPEMessages::setLowerZonePerNotePitchbendRange (96);
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");
163 MidiBuffer
buffer = MPEMessages::setUpperZoneMasterPitchbendRange (60);
165 const uint8 expectedBytes[] = { 0xbf, 0x64, 0x00, 0xbf, 0x65, 0x00, 0xbf, 0x06, 0x3c };
167 testMidiBuffer (buffer, expectedBytes,
sizeof (expectedBytes));
170 beginTest (
"clear all zones");
172 MidiBuffer
buffer = MPEMessages::clearAllZones();
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);
188 MidiBuffer
buffer = MPEMessages::setZoneLayout (layout);
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)
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;
uint8_t uint8
Definition basics.h:86
Definition MidiBuffer.h:48
static MidiBuffer setUpperZone(int numMemberChannels=0, int perNotePitchbendRange=48, int masterPitchbendRange=2)
Definition juce_MPEMessages.cpp:36
static MidiBuffer setUpperZoneMasterPitchbendRange(int masterPitchbendRange=2)
Definition juce_MPEMessages.cpp:61
static MidiBuffer clearAllZones()
Definition juce_MPEMessages.cpp:76
static MidiBuffer setZoneLayout(MPEZoneLayout layout)
Definition juce_MPEMessages.cpp:86
static MidiBuffer setLowerZone(int numMemberChannels=0, int perNotePitchbendRange=48, int masterPitchbendRange=2)
Definition juce_MPEMessages.cpp:26
static MidiBuffer clearUpperZone()
Definition juce_MPEMessages.cpp:71
static MidiBuffer clearLowerZone()
Definition juce_MPEMessages.cpp:66
static const int zoneLayoutMessagesRpnNumber
Definition juce_MPEMessages.h:113
static MidiBuffer setLowerZoneMasterPitchbendRange(int masterPitchbendRange=2)
Definition juce_MPEMessages.cpp:56
static MidiBuffer setLowerZonePerNotePitchbendRange(int perNotePitchbendRange=48)
Definition juce_MPEMessages.cpp:46
static MidiBuffer setUpperZonePerNotePitchbendRange(int perNotePitchbendRange=48)
Definition juce_MPEMessages.cpp:51
Definition juce_MPEZoneLayout.h:121
MPEZone getUpperZone() const noexcept
Definition juce_MPEZoneLayout.h:144
MPEZone getLowerZone() const noexcept
Definition juce_MPEZoneLayout.h:141
Definition juce_MidiBuffer.h:145
static MidiBuffer generate(MidiRPNMessage message)
Definition juce_MidiRPN.cpp:116
Definition juce_UnitTest.h:70
JSAMPIMAGE data
Definition jpeglib.h:945
Definition juce_UnitTestCategories.h:27
JOCTET * buffer
Definition juce_JPEGLoader.cpp:302
Definition carla_juce.cpp:31