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
