After an evaluation, GNOME has moved from Bugzilla to GitLab. Learn more about GitLab.
No new issues can be reported in GNOME Bugzilla anymore.
To report an issue in a GNOME project, go to GNOME GitLab.
Do not go to GNOME Gitlab for: Bluefish, Doxygen, GnuCash, GStreamer, java-gnome, LDTP, NetworkManager, Tomboy.
Bug 532982 - spell word is not working in many places
spell word is not working in many places
Status: RESOLVED FIXED
Product: orca
Classification: Applications
Component: speech
2.23.x
Other All
: Normal major
: ---
Assigned To: Rich Burridge
Orca Maintainers
: 534932 (view as bug list)
Depends on:
Blocks:
 
 
Reported: 2008-05-13 17:17 UTC by Mike Pedersen
Modified: 2008-05-28 21:07 UTC
See Also:
GNOME target: ---
GNOME version: 2.21/2.22


Attachments
orca settings that will reproduce the problem. (20.00 KB, application/x-tar)
2008-05-21 17:36 UTC, Mike Pedersen
Details

Description Mike Pedersen 2008-05-13 17:17:27 UTC
1.  Open naudilus in list view
2.  Make sure a file or folder is highlighted 
3. Press the spell current flat review item (on the laptop double press capslock+k) 
What should happen is that the filename should be spelled
What actually happens is that only the first letter is heard.  
This problem can also be reproduced in the message list of thunderbird or a chat area in pidgin.
Spell word does seem to work in gedit
Comment 1 Rich Burridge 2008-05-21 04:08:22 UTC
I can't recreate this.  I tried it with both the
laptop bindings (Caps_Lock-k) and using the desktop 
bindings (KP_5).

A double press of that binding spells the filename.
 
I also note that if the filename has more than one word, 
then I had to hit KP_6 to get to the next word, 
before doing double-KP_5 again, but I think that's 
to be expected.
Comment 2 Mike Pedersen 2008-05-21 17:36:24 UTC
Created attachment 111284 [details]
orca settings that will reproduce the problem.

This should help reproduce the problem
Comment 3 Rich Burridge 2008-05-21 20:18:10 UTC
Yup. It certainly does. So here's an interesting thing.

It all depends on the eSpeak rate. Mike had it at 99.0.
I set it to 50.0, and Orca nicely spelled the file name.
By experimentation, I think the failures start occurring
somewhere between 75.0 and 80.0.

I then went back to my .orca settings (Cepstral Swift/Callie)
and bumped her up to 99.0, and she has no problem spelling
all of the filename.

So, perhaps I'm being naive, but this looks like an eSpeak
bug.

Mike, can you as an experiment, change to another TTS synth
and try spelling a file name with that) at rate = 99.0?

Thanks.

Comment 4 Rich Burridge 2008-05-27 16:45:21 UTC
I've done a little more digging. The problem is in and around
spellingGenerator() in default.py and the various methods it
calls.

I added a load of debug messages. For this test, we are trying 
to spell "File" (first menu name in the nautilus menu bar).
Spelling for me is with the desktop key binding (i.e. a double
press of KP_5).

With a good run (eSpeak gnome-speech TTS, rate=59), we see
the following:

