Ok, so: both LB302 and SF2 work in a way where they use NotePlayHandles
directly for handing the note data, but are still single-streamed, and
thus also use a InstrumentPlayHandle to do the actual rendering.

The problem with this is that both NPH's and IPH's are, as far as I can
tell, treated equally by the mixer. So let's say there's 3 notes played
during the same period, let's say they're C, E and G. Ok, fine,
InstrumentTrack::play() creates NPH's for each note, then the Mixer goes
to the next stage where it loops through all PlayHandles and processes
them...

Here's the catch: since this next step is threaded, we have no guarantee
that the NPH's will be processed before the IPH's. So, for each period
where there are multiple NPH's during the same buffer, it may be that C,
E are processed, then the IPH gets processed, then G is processed - but
since the rendering is done in the IPH, G only gets "really" processed
when the next IPH is processed next period, so it gets bumped back to
next period. And this can happen in any order - may be that some
periods, C is played, then IPH, then E, G... sometimes even the IPH may
be played first, then all the notes gets pushed to the next period.

With SF2 player, this may cause some jitter and unreliability in the
timing... with usual period sizes, it's usually around +/-5
milliseconds. Not very nice...

With LB302, since it's a monosynth, I have a hunch that this is closely
related to the bugs occuring on it - notes being dropped, playing the
wrong pitch etc. I'd have to do some tests to be sure though.

I wonder if this could be fixed by modifying the code in Mixer in such a
way that NPH's are always processed before IPH's...

------------------------------------------------------------------------------
Learn Graph Databases - Download FREE O'Reilly Book
"Graph Databases" is the definitive new guide to graph databases and their 
applications. Written by three acclaimed leaders in the field, 
this first edition is now available. Download your free book today!
http://p.sf.net/sfu/NeoTech
_______________________________________________
LMMS-devel mailing list
LMMS-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/lmms-devel

Reply via email to