1
0
Fork 0
mirror of https://github.com/juce-framework/JUCE.git synced 2026-01-10 23:44:24 +00:00

VST3: Include header/footer sysex bytes when converting with DataEvent

This commit is contained in:
reuk 2023-11-20 15:17:03 +00:00
parent e2ecbde236
commit 123576bb2c
No known key found for this signature in database
GPG key ID: FCB43929F012EE5C

View file

@ -1490,12 +1490,14 @@ private:
return e;
}
static Steinberg::Vst::Event createSysExEvent (const MidiMessage& msg, const uint8* midiEventData) noexcept
static Steinberg::Vst::Event createSysExEvent (const MidiMessage& msg, const uint8* data) noexcept
{
jassert (msg.isSysEx());
Steinberg::Vst::Event e{};
e.type = Steinberg::Vst::Event::kDataEvent;
e.data.bytes = midiEventData + 1;
e.data.size = (uint32) msg.getSysExDataSize();
e.data.bytes = data;
e.data.size = (uint32) msg.getRawDataSize();
e.data.type = Steinberg::Vst::DataEvent::kMidiSysEx;
return e;
}
@ -1649,6 +1651,28 @@ private:
}
}
static Optional<MidiMessage> toMidiMessage (const Steinberg::Vst::DataEvent& e)
{
if (e.type != Steinberg::Vst::DataEvent::kMidiSysEx || e.size < 2)
{
// Only sysex data messages can be converted to MIDI
jassertfalse;
return {};
}
const auto header = e.bytes[0];
const auto footer = e.bytes[e.size - 1];
if (header != 0xf0 || footer != 0xf7)
{
// The sysex header/footer bytes are missing
jassertfalse;
return {};
}
return MidiMessage::createSysExMessage (e.bytes + 1, (int) e.size - 2);
}
static Optional<MidiMessage> toMidiMessage (const Steinberg::Vst::Event& e)
{
switch (e.type)
@ -1669,7 +1693,7 @@ private:
(Steinberg::uint8) denormaliseToMidiValue (e.polyPressure.pressure));
case Steinberg::Vst::Event::kDataEvent:
return MidiMessage::createSysExMessage (e.data.bytes, (int) e.data.size);
return toMidiMessage (e.data);
case Steinberg::Vst::Event::kLegacyMIDICCOutEvent:
return toMidiMessage (e.midiCCOut);