XXX: spelling:  File
XXX: spellingGenerator called.
XXX: spelling:  F
XXX: before SayAllContext.
XXX: SayAllContext: utterance:  F
XXX: SayAllContext: start offset:  0
XXX: SayAllContext: end offset:  1
XXX: __init_returning.
SPEECH OUTPUT: 'F'
XXX: __spellItemProgressCallback:  0
XXX: after SayAllContext.
XXX: spelling:  i
XXX: before SayAllContext.
XXX: SayAllContext: utterance:  i
XXX: SayAllContext: start offset:  1
XXX: SayAllContext: end offset:  2
XXX: __init_returning.
SPEECH OUTPUT: 'i'
XXX: __spellItemProgressCallback:  0
XXX: __spellItemProgressCallback:  0
XXX: __spellItemProgressCallback:  0
XXX: after SayAllContext.
XXX: spelling:  l
XXX: before SayAllContext.
XXX: SayAllContext: utterance:  l
XXX: SayAllContext: start offset:  2
XXX: SayAllContext: end offset:  3
XXX: __init_returning.
SPEECH OUTPUT: 'l'
XXX: __spellItemProgressCallback:  0
XXX: __spellItemProgressCallback:  0
XXX: __spellItemProgressCallback:  0
XXX: after SayAllContext.
XXX: spelling:  e
XXX: before SayAllContext.
XXX: SayAllContext: utterance:  e
XXX: SayAllContext: start offset:  3
XXX: SayAllContext: end offset:  4
XXX: __init_returning.
SPEECH OUTPUT: 'e'
XXX: __spellItemProgressCallback:  0
XXX: __spellItemProgressCallback:  0
XXX: __spellItemProgressCallback:  0
XXX: after SayAllContext.
XXX: __spellItemProgressCallback:  2

-------

With a bad run (eSpeak gnome-speech TTS, rate=99), we see
the following:

XXX: spelling:  File
XXX: spellingGenerator called.
XXX: spelling:  F
XXX: before SayAllContext.
XXX: SayAllContext: utterance:  F
XXX: SayAllContext: start offset:  0
XXX: SayAllContext: end offset:  1
XXX: __init_returning.
SPEECH OUTPUT: 'F'

In other words, it's not coming back from the call to:

            yield [speechserver.SayAllContext(obj, string,
                                              startOffset, startOffset + 1),
                   voice]

in spellingGenerator() in default.py (around line 6629), and
__spellItemProgressCallback() isn't getting called.

Any ideas what might be causing this?

Comment 5 Rich Burridge 2008-05-27 16:53:40 UTC
*** Bug 534932 has been marked as a duplicate of this bug. ***
Comment 6 Willie Walker 2008-05-27 18:14:36 UTC
It looks like the callback isn't getting called, which might imply this is an eSpeak/gnome-speech problem.  Sigh. :-(
Comment 7 Rich Burridge 2008-05-27 19:21:12 UTC
I took it a little further. As Orca was running, I attached to
the second espeak-synthesis-driver process each time, with gdb.

With a speech rate of 59, when I pressed double KP_5 I saw:

[New Thread 0xb69d0b90 (LWP 24183)]
[Thread 0xb69d0b90 (LWP 24183) exited]
[New Thread 0xb69d0b90 (LWP 24184)]
[Thread 0xb69d0b90 (LWP 24184) exited]
[New Thread 0xb69d0b90 (LWP 24188)]
[Thread 0xb69d0b90 (LWP 24188) exited]
[New Thread 0xb69d0b90 (LWP 24189)]
[Thread 0xb69d0b90 (LWP 24189) exited]
[New Thread 0xb618eb90 (LWP 24190)]
[Thread 0xb618eb90 (LWP 24190) exited]
[New Thread 0xb598db90 (LWP 24191)]
[Thread 0xb598db90 (LWP 24191) exited]
[New Thread 0xb518cb90 (LWP 24192)]
[Thread 0xb518cb90 (LWP 24192) exited]
[New Thread 0xb518cb90 (LWP 24198)]
[Thread 0xb518cb90 (LWP 24198) exited]

With a speech rate of 99, when I pressed double KP_5 I saw:

[New Thread 0xb69adb90 (LWP 24331)]
[Thread 0xb69adb90 (LWP 24331) exited]
[New Thread 0xb69adb90 (LWP 24332)]
[Thread 0xb69adb90 (LWP 24332) exited]
[New Thread 0xb69adb90 (LWP 24334)]
[Thread 0xb69adb90 (LWP 24334) exited]
[New Thread 0xb69adb90 (LWP 24335)]
[Thread 0xb69adb90 (LWP 24335) exited]

In other words, not so many new LWP's were created.
Comment 8 Rich Burridge 2008-05-27 22:36:32 UTC
Here's the espeak-synthesis-driver debug messages for trying to
spell "File" (first item in the menu bar).

