你如何使用内置的Java tts?

时间:2012-07-17 20:22:11

标签: java accessibility speech-synthesis

我正在尝试使用java内置语音但是每当我尝试使用它时,当我调用synth.allocate时它会给我一个空指针异常。我在网上看了一些例子,但我仍然得到同样的错误,我看不出我做错了什么

JButton button = new JButton();
    button.addActionListener(new ActionListener(){

        @Override
        public void actionPerformed(ActionEvent arg0) {
            // TODO Auto-generated method stub
            try {
                Synthesizer synth = Central.createSynthesizer(
                    new SynthesizerModeDesc(Locale.ENGLISH));

                synth.allocate();
                synth.resume();

                synth.speakPlainText("Hello, world!", null);

                synth.waitEngineState(Synthesizer.QUEUE_EMPTY);

                synth.deallocate();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });

1 个答案:

答案 0 :(得分:2)

您的系统可能没有安装Locale.ENGLISH的合成器。这反过来会导致Central.createSynthesizer()返回null,这将导致synth.allocate()的空指针异常。

在调用Central.createSynthesizer()之前,您可能需要调用Central.availableSynthesizers()来查找系统上安装的合成器。

另外,作为一个快速测试,您可以尝试Locale.US而不是Locale.ENGLISH,看看它是否有效......这只是猜测。

我看到FreeTTS(http://freetts.sourceforge.net/docs/index.php)被描述为Java Speech接口的实现。安装可能会有所帮助。