FreeTTS – java.lang.ClassNotFoundException:javax.speech.EngineCentral

我有一个问题,我知道这可能与在线的那些类似,但我已经按照我在网上发现的每条指令,我仍然遇到这个问题。

基本上我使用虚拟键盘制作GUI,无论用户输入什么类型,我希望用户能够单击按钮,我希望语音合成能够转换文本到语音。 我在网上看了一下,发现最简单,最常用的开放软件是freeTSS。 我已经安装了freeTSS并按照说明操作。

然后我从在线社区获取以下代码:

import java.util.*; import javax.speech.*; import javax.speech.synthesis.*; public class Text2Speech { String speaktext; public void dospeak(String speak,String voicename) { speaktext=speak; String voiceName =voicename; try { SynthesizerModeDesc desc = new SynthesizerModeDesc(null,"general", Locale.US,null,null); Synthesizer synthesizer = Central.createSynthesizer(desc); synthesizer.allocate(); synthesizer.resume(); desc = (SynthesizerModeDesc) synthesizer.getEngineModeDesc(); Voice[] voices = desc.getVoices(); Voice voice = null; for (int i = 0; i < voices.length; i++) { if (voices[i].getName().equals(voiceName)) { voice = voices[i]; break; } } synthesizer.getSynthesizerProperties().setVoice(voice); System.out.print("Speaking : "+speaktext); synthesizer.speakPlainText(speaktext, null); synthesizer.waitEngineState(Synthesizer.QUEUE_EMPTY); synthesizer.deallocate(); } catch (Exception e) { String message = " missing speech.properties in " + System.getProperty("user.home") + "\n"; System.out.println (System.getProperty( "java.home" ) ); System.out.println(""+e); System.out.println(message); } } public static void main(String[] args) { Text2Speech obj=new Text2Speech(); obj.dospeak("Hello i am kevin ","kevin16"); } } 

当我第一次运行它时,我收到以下错误:

java.lang.ClassNotFoundException:javax.speech.EngineCentral

有趣的是,当我关闭错误并再次运行它时(两次通过main方法),我得到一个错误,说我错过了speech.properties。 这很奇怪,因为我第一次从命令提示符运行HelloWorld.jar,我被告知在哪里添加语音属性。 java -jar bin/HelloWorld.jar在命令提示符下工作正常,但不知何故,某些东西在我上面分享的代码中不起作用。

我按照以下说明操作: http : //www.ryan-h.com/uncategorized/java-speech-jsapi-freetts/但仍然无法解决问题。 我使用BlueJ作为我的IDE,是的,我知道它不是那么好,我应该使用Eclipse,但是当我创建GUI项目时,我宁愿使用BlueJ而不是Eclipse。 那会有所作为吗?

最后一个问题,我想把我的程序变成一个应用程序,所以不是计算机程序员的用户可以轻松地使用它。 用户是否需要经历安装Jaspi,freetts,复制jar文件,复制speech.properties等的可怕程序?