1

我正在尝试使用 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();
            }
        }
    });
4

1 回答 1

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 接口的实现。安装它可能会有所帮助。

于 2012-07-17T23:54:07.677 回答