static void midijoin_process(NativePluginHandle handle, float** inBuffer, float** outBuffer, uint32_t frames, const NativeMidiEvent* midiEvents, uint32_t midiEventCount) { const NativeHostDescriptor* const host = handlePtr->host; NativeMidiEvent tmpEvent; for (uint32_t i=0; i < midiEventCount; ++i) { const NativeMidiEvent* const midiEvent = &midiEvents[i]; if (midiEvent->port >= MAX_MIDI_CHANNELS) continue; const uint8_t status = (uint8_t)MIDI_GET_STATUS_FROM_DATA(midiEvent->data); tmpEvent.port = 0; tmpEvent.time = midiEvent->time; tmpEvent.data[0] = (uint8_t)(status | (midiEvent->port & MIDI_CHANNEL_BIT)); tmpEvent.data[1] = midiEvent->data[1]; tmpEvent.data[2] = midiEvent->data[2]; tmpEvent.data[3] = midiEvent->data[3]; tmpEvent.size = midiEvent->size; host->write_midi_event(host->handle, &tmpEvent); } return; // unused (void)inBuffer; (void)outBuffer; (void)frames; }
static void midiTranspose_process(PluginHandle handle, float** inBuffer, float** outBuffer, uint32_t frames, uint32_t midiEventCount, const MidiEvent* midiEvents) { HostDescriptor* const host = handlePtr->host; const int octaves = handlePtr->octaves; MidiEvent tmpEvent; for (uint32_t i=0; i < midiEventCount; ++i) { const MidiEvent* const midiEvent = &midiEvents[i]; const uint8_t status = MIDI_GET_STATUS_FROM_DATA(midiEvent->data); if (status == MIDI_STATUS_NOTE_OFF || status == MIDI_STATUS_NOTE_ON) { int oldnote = midiEvent->data[1]; int newnote = oldnote + octaves*12; if (newnote < 0 || newnote >= MAX_MIDI_NOTE) continue; tmpEvent.port = midiEvent->port; tmpEvent.time = midiEvent->time; tmpEvent.data[0] = midiEvent->data[0]; tmpEvent.data[1] = newnote; tmpEvent.data[2] = midiEvent->data[2]; tmpEvent.data[3] = midiEvent->data[3]; tmpEvent.size = midiEvent->size; host->write_midi_event(host->handle, &tmpEvent); } else host->write_midi_event(host->handle, midiEvent); } return; // unused (void)inBuffer; (void)outBuffer; (void)frames; }