Monday, April 09, 2012

Talk to me Linux!

Just hacked together a simple proc to read text strings aloud using the espeak Linux command. Its good fun. It also shows how useful the gnocl::setOpts command  can be.

#---------------
# espeak.tcl
#---------------
## \file
# File documentation.
#\verbatim
#!/bin/sh
#\
exec tclsh "$0" "$@"
#\endverbatim

package require Gnocl

##
# -f <text file>
#       Text file to speak
# -a <integer>
#       Amplitude, 0 to 200, default is 100
# -g <integer>
#       Word gap. Pause between words, units of 10mS at the default speed
# -l <integer>
#       Line length. If not zero (which is the default), consider
#       lines less than this length as end-of-clause
# -p <integer>
#       Pitch adjustment, 0 to 99, default is 50
# -s <integer>
#       Speed in words per minute, 80 to 390, default is 170
# -v <voice name>
#       Use voice file of this name from espeak-data/voices
# -w <wave file name>
#       Write output to this WAV file, rather than speaking it directly
# -b   Input text encoding, 1=UTF8, 2=8 bit, 4=16 bit
# -m   Interpret SSML markup, and ignore other < > tags
# -q   Quiet, don't produce any speech (may be useful with -x)
# -x   Write phoneme mnemonics to stdout
# -X   Write phonemes mnemonics and translation trace to stdout
# -z   No final sentence pause at the end of the text
proc readAloud {args} {
    # set defaults and parse args
    gnocl::setOpts "-a 5 -s 110 $args"
    eval exec espeak -a $a -s $s [list $t]
}

readAloud -t "How now brown cow. She sell sea shells by the sea shore. Peter Piper picked a peck of pickled peppers."

No comments: