From: Richard B. <bo...@bo...> - 2002-08-22 07:18:53
|
On Wednesday 21 August 2002 14:22, Nathan Sharp wrote: > - The overhead of DCOP is prabably totally mute. What I think _is_ > significant is a suspicion of mine that goes like this: 1) The > sequencer realizes that it is running low on data to play (say it > only has 50ms left of data). So it decides to place a DCOP call to > the GUI for more data. 2) Uh Oh, the GUI is servicing GUI stuff and > is unable to respond. 3) Even though the sequencer still has 50ms of > data that it _could_ play, it doesn't do it because it is single > threaded and inside of a blocking DCOP call. Well not quite. The note-on cycle is ok - it's only the note offs that currently get processed closer to real-time. So when we receive a slice of events from the gui we push them straight out to the ALSA queue with real time timestamp on them. Note offs get processed from their own in-process queue - as I said this hangover is from writing this originally for aRts, what we could do now is use the ALSA "note" API which accepts durations too and just be a little cleverer with our stop() call to make sure all pending or playing notes clear down correctly. Audio is carried out in a separate thread (thanks to JACK) so once again no problem with blocking here. MIDI recording feedback is in the loop however and might cause some contention - that's a whole other problem. As we've said, there's plenty we can do to improve things as it stands without resorting to any drastic changes quite yet. B |