On Saturday, May 28, 2016 10:31:25 PM EDT Tim E. Real wrote:
> Yet I am still observing some non-related LV2 crashes here,
>  so in MusE's case some of these issues may be still our fault.

- LV2: Fix playback crash with certain midi event times, 
 in LV2SynthIF::getData().

- Midi file export: Added missing Aftertouch, PolyAftertouch support!


Hey Will, hey list !

I mentioned that I whittled your song down to nothing more than 
 just one single midi controller graph -  your Aftertouch performance -
 and it was still crashing MDA Piano when chosen as the output device.

Two days of hunting and I've found the trouble:

When LV2 support was added, a couple of timing comparisons 
 in the process routine were kinda mangled up.

As a result, once in while an event would be sent to LV2 
 *out* of sequence with the other events, by time value.
That's bad. All synth events must be sent ordered by time.

As fate would have it, /only/ MDA Piano + friends freaked out 
 and crashed the processing routines. It made it hard to debug - 
 the crash happened later in process calls, not at the culprit site.

To quote Will: "I got the bastard!"

----
This bug has revealed a slight flaw in our 'time' routines and variables:
We use doubles to represent 'time' in some of our code. 
That makes it easy to represent seconds and fractions in one value.

But I now suspect that because of accuracy errors with using 
 floating point numbers to represent time, slight framing errors
 occur and as a result a midi event might be played at a slightly
 different time than it is supposed to - even in the next cycle and so on.

It was actually because of this, that the above crash was /triggered/
 and the crash likely would not have occured at all if these 
 slight timing errors were not present in the events.

So these timing errors revealed the mistake in the LV2 code which
 crashed, but also exposed what is likely a fundamental 'time' 
 representation flaw.

I will try to fix this by using integers for microsecond or nanosecond 
 time representation throughout as much as possible, 
 since that is how 'time' is given to us in the first place.

Note that with /this/ commit, nothing vey bad should happen now.
Just slightly poorer than expected event timing.


Again, thanks Will for your test song.
I told you from the start, eh? "Maybe some weird interaction..." 

Tim.

------------------------------------------------------------------------------
What NetFlow Analyzer can do for you? Monitors network bandwidth and traffic
patterns at an interface-level. Reveals which users, apps, and protocols are 
consuming the most bandwidth. Provides multi-vendor support for NetFlow, 
J-Flow, sFlow and other flows. Make informed decisions using capacity 
planning reports. https://ad.doubleclick.net/ddm/clk/305295220;132659582;e
_______________________________________________
Lmuse-developer mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/lmuse-developer

Reply via email to