我正在尝试使用内置于语音中的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();
}
}
});
最佳答案
您的系统可能没有安装 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 接口(interface)的实现。安装这可能会有所帮助。
关于java - 如何使用内置的 Java tts?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11530296/