| @@ -3386,6 +3386,7 @@ public: | |||||
| for (uint32_t i=0; i < fEventsOut.count; ++i) | for (uint32_t i=0; i < fEventsOut.count; ++i) | ||||
| { | { | ||||
| uint32_t lastFrame = 0; | |||||
| Lv2EventData& evData(fEventsOut.data[i]); | Lv2EventData& evData(fEventsOut.data[i]); | ||||
| if (evData.type & CARLA_EVENT_DATA_ATOM) | if (evData.type & CARLA_EVENT_DATA_ATOM) | ||||
| @@ -3410,7 +3411,12 @@ public: | |||||
| { | { | ||||
| CARLA_SAFE_ASSERT_CONTINUE(ev->time.frames >= 0); | CARLA_SAFE_ASSERT_CONTINUE(ev->time.frames >= 0); | ||||
| CARLA_SAFE_ASSERT_CONTINUE(ev->body.size < 0xFF); | CARLA_SAFE_ASSERT_CONTINUE(ev->body.size < 0xFF); | ||||
| evData.port->writeMidiEvent(static_cast<uint32_t>(ev->time.frames), static_cast<uint8_t>(ev->body.size), data); | |||||
| uint32_t currentFrame = static_cast<uint32_t>(ev->time.frames); | |||||
| if (currentFrame < lastFrame) | |||||
| currentFrame = lastFrame; | |||||
| evData.port->writeMidiEvent(currentFrame, static_cast<uint8_t>(ev->body.size), data); | |||||
| } | } | ||||
| } | } | ||||
| else //if (ev->body.type == CARLA_URI_MAP_ID_ATOM_BLANK) | else //if (ev->body.type == CARLA_URI_MAP_ID_ATOM_BLANK) | ||||
| @@ -3438,10 +3444,14 @@ public: | |||||
| if (ev == nullptr || data == nullptr) | if (ev == nullptr || data == nullptr) | ||||
| break; | break; | ||||
| uint32_t currentFrame = ev->frames; | |||||
| if (currentFrame < lastFrame) | |||||
| currentFrame = lastFrame; | |||||
| if (ev->type == CARLA_URI_MAP_ID_MIDI_EVENT) | if (ev->type == CARLA_URI_MAP_ID_MIDI_EVENT) | ||||
| { | { | ||||
| CARLA_SAFE_ASSERT_CONTINUE(ev->size < 0xFF); | CARLA_SAFE_ASSERT_CONTINUE(ev->size < 0xFF); | ||||
| evData.port->writeMidiEvent(ev->frames, static_cast<uint8_t>(ev->size), data); | |||||
| evData.port->writeMidiEvent(currentFrame, static_cast<uint8_t>(ev->size), data); | |||||
| } | } | ||||
| lv2_event_increment(&iter); | lv2_event_increment(&iter); | ||||