ExternalSpeech
by Stéphane Doyon <s.doyon@videotron.ca>
Version 0.7 beta, September 2001

This speech driver interfaces with an external program that will handle
speech synthesis. The protocol for talking to the external program is
quite arbitrary: there is nothing standard about it.

As opposed to the GenericSay driver, this driver is intended for more
sophisticated features:

- Communication with the external program is bi-directional, and BRLTTY
constantly listens for progress updates from the external program. BRLTTY
can thus perform speech tracking: the braille display can move as the
words are spoken. BRLTTY is then also able to determine when the text is
finished speaking. Finally, if speech is stopped by the user, BRLTTY knows
at what position it stopped, so the user does not have to search for
the stopping point when he/she wants to resume speech synthesis.

- Video attributes of the characters are passed with the text, so that the
external program can interpret them and add appropriate vocal markings. 

Currently, only one external program exists that can talk this protocol. It
uses IBM's Viavoice TTS AKA Viavoice Outloud software speech synthesis
library.

NB IBM offers the Viavoice TTS product at no cost for
personal / pseudo-evaluation use. Unfortunately their software is not
free in the GNU sense nor opensource, and a license is required for
commercial use. It is however much more usable and of far superior quality
than rsynth, festival, and the TTS scripts I have seen for MBROLA. 

My external speech program does some speech preprocessing and then uses
the Viavoice library. It is still quite alpha. You can find it at:
http://pages.infinit.net/sdoyon/via.html
It will be kept separate from BRLTTY (in part because of the non-free
nature of Viavoice TTS).

The path to the external program, and the uid and gid under which it is
executed, can be either:
-hard-coded in speech.h
-specified in the BRLTTY configuration file through
   the speech-parameter keyword.
-Specified on the command-line using the -S option.

In the last two cases, the format is:
   program=<extProgPath>[,uid=<numerical_uid>][,gid=<numerical_gid>]
without space.
As in:
speech-parameter program=/home/steph/via-0.3/via_wrapper,uid=501,gid=501

Avoid executing the external program as root if at all possible. The
account you choose may require some rights such as access to the
soundcard device.
