speak \*- word to voice translator
] [ vocabulary [ output ] ]
into utterances and outputs them to a voice synthesizer,
or to a specified output file.
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 preceded
The phonemes may be followed by comma-percent then a `replacement
part' \*- an ASCII string with no spaces.
The phonetic code is given in vsp(VII).
\*- command lines: beginning with
The following command lines
\fB!r\fR file replace coded vocabulary from file
\fB!w\fR file write coded vocabulary on file
\fB!p\fR print parsing for working word
\fB!l\fR list vocabulary on standard output with phonetics
\fB!c\fR word copy phonetics from working word to
\fB!d\fR print phonetics for working word
Each working line replaces its predecessor.
Its first word is the `working word'.
Each phonetic line replaces the phonetics stored for the
In particular, a phonetic 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,
Spelling is done by taking each character of
the word, prefixing it with *, and looking it up.
is initialized with a coded vocabulary stored in file
The vocabulary option substitutes a different file for
A set of single letter options may
appear in any order preceded by
\fB\*-e\fR suppress English steps (4\*-8) below
\fB\*-p\fR suppress pronunciation by rule
\fB\*-s\fR suppress spelling
\fB\*-v\fR suppress voice output
The steps of pronunciation by rule are:
(1) If there were no lower case letters in the working line,
fold all upper case letters to lower.
(2) Fold an initial cap to lower case, and try again.
(3) If word has only one letter, or has no lower case vowels, quit.
(5) Replace final \*-ie by \*-y.
(6) If any changes have been made, try whole word again.
(7) Locate probable long vowels and capitalize them.
Mark probable silent \fIe\fR's.
(9) Place # before and after word.
and look up longest initial match
in the stored table of words; if none, quit.
(11) Use phonemes from the stored phonetic string as
pronunciation, and replace the matched stuff by the
replacement part of the phonetic string.
(12) If anything remains, go to (10).
Long vowels are located this way in step (7):
(1) A \fIu\fR appearing in context
[^aeiou]u[^aeiouwxy][aieouy].
(The notation is just a regular expression \*A la ed(I).)
(2) One of [aeo] appearing in the context
[aeo][^aehiouwxy][ie][aou]
or in the context [aeo][^aehiouwxy]ien is assumed long.
The digram \fIth\fR behaves as a single letter in this test.
(rAdium, facEtious, quOtient, carpAthian)
(3) If the first vowel in the word is \fIi\fR followed by one of
\fIaou,\fR it is assumed long.
(Iodine, dIameter, trIumph)
(4) If the only vowel in the word is final \fIe,\fR the vowel is
(5) If the only vowels in the word appear in the pattern
[aeiouy][^aeiouwxy]S, where S is one of the suffixes
then the first vowel is assumed long.
(glObal, tAble, lUcre, lAdy)
(6) If no suffix was found in (5),
as many of these suffixes as possible are isolated from
Stripping stops when \fIe\fR has been stripped,
nor is \fIe\fR stripped before a suffix beginning with \fIe\fR.
Each suffix is marked by inserting \*v just before the first letter, or
just after \fIe\fR in those suffixes that begin with \fIe\fR.
\*-able \*-ably \*-e \*-ed \*-en
\*-er \*-ery \*-est \*-ful \*-ly
\*-ing \*-less \*-ment \*-ness \*-or
(care\*vful\*vly, maj\*vor, fine\*vry, state\*v, caree\*vr)
(7) If the word, exclusive of suffixes, ends in \fIi\fR or \fIy\fR,
and contains no earlier vowel, then \fIi\fR or \fIy\fR is assumed long.
(pY \fR(from pie),\fI crY\*ving, lIe\*vd)
(8) If the first suffix begins with one of [aeio],
then the vowel [aeiouy] in an immediately
preceding pattern [^aeo][aeiouy][^aeiouwxy]
The digram \fIth\fR behaves as a single letter in this test.
(cAre\*vful\*vly, bAthe\*vd, mAj\*vor, pOt\*vable, port\*vable)
(9) In these exceptional cases no long letter is assumed in the
(i) before \fIg\fR, if there are any earlier vowels
(postage\*v, stAge\*v, college\*v)
(ii) \fIe\fR is not long before \fIl\fR
(10) If the first suffix begins with one of [aeio],
and the word exclusive of suffixes ends in
digram \fIth\fR is capitalized.
(breaTH\*ving, blITHe\*vly)
(11) An attempt is made to
recognize silent \fIe\fR in the middle of compound words.
Such an \fIe\fR is marked by a following \*v, and preceding vowels, other than
\fIe\fR, are assumed long as in step (8).
Silent \fIe\fR is marked in the context
[bdgmnprst][bdgpt]le[^aeioruy\*v]S,
string that contains [aeiouy] but does not contain \*v or the end of the word.
Silent \fIe\fR is also marked in the context
[^aeiu][aiou][^aeiouwxy]e[^aeinoruy]S.
(simple\*vton, fAce\*vguard, cAve\*vman, cavernous)
`?' for unknown command with
unreadable or unwritable vocabulary file
Vocabulary overflow is unchecked.
Excessively long words cause dumps.
Space is not reclaimed from deleted entries.