| @@ -870,11 +870,20 @@ public: | |||||
| { | { | ||||
| const clap_event_header_t* const event = inputEvents->get(inputEvents, i); | const clap_event_header_t* const event = inputEvents->get(inputEvents, i); | ||||
| // event->time | |||||
| switch (event->type) | switch (event->type) | ||||
| { | { | ||||
| case CLAP_EVENT_NOTE_ON: | case CLAP_EVENT_NOTE_ON: | ||||
| #if DISTRHO_PLUGIN_WANT_MIDI_INPUT | |||||
| // BUG: even though we only report CLAP_NOTE_DIALECT_MIDI as supported, Bitwig sends us this anyway | |||||
| addNoteEvent(static_cast<const clap_event_note_t*>(static_cast<const void*>(event)), true); | |||||
| #endif | |||||
| break; | |||||
| case CLAP_EVENT_NOTE_OFF: | case CLAP_EVENT_NOTE_OFF: | ||||
| #if DISTRHO_PLUGIN_WANT_MIDI_INPUT | |||||
| // BUG: even though we only report CLAP_NOTE_DIALECT_MIDI as supported, Bitwig sends us this anyway | |||||
| addNoteEvent(static_cast<const clap_event_note_t*>(static_cast<const void*>(event)), false); | |||||
| #endif | |||||
| break; | |||||
| case CLAP_EVENT_NOTE_CHOKE: | case CLAP_EVENT_NOTE_CHOKE: | ||||
| case CLAP_EVENT_NOTE_END: | case CLAP_EVENT_NOTE_END: | ||||
| case CLAP_EVENT_NOTE_EXPRESSION: | case CLAP_EVENT_NOTE_EXPRESSION: | ||||
| @@ -1126,7 +1135,22 @@ public: | |||||
| // ---------------------------------------------------------------------------------------------------------------- | // ---------------------------------------------------------------------------------------------------------------- | ||||
| #if DISTRHO_PLUGIN_WANT_MIDI_INPUT | #if DISTRHO_PLUGIN_WANT_MIDI_INPUT | ||||
| void addMidiEvent(const clap_event_midi_t* const event) | |||||
| void addNoteEvent(const clap_event_note_t* const event, const bool isOn) noexcept | |||||
| { | |||||
| DISTRHO_SAFE_ASSERT_UINT_RETURN(event->port_index == 0, event->port_index,); | |||||
| if (fMidiEventCount == kMaxMidiEvents) | |||||
| return; | |||||
| MidiEvent& midiEvent(fMidiEvents[fMidiEventCount++]); | |||||
| midiEvent.frame = event->header.time; | |||||
| midiEvent.size = 3; | |||||
| midiEvent.data[0] = (isOn ? 0x90 : 0x80) | (event->channel & 0x0F); | |||||
| midiEvent.data[1] = std::max(0, std::min(127, static_cast<int>(event->key))); | |||||
| midiEvent.data[2] = std::max(0, std::min(127, static_cast<int>(event->velocity * 127 + 0.5))); | |||||
| } | |||||
| void addMidiEvent(const clap_event_midi_t* const event) noexcept | |||||
| { | { | ||||
| DISTRHO_SAFE_ASSERT_UINT_RETURN(event->port_index == 0, event->port_index,); | DISTRHO_SAFE_ASSERT_UINT_RETURN(event->port_index == 0, event->port_index,); | ||||