2#include <Process/Dataflow/MidiSysexArena.hpp>
4#include <Vst/vst-compat.hpp>
6#include <libremidi/cmidi2.hpp>
7#include <libremidi/ump.hpp>
24inline VstEvent* toVstEvent(
25 const libremidi::ump& mess, int32_t deltaFrames, VstMidiEvent& midi,
27 Process::MidiSysexArena::stream& stream)
noexcept
29 switch(mess.get_type())
31 case libremidi::midi2::message_type::SYSEX7: {
32 const auto bytes = arena.feed(stream, mess);
33 if(bytes.empty() || !sysex)
36 std::memset(sysex, 0,
sizeof(VstMidiSysexEvent));
37 sysex->type = kVstSysExType;
38 sysex->byteSize =
sizeof(VstMidiSysexEvent);
39 sysex->deltaFrames = deltaFrames;
40 sysex->dumpBytes = int32_t(bytes.size());
41 sysex->sysexDump =
reinterpret_cast<char*
>(
const_cast<uint8_t*
>(bytes.data()));
42 return reinterpret_cast<VstEvent*
>(sysex);
44 case libremidi::midi2::message_type::SYSEX8_MDS:
47 std::memset(&midi, 0,
sizeof(VstMidiEvent));
48 midi.type = kVstMidiType;
49 midi.byteSize =
sizeof(VstMidiEvent);
50 midi.deltaFrames = deltaFrames;
51 midi.flags = kVstMidiEventIsRealtime;
52 if(cmidi2_convert_single_ump_to_midi1(
53 (uint8_t*)midi.midiData, 4, (cmidi2_ump*)mess.data)
56 return reinterpret_cast<VstEvent*
>(&midi);
Definition MidiSysexArena.hpp:30