Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Add support for sending SysEx messages
  • Loading branch information
x42 committed Jul 31, 2019
1 parent c6a66b4 commit fcb0735
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 0 deletions.
15 changes: 15 additions & 0 deletions include/vestige.h
Expand Up @@ -136,6 +136,7 @@

#define kVstLangEnglish 1
#define kVstMidiType 1
#define kVstSysExType 6

struct RemoteVstPlugin;

Expand Down Expand Up @@ -184,6 +185,20 @@ struct _VstMidiEvent

typedef struct _VstMidiEvent VstMidiEvent;

struct _VstMidiSysExEvent
{
int type;
int byteSize;
int deltaFrames;
int flags;
int dumpBytes;
void* reserved1;
char* sysexDump;
void* reserved2;
};

typedef struct _VstMidiSysExEvent VstMidiSysExEvent;


struct _VstEvent
{
Expand Down
17 changes: 17 additions & 0 deletions src/lv2vst.cc
Expand Up @@ -846,6 +846,23 @@ void LV2Vst::process (float** inputs, float** outputs, int32_t n_samples)
memcpy (mev.midiData, (const uint8_t*)(ev+1), ev->body.size * sizeof (uint8_t));
send_events_to_host (&vev);
}
else if (ev->body.type == _uri.midi_MidiEvent && ev->body.size > 4) {
const uint8_t* data = (const uint8_t*)(ev+1);
if (data[0] == 0xf0 && data[1] == 0x7f && data[ev->body.size -1] == 0xf7) {
VstEvents vev;
vev.numEvents = 1;
VstMidiSysExEvent sev;
memset(&sev, 0, sizeof(VstMidiSysExEvent));
vev.events[0] = (VstEvent*) &sev;
sev.type = kVstSysExType;
sev.byteSize = sizeof (VstMidiSysExEvent);
sev.deltaFrames = ev->time.frames;
sev.dumpBytes = ev->body.size;
sev.sysexDump = (char*)data;
send_events_to_host (&vev);
}
}

ev = (LV2_Atom_Event const*) /* lv2_atom_sequence_next() */
((const uint8_t*)ev + sizeof (LV2_Atom_Event) + ((ev->body.size + 7) & ~7));
}
Expand Down

0 comments on commit fcb0735

Please sign in to comment.