This is getting a bit too much info. Let’s please test everything separately to see what exactly is the problem here.
Let’s first skip VSTis and MIDI routing between them, and only test the input timing of the RAW MIDI events into Renoise:
Raw MIDI Input timing:
I currently don’t have some MIDI generating HW here, so I’ve used loopMIDI | Tobias Erichsen instead to create a virtual MIDI port instead.
Using this virtual MIDI device as output port, I’ve created a simple MIDI clip in Ableton Live 19, triggering 16th C-2 notes at 120 BMP.
Then in Renoise, I’ve selected the MIDI port as input and created a new sample with a single spike (an Impulse) to hear the events.
Then I’ve done the same in Reaper, triggering a ReaSynth with a Pulse and no attack.
→ Timing, as I can observe it here, is equally good or worse. I can’t hear a fundamental difference here.
Doing the same test with Reaper instead of Live to generate the events, I got some unexpected wonky timing, but the problem here seems to be Reaper and not Renoise. I’ve tried changing some of the timestamp options in Reaper but without success. But maybe I’ve missed something here.
Please Note: When directly playing back MIDI input events, the events can’t be scheduled “back in time”, so even if there is timestamp info, it can’t be used. This means, the higher the audio buffering (latency), the worse the timing will be. This can be easily tested by increasing the audio latency in Renoise and Reaper while triggering the MIDI events from Live. Lower latency = Better timing. So make sure the latency in Renoise and Reaper is roughly the same when comparing the timing.
Raw MIDI Output timing:
The MIDI output timing of Renoise can be tested the same way as described above, but this time using Renoise instead of Live to generate the MIDI events, sending them to Live and/or Reaper.
→ Timing, as I can observe it here, again is as good as in Live from the previous test.
Please note: When sending out MIDI events, the timestamp info now can be used this time to fix timing of events. But On Windows, there’s unfortunately no way to do this at the driver level, so Renoise internally schedules MIDI events in a separate real time thread. This timing isn’t perfect, but it should be very usable at least and definitely should not be influenced by any song settings (LPB/TPL). The Audio latency also has a little impact here, but not as much as it has with the input timing.
Core MIDI on OSX allows scheduling events on a driver level, so the timing here should really be perfect.
@gentleclockdivider can you replicate the tests above with similar result on your setup?
Especially note the first comment about audio latency.
If this works for you, let’s continue the tests and bring in VSTis and test this in detail.