25 #ifdef __aeffect__ // NB: this must come first, *before* the header-guard. 27 #ifndef JUCE_VSTMIDIEVENTLIST_H_INCLUDED 28 #define JUCE_VSTMIDIEVENTLIST_H_INCLUDED 36 class VSTMidiEventList
41 : numEventsUsed (0), numEventsAllocated (0)
55 if (events !=
nullptr)
56 events->numEvents = 0;
59 void addEvent (
const void*
const midiData,
const int numBytes,
const int frameOffset)
61 ensureSize (numEventsUsed + 1);
63 VstMidiEvent*
const e = (VstMidiEvent*) (events->events [numEventsUsed]);
64 events->numEvents = ++numEventsUsed;
68 if (e->type == kVstSysExType)
70 delete[] (((VstMidiSysexEvent*) e)->sysexDump);
71 e->type = kVstMidiType;
72 e->byteSize =
sizeof (VstMidiEvent);
76 e->noteOffVelocity = 0;
79 e->deltaFrames = frameOffset;
80 memcpy (e->midiData, midiData, (
size_t) numBytes);
84 VstMidiSysexEvent*
const se = (VstMidiSysexEvent*) e;
86 if (se->type == kVstSysExType)
87 delete[] se->sysexDump;
89 se->sysexDump =
new char [numBytes];
90 memcpy (se->sysexDump, midiData, (
size_t) numBytes);
92 se->type = kVstSysExType;
93 se->byteSize =
sizeof (VstMidiSysexEvent);
94 se->deltaFrames = frameOffset;
96 se->dumpBytes = numBytes;
105 static void addEventsToMidiBuffer (
const VstEvents* events,
MidiBuffer& dest)
107 for (
int i = 0; i < events->numEvents; ++i)
109 const VstEvent*
const e = events->events[i];
113 if (e->type == kVstMidiType)
118 else if (e->type == kVstSysExType)
121 (
int) ((
const VstMidiSysexEvent*) e)->dumpBytes,
129 void ensureSize (
int numEventsNeeded)
131 if (numEventsNeeded > numEventsAllocated)
133 numEventsNeeded = (numEventsNeeded + 32) & ~31;
135 const size_t size = 20 +
sizeof (VstEvent*) * (
size_t) numEventsNeeded;
137 if (events ==
nullptr)
138 events.calloc (size, 1);
140 events.realloc (size, 1);
142 for (
int i = numEventsAllocated; i < numEventsNeeded; ++i)
143 events->events[i] = allocateVSTEvent();
145 numEventsAllocated = numEventsNeeded;
151 if (events !=
nullptr)
153 for (
int i = numEventsAllocated; --i >= 0;)
154 freeVSTEvent (events->events[i]);
158 numEventsAllocated = 0;
166 int numEventsUsed, numEventsAllocated;
168 static VstEvent* allocateVSTEvent()
170 VstEvent*
const e = (VstEvent*) std::calloc (1,
sizeof (VstMidiEvent) >
sizeof (VstMidiSysexEvent) ?
sizeof (VstMidiEvent)
171 :
sizeof (VstMidiSysexEvent));
172 e->type = kVstMidiType;
173 e->byteSize =
sizeof (VstMidiEvent);
177 static void freeVSTEvent (VstEvent* e)
179 if (e->type == kVstSysExType)
180 delete[] (((VstMidiSysexEvent*) e)->sysexDump);
186 #endif // JUCE_VSTMIDIEVENTLIST_H_INCLUDED 187 #endif // JUCE_VSTMIDIEVENTLIST_H_INCLUDED void addEvent(const MidiMessage &midiMessage, int sampleNumber)
Definition: juce_MidiBuffer.cpp:110
Definition: juce_HeapBlock.h:90
unsigned char uint8
Definition: juce_core.h:44
Definition: juce_MidiBuffer.h:43