问题描述
Hi I'm using VOCE library in my application as I need both speech synthesis(using freeTTs) and speech recognition(using sphinx4).
Here is my speech recognition code
public class recognitionTest{
public static void main(String argv){
voce.SpeechInterface.init("C:/Users/NetBeansProjects/src", false, true,
"file:/C:/Users/src/grammar", "words");
System.out.println("This is a speech recognition test. " );
try{
String s="";
s = voce.SpeechInterface.popRecognizedString();
System.out.println("You said: " + s);
if(s.equalsIgnoreCase("log in")){
StartApplication.count=1;
}
else if(s.equalsIgnoreCase("sign up")){
StartApplication.count=2;
}
else{
//do nothing
}
voce.SpeechInterface.destroy();
}
catch (Exception e)
{
System.out.println(e);
}
}
}
我从另一个名为StartApplication的java应用程序中调用它我不断检查count的值是否已更改为0或1,如果不是main方法再次调用。
但是当我说登录时它被识别并且count的值变为1但是生成了以下异常。
I call this from another java application called StartApplication and in this I continuously check whether the value of count has changed to 0 or 1 and if not main method is called again.
However when I say login it is recognized and the value of count is changed to 1 but the following exception is generated .
Exception in thread "AWT-EventQueue-0" javax.speech.EngineStateError: Invalid EngineState: expected=( DEALLOCATED DEALLOCATING_RESOURCES ) current state=( DEALLOCATED QUEUE_EMPTY )
at com.sun.speech.engine.BaseEngine.checkEngineState(BaseEngine.java:705)
at com.sun.speech.freetts.jsapi.FreeTTSSynthesizer.cancelAll(FreeTTSSynthesizer.java:238)
at voce.SpeechSynthesizer.destroy(SpeechSynthesizer.java:110)
at voce.SpeechInterface.destroy(SpeechInterface.java:97)
at mailforblind.recognitionTest.main(recognitionTest.java:27)
at mailforblind.StartApplication.mouseClicked(StartApplication.java:174)
at java.awt.Component.processMouseEvent(Component.java:6538)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
at java.awt.Component.processEvent(Component.java:6300)
at java.awt.Container.processEvent(Container.java:2236)
at java.awt.Component.dispatchEventImpl(Component.java:4891)
at java.awt.Container.dispatchEventImpl(Container.java:2294)
at java.awt.Component.dispatchEvent(Component.java:4713)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4888)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4534)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4466)
at java.awt.Container.dispatchEventImpl(Container.java:2280)
at java.awt.Window.dispatchEventImpl(Window.java:2750)
at java.awt.Component.dispatchEvent(Component.java:4713)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
at java.awt.EventQueue.access$500(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:709)
at java.awt.EventQueue$3.run(EventQueue.java:703)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)
at java.awt.EventQueue$4.run(EventQueue.java:731)
at java.awt.EventQueue$4.run(EventQueue.java:729)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
以下是StartApplication代码片段,
Following is the StartApplication code snippet,
public void mouseClicked(MouseEvent e) {
try{
while(count==0)
recognitionTest.main("");
if(count==1){
LoginPage.main();
}
if(count==2){
SignUpPage.main();
}
}catch(Exception ee){System.out.println(ee);}
}
我尝试了什么:
为了避免这种情况我删除了这个voce.SpeechInterface.destroy();现在当我从其他应用程序调用它时会抛出以下异常
'SEVERE麦克风无法打开麦克风线,格式为PCM_SIGNED 16000.0Hz,16位,单声道, 2字节/帧,不支持big-endian。
in edu.cmu.sphinx.frontend.util.Microphone:open-microphone
无法启动麦克风。'
What I have tried:
Inorder to avoid this I removed this voce.SpeechInterface.destroy(); Now when I call this from some other application it throws the following exception
'SEVERE microphone Can't open microphone line with format PCM_SIGNED 16000.0Hz, 16 bit, mono, 2 bytes/frame, big-endian not supported.
in edu.cmu.sphinx.frontend.util.Microphone:open-microphone
Cannot start microphone.'
推荐答案
这篇关于线程“AWT-eventqueue-0”中的异常javax.speech.enginestateerror:无效的enginestate的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!