我正在使用将文本转换为语音来发送到我的 SIP 应用程序。我不断收到此错误
javax.speech.EngineException: javax.speech.Central: no class found for com.sun.speech.freetts.jsapi.FreeTTSEngineCentral
at javax.speech.Central.registerEngineCentral(Central.java:706)
at Text2Speech.TextToSpeech.initEnglish(TextToSpeech.java:49)
at gov.nist.jrtp.test.send_recv.jrtpTest.EncodeRTP(jrtpTest.java:192)
at gov.nist.jrtp.test.send_recv.jrtpTest.<init>(jrtpTest.java:93)
at org.universAAL.samples.sip.exporter.SIPExpImpl.<init>(SIPExpImpl.java:81)
at org.universAAL.samples.sip.exporter.Activator.start(Activator.java:20)
at org.apache.felix.framework.util.SecureAction.startActivator(SecureAction.java:633)
at org.apache.felix.framework.Felix.activateBundle(Felix.java:1817)
at org.apache.felix.framework.Felix.startBundle(Felix.java:1734)
at org.apache.felix.framework.Felix.setActiveStartLevel(Felix.java:1143)
at org.apache.felix.framework.StartLevelImpl.run(StartLevelImpl.java:264)
at java.lang.Thread.run(Thread.java:745)
我已经包含了所有必需的依赖项,我花了一整天都无法解决这个错误。
当我尝试将我的代码作为普通的 java 应用程序运行时,它工作正常。
代码:
public void initEnglish(String voiceName) {
System.out.println("Using voice: " + voiceName);
try {
if (desc == null) {
System.setProperty("freetts.voices", "com.sun.speech.freetts.en.us.cmu_us_kal.KevinVoiceDirectory");
// desc = new SynthesizerModeDesc(null,"general", Locale.US,null,null);//new SynthesizerModeDesc(Locale.US);
desc = new SynthesizerModeDesc(Locale.US);
Central.registerEngineCentral ("com.sun.speech.freetts.jsapi.FreeTTSEngineCentral");
// Central.registerEngineCentral ("com.sun.speech.engine.synthesis.text.TextEngineCentral");
synthesizer = Central.createSynthesizer(desc);
synthesizer.allocate();
synthesizer.resume();
VoiceManager vm=VoiceManager.getInstance();
voice=vm.getVoice(voiceName);
if(voice!=null)
{
voice.allocate();
}
freetts=new FreeTTS(voice);
System.out.println(System.getProperty("user.dir"));
FileLocation =System.getProperty("user.dir");
audioPlayer = new SingleFileAudioPlayer(FileLocation+"/NewVoice", Type.WAVE);
voice.setAudioPlayer(audioPlayer);
}
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (EngineException e) {
e.printStackTrace();
} catch (AudioException e) {
e.printStackTrace();
} catch (EngineStateError e) {
e.printStackTrace();
}
}