25namespace juce::universal_midi_packets
38 void reset() { currentPacketLen = 0; }
46 template <
typename PacketCallbackFunction>
47 void dispatch (
const uint32_t* begin,
50 PacketCallbackFunction&& callback)
54 nextPacket[currentPacketLen++] = word;
56 if (currentPacketLen == Utils::getNumWordsForMessageType (nextPacket.front()))
58 callback (View (nextPacket.data()), timeStamp);
66 size_t currentPacketLen = 0;
85 explicit BytestreamToUMPDispatcher (PacketProtocol pp,
int storageSize)
86 : concatenator (storageSize),
103 template <
typename PacketCallbackFunction>
104 void dispatch (
const uint8_t* begin,
107 PacketCallbackFunction&& callback)
112 #define JUCE_MINGW_HIDDEN_VISIBILITY __attribute__ ((visibility ("hidden")))
114 #define JUCE_MINGW_HIDDEN_VISIBILITY
117 struct JUCE_MINGW_HIDDEN_VISIBILITY Callback
119 Callback (BytestreamToUMPDispatcher& d, CallbackPtr c)
120 : dispatch (d), callbackPtr (c) {}
122 void handleIncomingMidiMessage (
void*,
const MidiMessage& msg)
const
124 Conversion::toMidi1 (BytestreamMidiView (&msg), [&] (
const View& view)
126 dispatch.converter.convert (view, *callbackPtr);
130 void handlePartialSysexMessage (
void*,
const uint8_t*,
int,
double)
const {}
132 BytestreamToUMPDispatcher& dispatch;
133 CallbackPtr callbackPtr =
nullptr;
136 #undef JUCE_MINGW_HIDDEN_VISIBILITY
138 Callback inputCallback { *
this, &callback };
139 concatenator.pushMidiData (begin,
int (end - begin), timestamp, (
void*)
nullptr, inputCallback);
143 MidiDataConcatenator concatenator;
144 GenericUMPConverter converter;
162 explicit ToBytestreamDispatcher (
int storageSize)
163 : converter (storageSize) {}
180 template <
typename BytestreamMessageCallback>
181 void dispatch (
const uint32_t* begin,
184 BytestreamMessageCallback&& callback)
186 dispatcher.dispatch (begin, end, timestamp, [&] (
const View& view,
double time)
188 converter.convert (view, time, callback);
193 Dispatcher dispatcher;
194 ToBytestreamConverter converter;
Type unalignedPointerCast(void *ptr) noexcept
Casts a pointer to another type via void*, which suppresses the cast-align warning which sometimes ar...