    SPEAK(VI)                    4/26/75                    SPEAK(VI)

    NAME
         speak - word to voice translator

    SYNOPSIS
         speak [ -efpsv ] [ vocabulary [ output ] ]

    DESCRIPTION
         Speak  turns  a  stream of words into utterances and outputs
         them to a voice synthesizer, or to the specified output.  It
         has  facilities  for maintaining a vocabulary.  It receives,
         from the standard input

           -  working lines: text of words separated by blanks
           -  phonetic lines: strings of phonemes for one  word  pre-
              ceded  and  separated  by  commas.  The phonemes may be
              followed by comma-percent then a `replacement  part'  -
              an  ASCII  string with no spaces.  The phonetic code is
              given in vs(V).
           -  empty lines
           -  command lines: beginning with !.  The following command
              lines are recognized:

              !r file   replace coded vocabulary from file
              !w file   write coded vocabulary on file
              !p        print phonetics for working word
              !l        list  vocabulary on standard output with pho-
                        netics
              !c word   copy phonetics from working word to specified
                        word
              !d        print decomposition of working word into sub-
                        strings
              !f n      turn off (or on) English  preprocessing  rule
                        number n (see listing for meaning of n)

         Each  working line replaces its predecessor.  Its first word
         is the `working word'.  Each phonetic line replaces the pho-
         netics  stored  for the working word.  In particular, a pho-
         netic line of comma only deletes the entry for  the  working
         word.  Each working line, phonetic line or empty line causes
         the working line to be uttered.  The process  terminates  at
         the end of input.

         Unknown words are pronounced by rules, and failing that, are
         spelled.  For the builtin part of the rules, see the  refer-
         ence.   Spelling  is  done  by  taking each character of the
         word, prefixing it with `*', and looking it up.  Unspellable
         words burp.

         Words  not  found  verbatim in the vocabulary are pronounced
         piecewise.  First the word is bracketed by sharps:  `#...#'.
         The  vocabulary  is  then  searched for the longest fragment
         that matches the beginning of the word.  The  phonetic  part
         of  the phonetic string is uttered, and the matched fragment
         is replaced by the replacement part of the phonetic  string,
         if  any.  The process is repeated until the word is exhaust-

                                  - 1 -

    SPEAK(VI)                    4/26/75                    SPEAK(VI)

         ed.  A fragment is entered into the vocabulary as a  working
         word prefixed by `%'.

         Speak  is initialized with a coded vocabulary stored in file
         /usr/lib/speak.m.  The vocabulary option substitutes a  dif-
         ferent file for /usr/lib/speak.m.  Other vocabularies, to be
         used  with  option  -e,   exist   in   /usr/vs/latin.m   and
         /usr/vs/polish.m.

         A  set of single letter options may appear in any order pre-
         ceded by -.  Their meanings are:

             e   suppress English preprocessing
             f   equivalent to `f1, f2,...'
             p   suppress pronunciation by rule
             s   suppress spelling
             v   suppress voice output

         The following input will reconstitute  a  coded  vocabulary,
         `speak.m', from an ascii listing, `speak.v', that was creat-
         ed using !l.

                 (cat speak.v; echo !w speak.m) | speak -v /dev/null

    FILES
         /usr/lib/speak.m

    SEE ALSO
         M. D. McIlroy, ``Synthetic English Speech by Rule,'' Comput-
         ing Science Technical Report #14, Bell Laboratories, 1973
         vs(V), vs(IV)

    BUGS
         Excessively long words cause dumps.
         Space  is  not reclaimed from changed entries; use !w and !r
         to effect reclamation.
         !p doesn't always work as advertised.

                                  - 2 -