Hi Lukas,
I've applied your patch. Things do appear to be better on the machine that
was having problems with rspect to responsiveness. I will use it over the
next few days and see how it works out. If I get any problems, I'll let you
know.
thanks for looking into this.
Tim
Lukas Loehrer writes:
> Hi all,
>
> I am replying to a message by myself from a few months ago about bad
> responsiveness with the outloud speech server after updating to
> libasound 1.0.16-2 (see quoted message at the bottom for details). I
> spend the better part of yesterday debuggin and eventually fixing the
> problem. I will give some details about the solution below, but if you
> are experienceing similar issues, you may just want to give the
> following patch a try:
>
> http://homepage.hispeed.ch/loehrer/emacspeak.html
>
> If you try it, please report back about the outcome. Because I noticed
> the problem after an alsa update, I assumed it was alsa related. It
> turns out the problem was there before, only in a much milder form.
> The alsa upate just happened to make it show much more strongly, the
> exact reason of which is stil unclear to me. Also, it occured only on
> one of my machines.
>
> Technical details follow:
>
> Basically, after the outloud speech server has passed a chunk of text to be
> synthesize to ibmtts, it repeatedly calls eciSpeaking() in a loop to
> drive the synthesis process. Each call to eciSpeaking() will cause the
> installed callback to be called with some newly synthesized audio
> data. In the same loop the select() function is called to check
> whether there is new data on stdin from emacspeak in order to be able
> to react to stop commands. This design assumes that each call to
> eciSpeaking() will return fairly quickly so that we can check for stop
> commands regularly. Usually, this seems to be the case and
> eciSpeaking() returns after a single invokation to the callback.
> However, not so on the prolematic machines. Especially towards the end
> of the synthesis of a chunk of text, eciSpeaking() would call the
> callback many times andn thus not give the select() call a chance to
> run. This is what caused the very noticeable delays when trying to
> stop speech. According to the ibmtts docs, this behavior is to be
> expected.
>
> To fix the problem, I introduced a counter for the number of callback
> invokations per eciSpeaking() call and return eciDataNotProcessed from
> the callback when this number exceeds a certain threshold. This causes
> eciSpeaking() to return and it will supply the same data to the
> callback again on a later call. This fixed the problem with
> responsiveness.
>
> Unfortunately, This caused another problem to show up : After
> returning eciDataNotProcessed from the callback, a subsequent call to
> eciStop() will often block forever and thus hang the outloud speech
> server. This may be a bug in ibmtts. I worked around it by calling
> eciSpeaking() until it returns false before calling eciStop(). During
> this, a flag is set that causes the callback to do nothing and simply
> return eciDataProcessed. This workaround assumes that the chunks of
> text passed to ibmtts are not very large, which seems to be the case
> with emacspeak. This is not nice, but I could not think of a better
> way to avoid the server hangs.
>
> Wiht these modifications, the outloud speech server has very good
> responsiveness and stability again on the prolematic machine. I would
> not recommend the patch for inclusion in emacspeak at this point. The
> fix to limit the number of callback calls is certainly sound. However
> the hack required to work around the second problem clearly is not.
> Also, the fix is only needed on one machine so far.
>
> Best regards, Lukas
>
> Lukas Loehrer writes ("Sometimes bad responsiveness with outloud and alsa 1.0.16"):
> >
> > On Debian sid with libasound2-1.0.16-2, I am getting very bad
> > responsiveness with the outloud speech server in some situations. The
> > problem goes away after downgrading to libasound2 1.0.15-3.
> >
> > Responsiveness is not generally bad, but only in some situations. The
> > problem is easier to see with low speech-rates. The problem is for
> > example reproducible in in an info buffer when cycling from links to
> > links with the tab key. Voice locking must be enabled.
> >
> > 1. Hit tab to jump to a link
> > 2. wait a bit until emacspeak is in the middle of reading the actual link text
> > 3. Hit tab again to get to the next link
> >
> > What should happen: speech should stop imediately and the next link should be read.
> > What happens with libasound 1.0.16-2: The text of the first link is read to the end and then the text of the second link is read.
> >
> > Similar effects can be observed when moving through code line by line
> > and some font-locking is present.
> >
> > I have not yet been able to nail down the problem to a specific alsa
> > api call, but it is probably either snd_pcm_writei() or snd_pcm_drop()
> > whose behavior must have changed in a subtle way in 1.0.16. I cannot produce
> > a short test case that reproduces the problem, so reporting the bug to
> > either Debian or Alsa is difficult. Can anyone reproduce the described
> > behavior?
> >
> > Best regards, Lukas
> >
> > -----------------------------------------------------------------------------
> > To unsubscribe from the emacspeak list or change your address on the
> > emacspeak list send mail to "emacspeak-request@xxxxxxxxxxx" with a
> > subject of "unsubscribe" or "help"
> >
>
> -----------------------------------------------------------------------------
> To unsubscribe from the emacspeak list or change your address on the
> emacspeak list send mail to "emacspeak-request@xxxxxxxxxxx" with a
> subject of "unsubscribe" or "help"
>
--
Tim Cross
tcross@xxxxxxxxxxx
There are two types of people in IT - those who do not manage what they
understand and those who do not understand what they manage.
-----------------------------------------------------------------------------
To unsubscribe from the emacspeak list or change your address on the
emacspeak list send mail to "emacspeak-request@xxxxxxxxxxx" with a
subject of "unsubscribe" or "help"
If you have questions about this archive or had problems using it, please send mail to:
priestdo@xxxxxxxxxxx No Soliciting!Emacspeak List Archive | 2007 | 2006 | 2005 | 2004 | 2003 | 2002 | 2001 | 2000 | 1999 | 1998 | Pre 1998