Browse Source

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

develop
reuk 1 year ago
parent
commit
123576bb2c
No known key found for this signature in database GPG Key ID: FCB43929F012EE5C
1 changed files with 28 additions and 4 deletions
  1. +28
    -4
      modules/juce_audio_processors/format_types/juce_VST3Common.h

+ 28
- 4
modules/juce_audio_processors/format_types/juce_VST3Common.h 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);


Loading…
Cancel
Save