1 <!DOCTYPE html PUBLIC "-//IETF//DTD HTML 2.0//EN">
6 * Copyright (c) 2001, 2002, 2003, 2005 Sun Microsystems, Inc.
8 * See the file "license.terms" for information on usage and
9 * redistribution of this file, and for a DISCLAIMER OF ALL
17 <title>FreeTTS 1.2 - A speech synthesizer written entirely in the
18 Java(TM) programming language</title>
21 <body bgcolor="white">
23 <table bgcolor="#bbbae2" border="0" width="100%">
26 <td align="center" width="100%">
27 <h2><i>FreeTTS 1.2</i> - A speech synthesizer written
28 entirely in the Java<sup><font size="-1">TM</font></sup>
29 programming language</h2>
36 <table border="0" width="100%">
39 <td bgcolor="#eeeeff" valign="top" width="20%">
41 <p><br><big><b>Listen to <i>FreeTTS!</i></b></big></p>
43 <p><font size="-1"><b>Talking clock (16k voice):</b><br>
44 <a href="audio/12-35.au">AU</a> format<br>
45 <a href="audio/12-35.wav">WAV</a> format </font></p>
46 <p><font size="-1"><b>Talking machine (8k):</b><br>
47 <a href="audio/talkforever.au">AU</a> format<br>
48 <a href="audio/talkforever.wav">WAV</a> format </font></p>
49 <p><font size="-1"><b>Talking machine (16k):</b><br>
50 <a href="audio/talkforever16.au">AU</a> format<br>
51 <a href="audio/talkforever16.wav">WAV</a> format </font></p>
52 <p><font size="-1"><b>Susie (16k):</b><br>
53 <a href="audio/shoeshineshop.au">AU</a> format<br>
54 <a href="audio/shoeshineshop.wav">WAV</a> format </font></p>
55 <p><font size="-1"><b>Cookie Cooks (16k):</b><br>
56 <a href="audio/cookiecooks.au">AU</a> format<br>
57 <a href="audio/cookiecooks.wav">WAV</a> format </font></p>
58 <p><font size="-1"><b>Tricky Tokenizing (16k):</b><br>
59 <i>"For 3/4 or 75% of his time, Dr. Walker practices for $90 a
60 visit on Dr. Dr., next to King Philip X of St. Lameer St. in
62 <a href="audio/complex.au">AU</a> format<br>
63 <a href="audio/complex.wav">WAV</a> format<br>
65 <p><font size="-1"><b>Thanks! (16k MBROLA):<br>
66 </b><a href="audio/thanks.au">AU</a> format<br>
67 <a href="audio/thanks.wav">WAV</a> format<br>
70 <center><big><b><small>WebStartClock</small> </b></big></center>
72 <div align="left"><small>A clock that uses FreeTTS to announce
77 <div align="center"><a href="../WebStartClock/clock.jnlp"><small>
78 <img src="images/TinyWebStartClock.jpg" alt="WebStart Clock"
79 width="90" height="55"></small></a><br>
82 <div align="center"><a href="../WebStartClock/clock.jnlp">
83 <small>Launch WebStartClock</small></a><b> </b> </div>
86 <center><b><font>FreeTTS Links</font></b></center>
87 <b><font size="-1"><br>
88 <a href="http://sourceforge.net/projects/freetts">Project Page</a><br>
89 <a href="https://sourceforge.net/forum/?group_id=42080">Forums</a><br>
90 <a href="http://sourceforge.net/project/showfiles.php?group_id=42080">
92 <a href="http://sourceforge.net/cvs/?group_id=42080">CVS Repository</a> <br>
96 <center><a href="http://www.sourceforge.net">
97 <img src="http://sourceforge.net/sflogo.php?group_id=40785&type=1"
98 width="88" height="31" border="0" alt="SourceForge Logo"></a>
99 <br>Hosted by SourceForge.net</center>
105 <td valign="top"><br><br>
106 <b><i>Welcome!</i></b> Thank you for your interest in <i>FreeTTS</i>.
108 <h3>General Information</h3>
110 <li><a href="#what_is_freetts">Introduction</a></li>
111 <li><a href="#who_authors">Authors</a></li>
112 <li><a href="../RELEASE_NOTES">Release Notes</a></li>
113 <li><a href="#possible_uses">Possible uses of FreeTTS</a></li>
114 <li><a href="#contribute">How to contribute to FreeTTS</a></li>
115 <li><a href="#acknowledgments">Acknowledgments</a></li>
118 <h3>Installation</h3>
120 <li><a href="#download_and_install">Downloading and Installing</a></li>
121 <li><a href="#quick_start">Quick Start</a></li>
122 <li><a href="#how_app">Building Applications with FreeTTS</a></li>
123 <li><a href="#how_build">Building FreeTTS</a></li>
124 <li><a href="#how_test">Testing FreeTTS</a></li>
129 <li><a href="#run_demo">Running the Demos</a></li>
130 <li><a href="#test_program">FreeTTS Test Program</a></li>
135 <li><a href="#festvox">Importing Voice Data from FestVox</a></li>
138 <h3>Documentation</h3>
140 <li><a href="#freetts_api">API documentation</a></li>
141 <li><a href="#writing_software">Writing software using FreeTTS</a></li>
142 <li><a href="#freetts_guide">Programmer's Guide</a></li>
144 <h3>Frequently Asked Questions</h3>
146 <li><a href="#why_jdk1.4">Why must I use Java<sup><font size="-1">
147 TM</font></sup> 2 SDK, Standard Edition, v 1.4?</a></li>
148 <li><a href="#performance">How does FreeTTS perform?</a></li>
149 <li><a href="#voices_available">What voices are available?</a></li>
150 <li><a href="#why_sound_bad">Why does the diphone synthesizer
151 sound so bad?</a></li>
152 <li><a href="#How_do_I_create_a_new_voice_How_do_I">How do I
153 create a new voice?</a>
155 <li><a href="#import_voice_data">How do I import new voice data
156 from Festival and FestVox?</a></li>
157 <li><a href="#How_do_I_add_support_for_a_voice_with">How do I
158 add support for a language other than English?</a></li>
159 <li><a href="#output_to_file">How do I output synthesized
160 speech to an audio file?</a></li>
161 <li><a href="#is_full_jsapi">Does FreeTTS provide full support
162 for the JSAPI 1.0 specification?</a></li>
163 <li><a href="#no_jsapi">Why do I get a NoClassDefFoundError
164 when I try to run a demo?</a></li>
165 <li><a href="#old_java">Why do I get an
166 UnsupportedClassVersionError when I try to run a demo?</a></li>
167 <li><a href="#What_does_the_message_Cant_find">What does the
168 message "Can't find diphone xx-yy" mean?</a></li>
169 <li><a href="#I_get_no_sound_when_I_run_one_of_the">I get no
170 sound when I run one of the FreeTTS demos. Why?</a></li>
171 <li><a href="#Can_I_use_FreeTTS_in_an_applet">Can I use FreeTTS
172 in an applet?</a></li>
173 <li><a href="#Can_I_use_FreeTTS_with_JavaTM_Web_Start">Can I
174 use FreeTTS with Java<sup>TM</sup> Web Start</a></li>
175 <li><a href="#How_do_I_bypass_speech_properties">
176 How do I bypass the need for <code>speech.properties</code>?</li>
177 <li><a href="#What_does_the_message_Line_unavailable">What does
178 the message "Line unavailable" mean?</a></li>
179 <li><a href="#where_is_recognizer">Where is the speech
190 <h3>General Information about FreeTTS</h3>
192 <li><a name="what_is_freetts"><b>Introduction</b></a>
193 <p>FreeTTS is a speech synthesis system written entirely in the
194 Java<sup><font size="-1">TM</font></sup> programming language. It
195 is based upon <a href="http://www.cmuflite.org">Flite</a>: a
196 small run-time speech synthesis engine developed at Carnegie
197 Mellon University. Flite is derived from the
198 <a href="http://www.cstr.ed.ac.uk/projects/festival/">Festival</a>
199 Speech Synthesis System from the University of Edinburgh and the
200 <a href="http://festvox.org/">FestVox</a> project from Carnegie
201 Mellon University.</p>
203 <p>This release of FreeTTS includes:</p>
205 <li>Core speech synthesis engine</li>
206 <li>Support for a number of voices:</li>
208 <li>an 8khz diphone, male, US English voice</li>
209 <li>a 16khz diphone, male US English voice</li>
210 <li>a 16khz limited domain, male US English voice</li>
212 <li>Support for <a href="../tools/FestVoxToFreeTTS/README.html">
213 importing voices from FestVox (US English only)</a></li>
214 <li>Specific support for <a href="../tools/ArcticToFreeTTS/README.html">
215 importing CMU ARCTIC voices from FestVox (US English only)</a></li>
216 <li><a href="../mbrola/README.html">Support for MBROLA voices</a>
217 (downloaded separately):</li>
219 <li>a 16khz female, US English voice</li>
220 <li>two 16khz male US English voices<br>
223 <li>Partial <a href="jsapi_setup.html">support for JSAPI 1.0</a></li>
224 <li>Extensive <a href="../javadoc/index.html">API documentation</a></li>
225 <li>Several <a href="#run_demo">demo applications</a></li>
229 <li><a name="who_authors"><b>Authors</b></a>
230 <p>FreeTTS was built by the
231 <a href="http://research.sun.com/research/speech/index.html">
232 Speech Integration Group</a> of <a href="http://research.sun.com">
233 Sun Microsystems Laboratories</a>:</p>
235 <li>Willie Walker, Manager and Principal Investigator</li>
236 <li>Paul Lamere, Staff Engineer</li>
237 <li>Philip Kwok, Member of Technical Staff</li>
240 <p>You can contact the Sun Microsystems Speech Integration Group
241 through the <a href="https://sourceforge.net/forum/?group_id=42080">
242 FreeTTS Forums</a>. </p>
244 <p>FreeTTS is based on <a href="http://www.cmuflite.org">CMU's Flite</a>,
251 <p>Kevin and Alan generated the data used by FreeTTS. In addition,
252 Kevin is the voice behind the diphone voices (kevin 8k, kevin 16k),
253 and Alan is the voice behind the speaking clock.
255 <p>Support for MBROLA voice output was contributed by Marc
256 Schröder, text-to-speech Researcher in the <a
257 href="http://www.dfki.de/lt">Language Technology Lab at DFKI</a>,
258 Saarbrücken, Germany.
260 <p>Support for <a href="../tools/FestVoxToFreeTTS/README.html">
261 importing FestVox voices into FreeTTS</a>, and support for
262 dynamically discovering and loading voices was developed by David
263 Vos, a Sun Microsystems Laboratories student intern.
266 <li><a name="possible_uses"><b>Possible uses of FreeTTS</b></a>
267 <p>Here are a few possible uses of FreeTTS: </p>
269 <li><i><b>JSAPI 1.0 Synthesizer.</b></i> FreeTTS provides
270 partial support for the
271 <a href="jsapi_setup.html">
272 Java Speech API</a> (JSAPI) 1.0 specification. </li>
273 <li><i><b>Remote TTS Server.</b></i> FreeTTS can serve as a back-end
274 text-to-speech engine that works with a speech/telephony system,
275 or does the "heavy lifting" for a wireless PDA. Our
276 <a href="../demo/freetts/ClientServer/README.html">
277 client/server demo</a> shows how this can be done. </li>
278 <li><i><b>Desktop TTS engine.</b></i> You can use FreeTTS as your
279 workstation/desktop TTS engine. For example, our
280 <a href="../demo/JSAPI/Emacspeak/README.html">
281 Emacspeak demo</a> works right out of the box with
282 <a href="http://www.cs.cornell.edu/Info/People/raman/emacspeak/emacspeak.html">
283 Emacspeak</a>.<br></li>
284 <li><i><b>Downloadable Web Application.</b></i> You can use FreeTTS
285 with Java Web Start. Our
286 <a href="../demo/JSAPI/WebStartClock/README.html">
287 WebStartClock demo</a> provides an example of how to do this.<br>
292 <li><a name="contribute"><b>How to contribute to FreeTTS</b></a>
293 <p>We welcome contributions to FreeTTS. If you have code or fixes
294 you would like to submit, please contact the FreeTTS team at
295 <a href="mailto:freetts-contacts@sourceforge.net">
296 freetts-contacts@sourceforge.net</a>. The terms for contributing
297 code are generous and are as follows:</p>
299 <li>Your code must be made available under the same BSD-style
300 <a href="../license.terms">license</a> agreement as FreeTTS.</li>
301 <li>You may place your own copyright in your source files.</li>
302 <li>You must sign and return the <a href="ContributorsAgreement.pdf">
303 Contributor's Agreement</a> to the address specified in the
304 Contributor's Agreement.</li>
305 <li>If you wish, we will add you to the "Acknowledgments" section on
306 the FreeTTS front page.</li>
309 <p>These terms are for your and our protection and help ensure FreeTTS
310 continues to be a viable and successful open source project.</p>
313 <li><a name="acknowledgments"><b>Acknowledgments</b></a>
314 <p>Refer to <a href="../acknowledgments.txt">acknowledgments</a> to
315 see the list of people and organizations we would like to thank for
316 making this project possible. Most of all, we thank our management for
317 letting us do this, and Alan Black and Kevin Lenzo for doing Flite. </p>
323 <h3>Installation</h3>
325 <p>FreeTTS has been tested on the Solaris<sup>
326 <font size="-1">TM</font></sup> Operating Environment, Mac OS X,
327 Linux and Win32 operating systems.
329 <p>Running, building, and testing FreeTTS requires the
330 Java<sup>TM</sup> 2 SDK, Standard Edition, 1.4. You can download
331 the developer kit from <a href="http://java.sun.com/j2se/1.4/">
332 http://java.sun.com/j2se/1.4/</a>. Make sure you set your
333 JAVA_HOME environment variable to point your installation (e.g.,
334 JAVA_HOME=/usr/java/j2sdk1.4.0).
336 <h4><a name="download_and_install">Downloading and Installing</a></h4>
338 <p>FreeTTS has three packages available for
339 <a href="http://sourceforge.net/project/showfiles.php?group_id=42080">
342 <li><b>bin</b>: provides the jar files, documentation, and demos</li>
343 <li><b>src</b>: provides the sources, documentation, and demos</li>
344 <li><b>tst</b>: provides the JUnit and regression tests; requires the src
348 <p>If you plan on just creating applications with FreeTTS, the <b>bin</b>
349 package will be sufficient. If you plan on making modifications to FreeTTS
350 itself, however, you should use the <b>src</b> package. The <b>tst</b>
351 package will be useful if you wish to make sure any changes you made to
352 FreeTTS did not introduce any bugs or regressions.
354 <p>Download and unpack the package(s) appropriate for what you want to do.
355 Depending upon what you download, you will end up with all or part of the
356 following directory structure:</p>
359 bin Binaries for the demos
360 build.xml Ant file for building the sources
362 de Sources for MBROLA support
363 demo Sources for the demos
364 demo.xml Ant file for building the demos
365 docs System documentation
366 javadoc Javadoc for FreeTTS
368 mbrola Support for MBROLA
369 tests Sources and scripts for JUnit and regression tests
370 tools Tools for importing CMU ARCTIC and FestVox voice data
373 <p>FreeTTS makes liberal use of the "Class-Path" attribute of a jar
374 Manifest. As such, you need to place very little in your classpath
375 when you run applications. The only things you need to do are the
378 <li>Place the <b>lib</b> directory anywhere you want.
379 <li>Make sure <b>lib/freetts.jar</b> is in your classpath.
382 <p>Note that the <a href="#run_demo">demonstration applications</a>
383 also use a jar Manifest that uses the "Class-Path" attribute. The
384 build places the jar files for FreeTTS in the <b>lib</b> directory, and
385 the jar files for the demos in the <b>bin</b> directory. The jar manifests
386 for the demos depend on the <b>lib</b> and <b>bin</b> directories being
387 in the same top level directory. If you change this, the demos may not
390 <h4><a name="quick_start">Quick Start</a></h4>
391 <p>If you are not interested in building FreeTTS, then you only need to
392 download the FreeTTS binary distribution from the
393 <a href="http://sourceforge.net/project/showfiles.php?group_id=42080">
394 FreeTTS Download Page</a>. Once you've downloaded and unpacked
395 the FreeTTS binary distribution, perform the following steps:
397 <li><a href="jsapi_setup.html">Set up support for the Java Speech API
400 <li><a href="#run_demo">Run any of the demos</a>.
404 <h4><a name="how_app"><b>Building Applications with FreeTTS</b></a></h4>
406 <p>We have provided a number of <a href="#run_demo">demonstration
407 applications</a> that use FreeTTS. We highly suggest that you use
408 these as examples for how to create your own applications. As noted
409 above, FreeTTS makes liberal use of the "Class-Path" attribute of a jar
410 Manifest. As such, you need to place very little in your classpath
411 when you run applications. The only things you need to do are the
414 <li>Place the <b>lib</b> directory anywhere you want.
415 <li>Make sure <b>lib/freetts.jar</b> is in your classpath.
418 <h4><a name="how_build"><b>Building FreeTTS</b></a></h4>
419 <p>The prerequisites for building FreeTTS are as follows:
421 <li><b>FreeTTS Source Distribution</b>. Download from
422 <a href="http://sourceforge.net/project/showfiles.php?group_id=42080&release_id=65759">the FreeTTS download page</a>.
425 <li><b> JSAPI 1.0 specification implementation</b>. The JSAPI 1.0
426 specification implemention comes with the FreeTTS Source
427 Distribution. All you need to do is <a href="jsapi_setup.html">
428 set up JSAPI support</a>.
431 <li><b>Java<sup><font size="-1">TM</font></sup> 2 SDK, Standard
432 Edition, v1.4</b> available at
433 <a href="http://java.sun.com/j2se/1.4/">
434 http://java.sun.com/j2se/1.4/</a> (all platforms). After you
435 have downloaded and installed the SDK, remember to set your
436 <code><b>JAVA_HOME</b></code> environment variable to point to
437 where you installed it.
440 <li><b>Apache Ant 1.5.3</b> or
441 better. After you install ant, sure the "ant" command is in
442 your path. Visit the <a href="http://ant.apache.org/">Apache
443 Ant site</a> to get ant. <b>NOTE:</b> As you can see, we are
444 no longer using GNUMake.
447 <li><b>JUnit Version 3.7</b>. available at
448 <a href="http://www.junit.org">http://www.junit.org</a>
449 (all platforms). <b>IMPORTANT</b>: copy the <code>junit.jar</code>
450 to the <code>lib</code> directory of your Apache Ant installation.
454 <p>To build FreeTTS, merely type the following in a command prompt
455 situated at the top level FreeTTS directory:
460 <p>This executes the <a href="http://ant.apache.org/">Apache Ant</a>
461 command to build the FreeTTS classes, voices, demos, and jar files.
462 The output will be placed under the <code>bld</code> directory.
464 <p>We have also provided a number of ant targets for convenience:
466 <p><code>ant clean</code>: deletes all the output from the build
467 to give you a fresh start
468 <br><code>ant javadoc</code>: builds the javadoc documentation and
469 places the results in the <code>javadoc</code> directory
470 <br><code>ant junit</code>: for testing only; runs the JUnit tests
471 (see <a href="#how_test">Testing FreeTTS</a>)
474 <h4><a name="how_test"><b>Testing FreeTTS</b></a></h4>
476 <p>FreeTTS includes a number of unit and regression tests. The unit
477 tests verify that critical routines are working properly. The
478 regression tests verify that the output of FreeTTS matches what is
481 <p>Although we test FreeTTS regularly as part of our development process,
482 testing FreeTTS is optional for you. The prerequisites for testing
483 FreeTTS are as follows:
486 <li><b>Follow Instructions for <a href="#how_build">Building FreeTTS</a></b>.
489 <li><b>FreeTTS Test Distribution</b>. In addition to the sources, you
490 must also download the test distribution from
491 <a href="http://sourceforge.net/project/showfiles.php?group_id=42080&release_id=65759">the FreeTTS download page</a>.
494 <li><b>UNIX Scripting tools</b>. The regression tests use a number of
495 UNIX tools including: <code>sed, awk, diff,</code>and <code>wc</code>.
496 For Windows users, these tools are available with the Cygwin
497 (<a href="http://www.cygwin.com">http://www.cygwin.com</a>)
498 package. As part of the Cygwin install, make sure you select
499 the "make" package from the "Devel" category, the "findutils"
500 package from the "Base" category, and the "zip" package from
501 the "Archive" category. In addition, make sure you modify
502 your PATH environment variable to include the cygwin/bin
503 directory before any Windows directories.
507 <p>To run the units tests for FreeTTS, merely type the following in a command
508 prompt situated at the top level FreeTTS directory:
510 <p><code>ant junit</code>
512 <p>The test output should be self explanatory.
514 <p>To run the regression tests, merely type the following in a command
515 prompt situated at the FreeTTS <code>tests</code> directory:
517 <code>./regression.sh</code>
519 <p>The test output should be self explanatory.
523 <h3><a name="run_demo">Demos</a></h3>
524 <p>FreeTTS includes a number of demos. Each demo directory has Java
525 source file(s) containing the demo source and a 'README.html'
526 file with brief instructions as to how to run the demo.</p>
529 <li><a href="../demo/JSAPI/HelloWorld/README.html"><b>
530 JSAPI/HelloWorld</b></a>: uses the JSAPI 1.0 Synthesis interface
531 to speak "Hello, World".
534 <li><a href="../demo/JSAPI/MixedVoices/README.html"><b>
535 JSAPI/MixedVoices</b></a>: demonstrates using multiple voices
536 and speech synthesizers in a coordinated fashion using JSAPI
540 <li><a href="../demo/JSAPI/Player/README.html"><b>JSAPI/Player</b></a>:
541 Swing-based GUI that allows the user to monitor and manipulate a
542 JSAPI 1.0 Speech Synthesizer.
545 <li><a href="../demo/JSAPI/JTime/README.html"><b>JSAPI/JTime</b></a>:
546 JSAPI program that uses a limited-domain, high quality voice to
550 <li><a href="../demo/JSAPI/Emacspeak/README.html"><b>JSAPI/Emacspeak</b></a>:
551 uses JSAPI 1.0 to provide a text-to-speech server for Emacspeak.
554 <li><b><a href="../demo/JSAPI/WebStartClock/README.html">
555 JSAPI/WebStartClock</a></b>: JSAPI talking clock that can be
556 downloaded from the web using Java Web Start.
559 <li><a href="../demo/freetts/HelloWorld/README.html"><b>
560 freetts/HelloWorld</b></a>: low-level (non-JSAPI) program that
561 speaks a greeting to the world.
564 <li><a href="../demo/freetts/ClientServer/README.html"><b>
565 freetts/ClientServer</b></a>: low-level (non-JSAPI) socket-based
566 TTS server with sample clients written in the C programming
567 language and the Java programming language.
571 <p><b>NOTE</b>: The binaries for the demos exist as jar files in the
572 bin directory of the binary distribution. If you only wish to
573 run the demos, follow only the "Running" instructions for each
574 demo. If you want to compile the demos, you must get the sources
575 from the FreeTTS source distribution available on the
576 <a href="http://sourceforge.net/project/showfiles.php?group_id=42080">
577 FreeTTS Download Page</a>.
579 <p>Note also that the <a href="#run_demo">demonstration applications</a>
580 also use a jar Manifest that uses the "Class-Path" attribute. The
581 build places the jar files for FreeTTS in the <b>lib</b> directory, and
582 the jar files for the demos in the <b>bin</b> directory. The jar manifests
583 for the demos depend on the <b>lib</b> and <b>bin</b> directories being
584 in the same top level directory. If you change this, the demos may not
589 <h3><a name="test_program"></a>FreeTTS Test Program</h4>
590 <p>The FreeTTS distribution includes a program that will allow you to
591 test many of the features of FreeTTS. This program is started by
592 running the following command:
594 <p><code>java -jar lib/freetts.jar</code>.
598 freetts - exercise the FreeTTS synthesis sytem<br><br>
600 The lib/freetts.jar contains a main entry point that allows a user to
601 interactively control the FreeTTS synthesizer. When invoked with no
602 arguments, freetts will read text from the command line and convert
603 the text to speech. freetts can also be used to convert text from a
604 file to speech. It includes options that allow you to redirect the
605 audio to file, as well as a number of metrics and debugging options.
608 There are a number of options that can be used to affect the operation
609 of freetts as described here:
611 -detailedMetrics: turn on detailed metrics
612 -dumpAudio file : dump audio to file
613 -dumpAudioTypes : dump the possible output types
614 -dumpMultiAudio file : dump audio to file
615 -dumpRelations : dump the relations
616 -dumpUtterance : dump the final utterance
617 -dumpASCII file : dump the final wave to file in ASCII form (for testing)
618 -file file : speak text from given file
619 -lines file : render lines from a file
620 -help : shows usage information
621 -metrics : turn on metrics
622 -run name : sets the name of the run
623 -silent : don't say anything
624 -streaming : use streaming audio player
625 -text say me : speak given text (should be last argument)
626 -url path : speak text from given URL
627 -verbose : verbose output
628 -version : shows version number
629 -voice VOICE : kevin, kevin16, mbrola_us1, mbrola_us2, or mbrola_us3
630 -voiceInfo : print detailed voice info
633 <P><i>Interactive mode:</i>
635 % java -jar lib/freetts.jar
636 Enter text: Hello World.
637 <i><text is spoken></i>
641 <p><i>Speaking text from a command line:</i>
643 % java -jar lib/freetts.jar -text hello world
644 <i><text is spoken></i>
646 <p><i>Speaking text from a file:</i>
648 % java -jar lib/freetts.jar -file my_email.txt
649 <i><text is spoken></i>
651 <p><i>Selecting an alternate voice:</i>
653 % java -jar lib/freetts.jar -voice kevin16 -text Hello World
654 <i><text is spoken></i>
656 <p><i>Redirecting audio to a file:</i>
658 % java -jar lib/freetts.jar -dumpAudio hello.wav -text Hello World
666 <h4><a name="festvox">Importing Voice Data from FestVox</a></h4>
667 <p>FreeTTS now has the ability to import voice data from FestVox (US
668 English only). With this, you can record your own voice using the
669 FestVox tools, and then turn the resulting data into a FreeTTS voice.
671 <p>Visit our <a href="../tools/FestVoxToFreeTTS/README.html">
672 FestVoxToFreeTTS</a> page to learn how to create your own
673 voices for FreeTTS. It's not trivial, and it requires using
674 Festival and FestVox.
676 <h4><a name="festvox">Importing CMU ARCTIC Voice Data</a></h4>
677 <p>FreeTTS now has the ability to import CMU ARCTIC voice data from
678 FestVox (US English only). The CMU ARCTIC voices are quite large
679 and require a little extra work, so we created tools just for these
682 <p>Visit our <a href="../tools/ArcticToFreeTTS/README.html">
683 ArcticToFreeTTS</a> page to learn how to import the CMU ARCTIC voices
689 <h3>Documentation</h3>
690 <ul class="noindent">
691 <li><a name="freetts_api"><b>API documentation</b></a>:
692 The <a href="../javadoc/index.html">FreeTTS API</a> contains the
693 engine documentation.
696 <li><a name="writing_software"><b>Writing software with FreeTTS</b></a>:
697 We recommend that you use the
698 <a href="http://java.sun.com/products/java-media/speech/forDevelopers/jsapi-doc/index.html">
699 Java Speech API (JSAPI) 1.0</a> to interface with FreeTTS. The
700 JSAPI interface provides the best method of controlling and
701 using FreeTTS. The <a href="#run_demo">JSAPI demos</a> provide
702 a set of examples that show how to select a FreeTTS synthesizer
706 <li><a name="freetts_guide"><b>Programmer's Guide</b></a>:
707 The <a href="ProgrammerGuide.html">Programmer's Guide</a> provides
708 a view of the FreeTTS internals. This is meant for people who wish
709 to enhance FreeTTS itself.
715 <h3>Frequently Asked Questions</h3>
717 <li><a name="why_jdk1.4"><b>Why must I use Java 2 SDK, Standard
718 Edition, v1.4?</b></a>
719 <p>Some of the many compelling reasons to use Java 2 SDK, Standard
720 Edition, v1.4. are: </p>
722 <li><b>New IO package</b> - Java 2 SDK, Standard Edition, v1.4
723 provides a new IO (<code><b>java.nio</b></code>) package
724 that provides memory mapped file I/O. This package
725 drastically reduces the load times of the FreeTTS
727 <li><b>Regular expressions</b> - Java 2 SDK, Standard Edition,
728 v1.4 provides a new package for regular expression matching
729 (<code><b>java.util.regex</b></code>). They are used in the
730 FreeTTS text normalization step.</li>
731 <li><b>Assert Facility</b> - Java 2 SDK, Standard Edition, v1.4
732 added the new <code>assert</code> keyword to ensure that
733 certain conditions are satisfied before continuing
734 execution. FreeTTS uses this keyword in all stages of speech
736 <li><b>Compiler Optimizations</b> - Java 2 SDK, Standard
737 Edition, v1.4 has numerous compiler optimizations that
738 produce faster and more compact code. For example, with the
739 <code><b>-server</b></code> switch, byte codes are optimized
740 to eliminate bounds checking on array accesses whenever
745 <li><a name="performance"><b>How does FreeTTS perform?</b></a>
746 <p>We compared the performance of FreeTTS with that of Flite
747 (original C version) on a machine with this configuration:</p>
749 <li>single 296MHz CPU SPARC v9 processor</li>
750 <li>Solaris<sup><font size="-1">TM</font></sup> 8 in 64-bit mode</li>
751 <li>Java 2 SDK, Standard Edition, v 1.4 </li>
754 <p>We rendered the first two chapters of <i>Alice's Adventures in
755 Wonderland</i> by Lewis Carroll (about 20 minutes of text), and
756 the entire text of Jules Verne's <i>Journey to the Center of
757 the Earth</i> (about 8 hours of text) using both Flite and
758 FreeTTS. The results are summarized below: </p>
760 <p><table border="1" cellspacing="0" cellpadding="1" width="60%">
763 <td bgcolor="#ccccee"> <b>Single CPU 296MHz SPARC v9</b></td>
764 <td bgcolor="#ccccee"><b>Flite</b></td>
765 <td bgcolor="#ccccee"><b>FreeTTS</b></td>
768 <td bgcolor="#ddddee">Loading Time for 'Alice' text</td>
773 <td bgcolor="#ddddee">Processing Time for 'Alice' text</td>
778 <td bgcolor="#eeeeff">Loading Time for 'Journey' text</td>
783 <td bgcolor="#eeeeff">Processing Time for 'Journey' text</td>
788 <td bgcolor="#ddddee">Time to first Sample (10 word sentence)</td>
795 <p>On a 2-CPU system with the following configuration: </p>
797 <li> Dual 360MHz CPU SPARC v9 Processor system</li>
798 <li>Solaris<sup><font size="-1">TM</font></sup> 8 in 64-bit mode</li>
799 <li>Java 2 SDK, Standard Edition, v 1.4 </li>
802 <p>The results are summarized below: </p>
803 <p><table border="1" cellspacing="0" cellpadding="1" width="60%">
806 <td bgcolor="#ccccee"> <b>Dual CPU 360MHz SPARC v9</b></td>
807 <td bgcolor="#ccccee"><b>Flite</b></td>
808 <td bgcolor="#ccccee"><b>FreeTTS</b></td>
811 <td bgcolor="#ddddee">Loading Time for 'Alice' text</td>
816 <td bgcolor="#ddddee">Processing Time for 'Alice' text</td>
821 <td bgcolor="#eeeeff">Loading Time for 'Journey' text</td>
826 <td bgcolor="#eeeeff">Processing Time for 'Journey' text</td>
831 <td bgcolor="#ddddee">Time to first Sample (10 word sentence)</td>
839 <li><a name="voices_available"><b>What voices are available?</b></a>
840 <p>Currently, the distribution comes with these 3 voices:</p>
842 <li>a low quality, unlimited domain, 8kHz diphone voice, called
844 <li>a medium quality, unlimited domain, 16kHz diphone voice, called
846 <li>a high quality, limited domain, 16kHz cluster unit voice,
850 <p>Each of the <a href="#run_demo">demos</a> describes how to select
853 <p>FreeTTS also interfaces with the MBROLA synthesizer and can
854 use MBROLA voices. There are three US English MBROLA voices
857 <li>16kHz female (mbrola1)</li>
858 <li>16kHz male (mbrola2)</li>
859 <li>16kHz male (mbrola3)</li>
862 <p>See <b><a href="../mbrola/README.html">Installing MBROLA
863 Voices</a> </b>for more details on installing support for
866 <p><b>NOTE</b>: FreeTTS does not support MBROLA on
867 the Windows platform.
870 <li><a name="why_sound_bad"><b>Why does the diphone synthesizer sound
872 <p>First of all, we're happy to say you can now
873 <a href="../tools/FestVoxToFreeTTS/README.html">create your own
874 voices for FreeTTS</a>, and you can also
875 <a href="../tools/ArcticToFreeTTS/README.html">import CMU
876 ARCTIC voices</a>. It's not trivial, and it requires using
877 Festival and FestVox.
879 <p>However, the ability to create your own voices doesn't explain
880 why the current voices sound so bad. FreeTTS uses the same
881 algorithms and voice data from Flite. Here is what the Flite
882 README says about voice quality:</p>
885 <i>"So you've eagerly downloaded flite, compiled it and run it,
886 now you are disappointed that is doesn't sound wonderful,
887 sure its fast and small but what you really hoped for was
888 the dulcit tones of a deep baritone voice that would make
889 you desperately hang on every phrase it sang. But instead
890 you get an 8Khz diphone voice that sounds like it came from
891 the last millenium.</i>
892 <p><i>Well, first, you are right, it is an 8KHz diphone voice
893 from the last millenium, and that was actually deliberate.
894 As we developed flite we wanted a voice that was stable and
895 that we could directly compare with that very same voice in
896 Festival. Flite is an *engine*. We want to be able take
897 voices built with the FestVox process and compile them for
898 flite, the result should be exactly the same quality (though
899 of course trading the size for quality in flite is also an
900 option). The included voice is just an sample voice that
901 was used in the testing process. We have better voices in
902 Festival and are working on the conversion process to make
903 it both more automatic and more robust and tunable, but we
904 haven't done that yet, so in this first beta release. This
905 old poor sounding voice is all we have, sorry, we'll provide
906 you with free, high-quality, scalable, configurable, natural
907 sounding voices for flite, in all languages and dialects,
908 with the tools to built new voices efficiently and robustly
909 as soon as we can. Though in the mean time, a few higher
910 quality voices will be released with the next
916 <li><b><a name="How_do_I_create_a_new_voice_How_do_I"></a>
917 How do I create a new voice?</b>
918 <p>As of FreeTTS 1.2, we provide a
919 <a href="../tools/FestVoxToFreeTTS/README.html">set of tools</a>
920 that allow you to import FestVox voice data directly. As such,
921 you need to use Festival and FestVox to record your data. See
922 <a href="../tools/FestVoxToFreeTTS/README.html">our documentation</a>
923 for more detail on how to do this.
926 <li><a name="import_voice_data"><b>How do I import new voice data
927 from Festival and FestVox?</b></a>
928 <p>As of FreeTTS 1.2, we provide a
929 <a href="../tools/FestVoxToFreeTTS/README.html">set of tools</a>
930 that allow you to import FestVox voice data directly, and we
931 also have tools that allows you to <a
932 href="../tools/ArcticToFreeTTS/README.html">import CMU ARCTIC voices</a>.
935 <li><b><a name="How_do_I_add_support_for_a_voice_with"></a>
936 How do I add support for a language other than English?</b>
937 <p>This is not a trivial task as it requires a lexicon for the language
938 as well as various statistical data about the language. The document
939 <a href="http://festvox.org/festvox/festvox_toc.html">
940 http://festvox.org/festvox/festvox_toc.html</a> describes this
944 <li><a name="output_to_file"><b>How do I output synthesized speech to
945 an audio file?</b></a>
946 <p>With <code>the <a href="#test_program">FreeTTS</a></code>
947 <a href="#test_program">test program</a>, you can dump audio output
948 to a file using the <code>-dumpAudio</code> option: </p>
949 <p><code><b>-dumpAudio filename</b></code></p>
950 <p>The audio file format can be .wav, .au, or .aif, depending on
951 the file name. For example, if <code>"filename"</code> is
952 "foo.au" the file format will be .au. </p>
953 <p>The <code><b>-dumpMultiAudio</b></code> option (same format as
954 <code>-dumpAudio</code>) dumps audio to multiple audio files,
955 one file per utterance. In this case, if
956 <code>"filename"</code> is "foo.wav", the files are named
957 foo0.wav, foo1.wav, foo2.wav, etc.. Again, the file format is
958 determined by the extension of the filename.<br>
960 <p>If you are writing your own application, you can set the audio player
961 of the FreeTTS Voice to one of the file-based audio players.
962 See the FreeTTS API documentation for:
965 <li><a href="../javadoc/com/sun/speech/freetts/Voice.html">Voice</a> -
966 describes how to set the
967 <a href="../javadoc/com/sun/speech/freetts/audio/AudioPlayer.html">
968 AudioPlayer</a> for a voice. You can also set the
969 default AudioPlayer via the command line by defining the
970 "com.sun.speech.freetts.voice.defaultAudioPlayer" system
971 property. The value of this property must be the name of
972 a class that implements the AudioPlayer interface, and which
973 also has a no-arg constructor.</li><br>
974 <li><a href="../javadoc/com/sun/speech/freetts/jsapi/FreeTTSVoice.html#getVoice()">
975 FreeTTSVoice.getVoice</a> - allows you to get the underlying
976 FreeTTS Voice object from the JSAPI FreeTTSVoice object.
977 NOTE that doing this means you end up straying from the
978 JSAPI specification. An example of how you might use this
979 method is as follows:
981 desc = (SynthesizerModeDesc) synthesizer.getEngineModeDesc();
982 javax.speech.synthesis.Voice[] jsapiVoices = desc.getVoices();
983 javax.speech.synthesis.Voice jsapiVoice = voices[0];
985 /* Non-JSAPI modification of voice audio player
987 if (jsapiVoice instanceof com.sun.speech.freetts.jsapi.FreeTTSVoice) {
988 com.sun.speech.freetts.Voice freettsVoice =
989 ((com.sun.speech.freetts.jsapi.FreeTTSVoice) jsapiVoice).getVoice();
990 freettsVoice.setAudioPlayer(new SingleFileAudioPlayer());
994 <li><a href="../javadoc/com/sun/speech/freetts/audio/SingleFileAudioPlayer.html">
995 SingleFileAudioPlayer</a> - an AudioPlayer that sends all
996 output to a single file.</li><br>
997 <li><a href="../javadoc/com/sun/speech/freetts/audio/MultiFileAudioPlayer.html">
998 MultiFileAudioPlayer</a> - an AudioPlayer that sends each utterance to a separate file.</li>
1002 <li><a name="is_full_jsapi"><b>Does FreeTTS provide full support for
1003 the JSAPI 1.0 specification?</b></a>
1005 <p>No. Since FreeTTS is a speech synthesis system, none of the
1006 JSAPI 1.0 Recognition interfaces are supported. In addition,
1007 FreeTTS supports only a subset of the JSAPI 1.0
1008 javax.speech.synthesis specification. The FreeTTS support
1009 for JSAPI 1.0 has the following restrictions:
1011 <li>JSML Speech Markup is ignored. FreeTTS JSAPI will process
1012 JSML, but currently does not apply the markup to the
1013 generated speech.</li>
1014 <li>FreeTTS does not currently generate the <code>WORD_STARTED</code>
1015 or the <code>MARKER_REACHED</code> events.</li>
1016 <li>Vocabulary management is not supported.</li>
1017 <li>The <code>Synthesizer.phoneme()</code> method is not
1019 <li><code>PropertyVeto</code> exceptions are not always properly
1020 thrown when property change requests are rejected or
1024 <p>Note that the JSAPI specification is undergoing changes. The
1025 official work being done on JSAPI is now for JSAPI 2.0 via the
1026 Java Community Process (JCP) under JSR-113. Read more about
1027 the JCP and JSR-113 at
1028 <a href="http://www.jcp.org">http://www.jcp.org.</a></p>
1031 <li><a name="no_jsapi"><b>Why do I get a NoClassDefFoundError when I
1032 try to run a demo?</b></a>
1033 <p>You probably need to install the JSAPI 1.0 specification
1034 implementation. See the <a href="jsapi_setup.html">JSAPI setup guide</a>
1035 for more details.</p>
1038 <li><a name="old_java"><b>Why do I get an
1039 UnsupportedClassVersionError when I try to run a demo?</b></a>
1040 <p>You probably are trying to run with an older (jdk 1.4) version of
1041 the java runtime. To verify this type:</p>
1042 <pre>% java -version<br></pre>
1043 <p>You should see something like: <code>java version
1044 "1.4.0"</code> or <code> higher</code>. If you see
1045 something older that this, such as <code> java version "1.2.2"
1046 </code> then you are indeed running with an older version of
1047 the java runtime. See <a href="#how_build">Prerequisites
1048 for building and running FreeTTS</a> for more details on what
1049 is needed to run FreeTTS.
1052 <li><b><a name="What_does_the_message_Cant_find"></a>
1053 What does the message "Can't find diphone xx-yy" mean?</b>
1055 <p>There are approximately 45 phonemes in the English
1056 language. FreeTTS uses a technique called diphone synthesis
1057 which uses pairs of phonemes called diphones as an index into
1058 the unit database. Not all phoneme combinations occur in the
1059 English language. FreeTTS, in order to conserve space, does not
1060 include diphone information for diphones that do not naturally
1061 occur. This message indicates that FreeTTS encountered one of
1062 these omitted diphones. This generally occurs when FreeTTS
1063 tries to speak gibberish or non-English text.
1066 <li><b><a name="I_get_no_sound_when_I_run_one_of_the"></a>
1067 I get no sound when I run one of the FreeTTS demos. Why?</b>
1069 <p>If you run HelloWorld or another one of the FreeTTS demos and
1070 receive no messages, then FreeTTS thinks that everything is
1071 working fine, but obviously it's not if you are not hearing
1072 anything. Try running another java application that uses the
1073 javax.sound APIs. Try downloading the javasound demo from
1074 <a href="http://java.sun.com/products/java-media/sound/samples/JavaSoundDemo/" target="_blank">
1075 http://java.sun.com/products/java-media/sound/samples/JavaSoundDemo/</a>
1076 and make sure that it runs (and 'sounds') OK.
1079 <li><b><a name="Can_I_use_FreeTTS_in_an_applet"></a>
1080 Can I use FreeTTS in an applet?</b>
1082 <p>We do not recommend trying this. It's a quagmire of complexity
1083 and the end user experience is not what you expect. The JSAPI
1084 layer of FreeTTS will attempt to access to the
1085 <code>speech.properties</code> file in the user's home
1086 directory. The applet security mechanism will not allow such
1087 access and will throw a SecurityException if such an attempt is
1089 <p>Instead of using FreeTTS in an applet, we highly recommend you
1090 consider using <a href="#Can_I_use_FreeTTS_with_JavaTM_Web_Start">
1094 <li><b><a name="Can_I_use_FreeTTS_with_JavaTM_Web_Start"></a>Can I
1095 use FreeTTS with Java<sup>TM</sup> Web Start?</b>
1097 <p>FreeTTS includes a <a href="../demo/JSAPI/WebStartClock/README.html">
1098 WebStartClock demo</a> application that demonstrates how to write a
1099 Web Start application that uses FreeTTS.
1102 <li><b><a name="How_do_I_bypass_speech_properties"></a>
1103 How do I bypass the need for <code>speech.properties</code>?</b>
1105 <p>JSAPI's <code>Central</code> class looks for a file named
1106 <code>speech.properties</code>. To bypass this, use a
1107 different mechanism. A detailed discussion of this approach
1108 in the FreeTTS Help forum:
1109 <a href="https://sourceforge.net/forum/message.php?msg_id=1549044">
1110 Avoiding the need for speech.properties.</a>
1112 <p>The <a href="../demo/JSAPI/WebStartClock/README.html">
1113 WebStartClock demo</a> also provides an example of how to do this:
1115 public void createSynthesizer() {
1117 SynthesizerModeDesc desc =
1118 new SynthesizerModeDesc(null,
1119 "time", /* use "time" or "general" */
1124 FreeTTSEngineCentral central = new FreeTTSEngineCentral();
1125 EngineList list = central.createEngineList(desc);
1127 if (list.size() > 0) {
1128 EngineCreate creator = (EngineCreate) list.get(0);
1129 synthesizer = (Synthesizer) creator.createEngine();
1131 if (synthesizer == null) {
1132 System.err.println("Cannot create synthesizer");
1135 synthesizer.allocate();
1136 synthesizer.resume();
1138 } catch (Exception e) {
1139 e.printStackTrace();
1145 <li><b><a name="What_does_the_message_Line_unavailable"></a>What does
1146 the message "Line unavailable" mean?</b>
1148 <p>This message is output when FreeTTS tries to allocate sound
1149 resources and the requested resources are unavailable. This can
1150 occur for a number of reasons:
1153 <li>Your computer does not have any sound capabilties, or is not
1154 allowing FreeTTS to access these capabilities</li>
1155 <li>Another application is using the resources and cannot share them</li>
1156 <li>The requested audio format is not suppported by your hardware</li>
1160 <li><a name="where_is_recognizer"><b>Where is the speech recognizer?</b></a>
1161 <p>This is an implementation of a speech synthesizer and does not
1162 include a speech recognizer. Please keep your eye on the
1163 'cmusphinx' project on <a
1164 href="http://sourceforge.net/projects/cmusphinx/">SourceForge</a>
1165 for developments in this area. </p>
1171 See the <a href="../license.terms">license terms</a> and
1172 <a href="../acknowledgments.txt">acknowledgments</a>.<br>
1173 Copyright 2001, 2002, 2003, 2005 Sun Microsystems, Inc. All Rights Reserved.
1174 Use is subject to license terms.