ViaVoice working on Slackware 9.1 :)
Doug Sutherland
wearable at cogeco.ca
Tue Mar 16 20:29:36 EST 2004
For those that like viavoice but can't get it to work on slackware 9.1
(Or any other system with glibc 2.3.2) have it working :) However, it
required compiling glibc 2.3.1 into the /opt directory, pointing the
LD_LIBRARY_PATH there, and executing the ld-3.2.1.so directly to start
viavoice. In case anyone wants to try this, I did it this way:
Grab these two files from ftp.gnu.org and extract them in /usr/src
cp glibc-2.3.1.tar.gz /usr/src
cp glibc-linuxthreads-2.3.1.tar.gz /usr/src
cd /usr/src
tar xzvf glibc-2.3.1.tar.gz
The linuxthreads packages must be extracted inside glibc source tree
cp glibc-linuxthreads-2.3.1.tar.gz /usr/src/glibc-2.3.1
cd /usr/src/glibc-3.2.1
tar xzvf glibc-linuxthreads-2.3.1.tar.gz
The glibc should be built outside the source tree, like this:
mkdir /usr/src/glibc-build
cd /usr/src/glibc-build
Build with the prefix and libexecdir to /opt directory ...
../glibc-3.2.1/configure --prefix=/opt/glibc-2.3.1 \
-- disable-profile --enable-add-ons \
--libexecdir=/opt/glibc-2.3.1/bin &&
make &&
make install
The above takes a long time and you need lots of disk space to build
glibc (approx 800MB), but you can delete the source tree and build
tree when finished.
The script that executes viavoice must export LD_LIBRARY_PATH
to point to new glibc
export LD_LIBRARY_PATH=/opt/glibc-2.3.1/lib
There also needs to be a path to the viavoice libraries
The program linked to viavoice must use the ld-linux.so that was
built with the new glibc rather than your regular one, which will
use the incompatible glibc-2.3.2. For example to run the viavoice
example program runcmdlinespeak, I do this:
/opt/glibc-2.3.1/lib/ld-2.3.1.so runcmdlinespeakfile
It works for me on stock slackware 9.1!
A few other notes on viavoice:
If you can't install with rpm, you can do
rpm2tgz viavoicefile.rpm
Then just copy the files into /usr/lib
ViaVoice needs to have an environment variable ECIINI that points
to the eci.ini file. If the eci.ini file is missing, it can be
generated by running the inigen program that comes with viavoice.
However, if you want to run inigen, you need to use the glibc-2.3.1:
/opt/glibc-2.3.1/lib/ld-2.3.1.so inigen path/enu50.so target_path
On my system I copied the viavoice stuff to /usr/local/viavoice/
and put the viavoice libraries in /usr/local/viavoice/lib
To run a program I compiled for viavoice I do this in a bash shell:
#!/bin/sh
VVDEV=/usr/local/viavoice
export ECIINI=$VVDEV/eci.ini
export LD_LIBRARY_PATH=/usr/lib:/opt/glibc-2.3.1/lib:$VVDEV/lib
/opt/lib/glibc-2.3.1/lib/ld-2.3.1.so $VVDEV/bin/inigen $VVDEV/lib/enu50.so
$VVDEV
/opt/lib/glibc-2.3.1/lib/ld-2.3.1.so $VVDEV/test1 "Is there anybody there?
This both generates the eci.ini and sets the ECIINI variable,
then it runs my program test1 which was compiled using the
IBM eci.h include file.
As I mentioned earlier, I discovered that the latest versions of
ViaVoice TTS tend to drop off the speech before sentence end, but
when I went back to the earliest version ViaVoice Outloud 5.0, the
synchronization worked perfectly (ie the call to eciSynchronize
returns at the right time, when the speech is finished talking).
This oldest version of ViaVoice is in this file
http://www.ecn.purdue.edu/~laird/Linux/ViaVoice/viavoice_outloud_sdk_rtk.tar
On my system the newer TTS 5.1 and Outloud 5.1 have synchronization
problems, where eciSynchronize returns before speech is finished,
thus dropping off words.
I haven't configured emacspeak yet, but it should be possible.
The outloud server will need to load with /opt/lib/glibc-2.3.1/lib/ld-2.3.1.so
and use the glibc 2.3.1 libraries.
Maybe a lot of work and space just to get viavoice working, but I like
the sound much better than festival/flite and dectalk.
It would be nice to get the middleware program for speakup to
use viavoice as a voice server ....
-- Doug
More information about the Speakup
mailing list