1/ Good run (rate = 59):

...
espeak_say called.
espeak_speaker_from_servant called.
espeak_synthesis_driver_say called.
espeak_set_capitals called.
espeak_synthesis_driver_set_param: called.
espeak_set_volume called.
espeak_synthesis_driver_set_param: called.
espeak_set_rate called.
espeak_synthesis_driver_set_param: called.
espeak_set_pitch_fluctuation called.
espeak_synthesis_driver_set_param: called.
espeak_set_pitch called.
espeak_synthesis_driver_set_param: called.
espeak_synthesis_driver_say: saying: F
espeak_synthesis_driver_index_callback called.
espeak_synthesis_driver_index_callback called.
espeak_synthesis_driver_say: OK.
espeak_synthesis_driver_timeout_callback called.
espeak_synthesis_driver_index_callback called.
espeak_synthesis_driver_index_callback called.
espeak_synthesis_driver_timeout_callback called.
espeak_say called.
espeak_speaker_from_servant called.
espeak_synthesis_driver_say called.
espeak_set_capitals called.
espeak_synthesis_driver_set_param: called.
espeak_set_volume called.
espeak_synthesis_driver_set_param: called.
espeak_set_rate called.
espeak_synthesis_driver_set_param: called.
espeak_set_pitch_fluctuation called.
espeak_synthesis_driver_set_param: called.
espeak_set_pitch called.
espeak_synthesis_driver_set_param: called.
espeak_synthesis_driver_say: saying: i
espeak_synthesis_driver_index_callback called.
espeak_synthesis_driver_index_callback called.
espeak_synthesis_driver_say: OK.
espeak_synthesis_driver_timeout_callback called.
espeak_synthesis_driver_index_callback called.
espeak_synthesis_driver_index_callback called.
espeak_synthesis_driver_timeout_callback called.
espeak_say called.
espeak_speaker_from_servant called.
espeak_synthesis_driver_say called.
espeak_synthesis_driver_say: saying: l
espeak_synthesis_driver_index_callback called.
espeak_synthesis_driver_index_callback called.
espeak_synthesis_driver_say: OK.
espeak_synthesis_driver_timeout_callback called.
espeak_synthesis_driver_index_callback called.
espeak_synthesis_driver_index_callback called.
espeak_synthesis_driver_timeout_callback called.
espeak_say called.
espeak_speaker_from_servant called.
espeak_synthesis_driver_say called.
espeak_synthesis_driver_say: saying: e
espeak_synthesis_driver_index_callback called.
espeak_synthesis_driver_index_callback called.
espeak_synthesis_driver_say: OK.
espeak_synthesis_driver_index_callback called.
espeak_synthesis_driver_index_callback called.
espeak_synthesis_driver_timeout_callback called.
espeak_synthesis_driver_timeout_callback called.
...

2/ Bad run (rate = 99):

...
espeak_say called.
espeak_speaker_from_servant called.
espeak_synthesis_driver_say called.
espeak_set_capitals called.
espeak_synthesis_driver_set_param: called.
espeak_set_volume called.
espeak_synthesis_driver_set_param: called.
espeak_set_rate called.
espeak_synthesis_driver_set_param: called.
espeak_set_pitch_fluctuation called.
espeak_synthesis_driver_set_param: called.
espeak_set_pitch called.
espeak_synthesis_driver_set_param: called.
espeak_synthesis_driver_say: saying: F
espeak_synthesis_driver_index_callback called.
espeak_synthesis_driver_index_callback called.
espeak_synthesis_driver_index_callback called.
espeak_synthesis_driver_index_callback called.
espeak_synthesis_driver_say: OK.
espeak_synthesis_driver_timeout_callback called.
espeak_synthesis_driver_timeout_callback called.
...

I need to add/adjust the debug to find out exactly what's going on.

More tomorrow.
Comment 9 Rich Burridge 2008-05-27 23:54:39 UTC
I added some more debug.

Here's the espeak-synthesis-driver debug messages for trying to
spell the "F" of "File" (first item in the menu bar).

1/ Good run (rate = 59):

...
espeak_synthesis_driver_say: saying: F
espeak_synthesis_driver_index_callback called.
event->type: 2
espeakEVENT_SENTENCE.
a_callback_is_called is TRUE.
Calling GNOME_Speech_SpeechCallback_notify.
espeak_synthesis_driver_index_callback called.
event->type: 1
WORD MARK or END.
a_callback_is_called is TRUE.
Calling GNOME_Speech_SpeechCallback_notify.
espeak_synthesis_driver_say: a_error: 0
espeak_synthesis_driver_say: OK.
espeak_synthesis_driver_say: returning status: 7
espeak_synthesis_driver_timeout_callback called.
espeak_synthesis_driver_index_callback called.
event->type: 5
WORD MARK or END.
a_callback_is_called is TRUE.
Calling GNOME_Speech_SpeechCallback_notify.
espeak_synthesis_driver_index_callback called.
event->type: 6
espeakEVENT_MSG_TERMINATED.
a_callback_is_called is TRUE.
Calling GNOME_Speech_SpeechCallback_notify.
espeak_say called.
espeak_speaker_from_servant called.
espeak_synthesis_driver_say called.
espeak_set_capitals called.
espeak_synthesis_driver_set_param: called.
espeak_set_volume called.
espeak_synthesis_driver_set_param: called.
espeak_set_rate called.
espeak_synthesis_driver_set_param: called.
espeak_set_pitch_fluctuation called.
espeak_synthesis_driver_set_param: called.
espeak_set_pitch called.
espeak_synthesis_driver_set_param: called.
...

2/ Bad run (rate = 99):

...
espeak_synthesis_driver_say: saying: F
espeak_synthesis_driver_index_callback called.
event->type: 2
espeakEVENT_SENTENCE.
a_callback_is_called is TRUE.
Calling GNOME_Speech_SpeechCallback_notify.
espeak_synthesis_driver_index_callback called.
event->type: 1
WORD MARK or END.
a_callback_is_called is TRUE.
Calling GNOME_Speech_SpeechCallback_notify.
espeak_synthesis_driver_index_callback called.
event->type: 5
WORD MARK or END.
a_callback_is_called is TRUE.
Calling GNOME_Speech_SpeechCallback_notify.
espeak_synthesis_driver_index_callback called.
event->type: 6
espeakEVENT_MSG_TERMINATED.
a_callback_is_called is TRUE.
Calling GNOME_Speech_SpeechCallback_notify.
espeak_synthesis_driver_say: a_error: 0
espeak_synthesis_driver_say: OK.
espeak_synthesis_driver_say: returning status: 9
espeak_synthesis_driver_timeout_callback called.
...
espeak_synthesis_driver_timeout_callback called.
...

It's still not exactly clear what the difference is.
I'll keep digging.

Comment 10 Rich Burridge 2008-05-28 18:09:37 UTC
Chatted with Will about this. The plan here is to put the code
for spelling a word back the way it was. I.e. remove the speak
progress callback stuff. Joanie, passing it over to you.

Thanks.
Comment 11 Joanmarie Diggs (IRC: joanie) 2008-05-28 18:48:20 UTC
That stuff has been reversed.  Rich, passing it back over to you for confirmation that this bug is taken care of. :-)
Comment 12 Rich Burridge 2008-05-28 18:56:25 UTC
This seems to be working just fine now. I switched to eSpeak (via
GNOME Speech) and set the rate to 99. Double-Press KP_5 nicely
spells the current flat review word.

Moving it to "[pending]" as the fix is already committed.

Mike, can you also check this out please?

Thanks Joanie.
Comment 13 Mike Pedersen 2008-05-28 19:59:40 UTC
This now seems to be working well.  
Comment 14 Rich Burridge 2008-05-28 21:07:32 UTC
Thanks Mike. Closing as FIXED.