/** * GenSpeakDemo: XML-based Generation plus Speech * * Graham Wilcock, University of Helsinki, 2002 */ // JAXP classes import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; // SAX classes import org.xml.sax.InputSource; import org.xml.sax.SAXException; import org.xml.sax.helpers.ParserAdapter; import org.xml.sax.helpers.XMLReaderFactory; import org.xml.sax.XMLReader; import org.xml.sax.ContentHandler; import org.xml.sax.ext.LexicalHandler; // TraX classes import javax.xml.transform.TransformerFactory; import javax.xml.transform.Transformer; import javax.xml.transform.stream.StreamSource; import javax.xml.transform.stream.StreamResult; import javax.xml.transform.OutputKeys; import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerConfigurationException; import javax.xml.transform.sax.SAXTransformerFactory; import javax.xml.transform.sax.TransformerHandler; import javax.xml.transform.sax.SAXSource; import javax.xml.transform.sax.SAXResult; import javax.xml.transform.dom.DOMResult; // Java I/O classes import java.io.InputStream; import java.io.Reader; import java.io.StringWriter; import java.io.IOException; import java.util.Locale; // JSAPI classes for speech synthesis import javax.speech.Central; import javax.speech.Engine; import javax.speech.synthesis.Synthesizer; import javax.speech.synthesis.SynthesizerModeDesc; import javax.speech.synthesis.SynthesizerProperties; import javax.speech.synthesis.Voice; /** * GenSpeakDemo reads annotation graphs in XML * from files named as command-line arguments, * generates and prints Finnish and English responses, * and speaks the English responses via FreeTTS. * It creates a pipeline of XSL Transformers defined by * (1) AG-GetContent.xsl (content determination) * (2) AG-ResponsePlanner.xsl (response planning) * (3) FI- or EN-Lexicalization.xsl (lexicalization) * (4) FI- or EN-ReferringExps.xsl (referring expressions) * (5) FI- or EN-SurfaceRealizer.xsl (morphological realization). * The generated response is output as speech by * (6) FreeTTS (speech synthesizer) */ public class GenSpeakDemo { public static void main(String[] args) throws TransformerException, TransformerConfigurationException, SAXException, IOException { if (args.length == 0) { System.out.println("Usage: java GenSpeakDemo "); System.exit(1); } System.out.println("\nGenSpeakDemo: Initializing Synthesizer..."); Synthesizer synthesizer = null; try { SynthesizerModeDesc unlimited = new SynthesizerModeDesc( "Unlimited domain FreeTTS Speech Synthesizer from Sun Labs", null, Locale.US, Boolean.FALSE, null); synthesizer = Central.createSynthesizer(unlimited); if (synthesizer == null) { String message = "Can't find synthesizer.\n" + "You need a \"speech.properties\" file at " + System.getProperty("user.home") + "\n"; System.err.println(message); System.exit(1); } synthesizer.allocate(); } catch (Exception e) { e.printStackTrace(); System.exit(1); } for (int i=0; i