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:
parent
e2ecbde236
commit
123576bb2c
1 changed files with 28 additions and 4 deletions
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue