- C 96.6%
- Meson 3.4%
Issue #62 reports espeakup going permanently silent after libespeak-ng prints "error: Device or resource busy" (EBUSY from the ALSA device, via pcaudiolib). Once the audio output is wedged, espeak's internal command queue never drains, every espeak_Synth call fails with EE_BUFFER_FULL forever, and espeakup just kept retrying silently. EE_BUFFER_FULL is also perfectly normal while a long backlog is being played back, so persistent failure alone is not a reliable signal. To tell a backlogged engine from a wedged one, note progress whenever the synth callback fires (it is invoked for every chunk espeak synthesizes, and synthesis is paced by audio playback): if entries keep failing for ~10 seconds with no callback activity at all, declare the engine wedged. Recovery is layered: - restart the engine in-process (espeak_Cancel + espeak_Terminate + reinitialize), which recovers transient device problems; - if the engine has not been healthy for at least a minute between such restarts, after 3 restarts give up and exit, letting the init system (Restart=always in our systemd unit) respawn espeakup in a completely clean state; - if the restart itself blocks on the wedged device, the stop-acknowledgement timeout in the softsynth thread eventually terminates the process as a last resort. A quick espeak_Synth success right after a restart does not count as healthy on purpose: espeak's freshly emptied internal queue accepts entries even while the device is still wedged. Helps: https://github.com/linux-speakup/espeakup/issues/45 Helps: https://github.com/linux-speakup/espeakup/issues/62 Co-Authored-By: Claude <noreply@anthropic.com> |
||
|---|---|---|
| doc | ||
| services | ||
| src | ||
| .clang-format | ||
| .gitignore | ||
| .indent.pro | ||
| COPYING | ||
| meson.build | ||
| meson_options.txt | ||
| README.md | ||
espeakup connector
espeakup is a program which makes it possible for speakup to use the espeak-ng software synthesizer. It does this by reading speakup's softsynth device and passing the text to espeak-ng which actually speaks.
Requirements
This program works with the speakup screen reader, which can be obtained from http://linux-speakup.org, and the espeak-ng software speech synthesizer.
You must have both of these installed and operational. Setting them up is beyond the scope of this document.
Installation
The preferred way to install espeakup is using your distribution's packaging system, but if your distribution does not have a package for espeakup yet, espeakup just uses meson, so you should be able to change to the source directory, then type:
meson setup . ./build
cd ./build
ninja
sudo ninja install
Starting Up
This program should be run after speakup is set up to communicate with a software synthesizer and after /dev/softsynth exists. The way this is done is distribution specific, so it is beyond the scope of this documentation.
Acknowledgements
I would like to thank Marc Mulcahy, the author of the speakup to TTSynth connector, on which this work is based. Also, I would like to thank Kirk Reiser and Jonathan Duddington, the authors of Speakup and Espeak, respectively, for their work.
Filing Bugs
Bugs should be filed on our bug tracker at https://github.com/linux-speakup/issues.