我有一个问题,我知道这可能与网上的类似,但我已经按照我在网上找到的每一条说明进行操作,但我仍然遇到这个问题。
基本上我正在制作一个带有虚拟键盘的 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 等可怕的过程?