mirror of
https://github.com/juce-framework/JUCE.git
synced 2026-01-10 23:44:24 +00:00
MIDI: Switch BytestreamMidiView for BytesOnGroup in a few places
This commit is contained in:
parent
2dd69dd0ad
commit
fa1f8ed54e
10 changed files with 50 additions and 49 deletions
|
|
@ -85,7 +85,7 @@ struct Conversion
|
|||
`callback` is a function which accepts a single View argument.
|
||||
*/
|
||||
template <typename PacketCallbackFunction>
|
||||
static void toMidi1 (const BytestreamMidiView& m, PacketCallbackFunction&& callback)
|
||||
static void toMidi1 (const BytesOnGroup& m, PacketCallbackFunction&& callback)
|
||||
{
|
||||
const auto size = m.bytes.size();
|
||||
|
||||
|
|
|
|||
|
|
@ -44,7 +44,7 @@ namespace juce::universal_midi_packets
|
|||
struct ToUMP1Converter
|
||||
{
|
||||
template <typename Fn>
|
||||
void convert (const BytestreamMidiView& m, Fn&& fn)
|
||||
void convert (const BytesOnGroup& m, Fn&& fn)
|
||||
{
|
||||
Conversion::toMidi1 (m, std::forward<Fn> (fn));
|
||||
}
|
||||
|
|
@ -65,7 +65,7 @@ namespace juce::universal_midi_packets
|
|||
struct ToUMP2Converter
|
||||
{
|
||||
template <typename Fn>
|
||||
void convert (const BytestreamMidiView& m, Fn&& fn)
|
||||
void convert (const BytesOnGroup& m, Fn&& fn)
|
||||
{
|
||||
Conversion::toMidi1 (m, [&] (const View& v)
|
||||
{
|
||||
|
|
@ -116,7 +116,7 @@ namespace juce::universal_midi_packets
|
|||
}
|
||||
|
||||
template <typename Converter, typename Fn>
|
||||
static void convertImpl (Converter& converter, const BytestreamMidiView& m, Fn&& fn)
|
||||
static void convertImpl (Converter& converter, const BytesOnGroup& m, Fn&& fn)
|
||||
{
|
||||
converter.convert (m, std::forward<Fn> (fn));
|
||||
}
|
||||
|
|
@ -137,7 +137,7 @@ namespace juce::universal_midi_packets
|
|||
}
|
||||
|
||||
template <typename Fn>
|
||||
void convert (const BytestreamMidiView& m, Fn&& fn)
|
||||
void convert (const BytesOnGroup& m, Fn&& fn)
|
||||
{
|
||||
visit (*this, m, std::forward<Fn> (fn));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -123,7 +123,7 @@ public:
|
|||
|
||||
void handleIncomingMidiMessage (void*, const MidiMessage& msg) const
|
||||
{
|
||||
Conversion::toMidi1 (BytestreamMidiView (&msg), [&] (const View& view)
|
||||
Conversion::toMidi1 ({ 0, msg.asSpan() }, [&] (const View& view)
|
||||
{
|
||||
dispatch.converter.convert (view, *callbackPtr);
|
||||
});
|
||||
|
|
|
|||
|
|
@ -260,7 +260,7 @@ public:
|
|||
switch (kind)
|
||||
{
|
||||
case SysexExtractorCallbackKind::notSysex:
|
||||
callback (BytestreamMidiView (bytes, time));
|
||||
callback (BytesOnGroup { 0, bytes }, time);
|
||||
return;
|
||||
|
||||
case SysexExtractorCallbackKind::ongoingSysex:
|
||||
|
|
@ -282,7 +282,7 @@ public:
|
|||
// If this is not true, then the sysex message was truncated somehow and we
|
||||
// probably shouldn't allow it to propagate
|
||||
if (pendingSysExData.back() == std::byte { 0xf7 })
|
||||
callback (BytestreamMidiView (Span<const std::byte> (pendingSysExData), pendingSysExTime));
|
||||
callback (BytesOnGroup { 0, Span<const std::byte> (pendingSysExData) }, pendingSysExTime);
|
||||
|
||||
pendingSysExData.clear();
|
||||
|
||||
|
|
|
|||
|
|
@ -42,6 +42,14 @@ constexpr uint64_t operator""_u64 (unsigned long long int i) { return static_cas
|
|||
|
||||
class UniversalMidiPacketTests final : public UnitTest
|
||||
{
|
||||
static auto makeMidiMessageAppender (MidiBuffer& b)
|
||||
{
|
||||
return [&b] (const BytesOnGroup& x, double time)
|
||||
{
|
||||
b.addEvent (makeMidiMessage (x, time), (int) time);
|
||||
};
|
||||
}
|
||||
|
||||
public:
|
||||
UniversalMidiPacketTests()
|
||||
: UnitTest ("Universal MIDI Packet", UnitTestCategories::midi)
|
||||
|
|
@ -67,9 +75,9 @@ public:
|
|||
? Utils::MessageKind::commonRealtime
|
||||
: Utils::MessageKind::channelVoice1));
|
||||
|
||||
translator.dispatch (View { packets.data() }, 0, [&] (const BytestreamMidiView& roundTripped)
|
||||
translator.dispatch (View { packets.data() }, 0, [&] (const BytesOnGroup& roundTripped, double time)
|
||||
{
|
||||
expect (equal (m, roundTripped.getMessage()));
|
||||
expect (equal (m, makeMidiMessage (roundTripped, time)));
|
||||
});
|
||||
});
|
||||
}
|
||||
|
|
@ -141,13 +149,10 @@ public:
|
|||
const auto checkRoundTrip = [&] (const MidiBuffer& expected)
|
||||
{
|
||||
for (const auto meta : expected)
|
||||
Conversion::toMidi1 (ump::BytestreamMidiView (meta), [&] (const auto p) { packets.add (p); });
|
||||
Conversion::toMidi1 ({ 0, meta.asSpan() }, [&] (const auto p) { packets.add (p); });
|
||||
|
||||
MidiBuffer output;
|
||||
converter.dispatch (packets, 0, [&] (const BytestreamMidiView& roundTripped)
|
||||
{
|
||||
output.addEvent (roundTripped.getMessage(), int (roundTripped.timestamp));
|
||||
});
|
||||
converter.dispatch (packets, 0, makeMidiMessageAppender (output));
|
||||
packets.clear();
|
||||
|
||||
expect (equal (expected, output));
|
||||
|
|
@ -184,10 +189,7 @@ public:
|
|||
}
|
||||
|
||||
MidiBuffer output;
|
||||
converter.dispatch (modifiedPackets, 0, [&] (const BytestreamMidiView& roundTripped)
|
||||
{
|
||||
output.addEvent (roundTripped.getMessage(), int (roundTripped.timestamp));
|
||||
});
|
||||
converter.dispatch (modifiedPackets, 0, makeMidiMessageAppender (output));
|
||||
|
||||
// All Utility messages should have been ignored
|
||||
expect (output.getNumEvents() == 1);
|
||||
|
|
@ -219,10 +221,7 @@ public:
|
|||
}
|
||||
|
||||
MidiBuffer output;
|
||||
converter.dispatch (modifiedPackets, 0, [&] (const BytestreamMidiView& roundTripped)
|
||||
{
|
||||
output.addEvent (roundTripped.getMessage(), int (roundTripped.timestamp));
|
||||
});
|
||||
converter.dispatch (modifiedPackets, 0, makeMidiMessageAppender (output));
|
||||
|
||||
const auto numOutputs = output.getNumEvents();
|
||||
const auto numInputs = realtimeMessages.getNumEvents();
|
||||
|
|
@ -283,10 +282,7 @@ public:
|
|||
}
|
||||
|
||||
MidiBuffer output;
|
||||
converter.dispatch (modifiedPackets, 0, [&] (const BytestreamMidiView& roundTripped)
|
||||
{
|
||||
output.addEvent (roundTripped.getMessage(), int (roundTripped.timestamp));
|
||||
});
|
||||
converter.dispatch (modifiedPackets, 0, makeMidiMessageAppender (output));
|
||||
|
||||
const auto numOutputs = output.getNumEvents();
|
||||
const auto numInputs = realtimeMessages.getNumEvents();
|
||||
|
|
@ -329,7 +325,7 @@ public:
|
|||
Packets p;
|
||||
|
||||
for (const auto meta : noteOn)
|
||||
Conversion::toMidi1 (ump::BytestreamMidiView (meta), [&] (const auto packet) { p.add (packet); });
|
||||
Conversion::toMidi1 ({ 0, meta.asSpan() }, [&] (const auto packet) { p.add (packet); });
|
||||
|
||||
return p;
|
||||
}();
|
||||
|
|
@ -363,10 +359,7 @@ public:
|
|||
|
||||
const auto pushToOutput = [&] (const Packets& p)
|
||||
{
|
||||
converter.dispatch (p, 0, [&] (const BytestreamMidiView& roundTripped)
|
||||
{
|
||||
output.addEvent (roundTripped.getMessage(), int (roundTripped.timestamp));
|
||||
});
|
||||
converter.dispatch (p, 0, makeMidiMessageAppender (output));
|
||||
};
|
||||
|
||||
pushToOutput (modifiedPackets);
|
||||
|
|
@ -866,7 +859,7 @@ private:
|
|||
static Packets toMidi1 (const MidiMessage& msg)
|
||||
{
|
||||
Packets packets;
|
||||
Conversion::toMidi1 (ump::BytestreamMidiView (&msg), [&] (const auto p) { packets.add (p); });
|
||||
Conversion::toMidi1 ({ 0, msg.asSpan() }, [&] (const auto p) { packets.add (p); });
|
||||
return packets;
|
||||
}
|
||||
|
||||
|
|
@ -996,6 +989,11 @@ private:
|
|||
{
|
||||
return a.data == b.data;
|
||||
}
|
||||
|
||||
static MidiMessage makeMidiMessage (const BytesOnGroup& b, double time)
|
||||
{
|
||||
return { b.bytes.data(), (int) b.bytes.size(), time };
|
||||
}
|
||||
};
|
||||
|
||||
static UniversalMidiPacketTests universalMidiPacketTests;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue