我尝试了很多但却找不到,所以我希望你能帮助我。
我正在尝试构建自己的语音识别应用程序,它不显示对话框。
我已经编写了一些代码并且它工作得很好,但我的问题是识别器似乎在LogCat中没有任何错误或其他消息停止。
一个奇怪的事实是,“RecognitionListener”接口中的“onRmsChanged”仍然一直被调用,但不再调用“onBeginningOfSpeech”。
如果我在语音识别开始后发言,那就有效了。 但如果我等了几秒钟就没有了。
使用的API是4.0.3,我使用版本4.2.1将其安装在我的Nexus 7上
如果你有一些好主意,我真的很感激。
一些代码段:
我的课程:
class SpeechListener implements RecognitionListener
{
public void onBeginningOfSpeech()
{
Log.d(TAG, "onBeginningOfSpeech()");
}
public void onBufferReceived(byte[] buffer)
{
Log.d(TAG, "onBufferReceived()");
}
public void onEndOfSpeech()
{
Log.d(TAG, "onEndOfSpeech()");
}
public void onError(int error)
{
Log.d(TAG, "onError(): " + error);
if(error == SpeechRecognizer.ERROR_NO_MATCH)
{
}
else if(error == SpeechRecognizer.ERROR_SPEECH_TIMEOUT)
{
}
else
{
tvOutput.setText("Error: " + error);
}
}
public void onEvent(int eventType, Bundle params)
{
Log.d(TAG, "onEvent()");
}
public void onPartialResults(Bundle partialResults)
{
Log.d(TAG, "onPartialResults()");
}
public void onReadyForSpeech(Bundle params)
{
Log.d(TAG, "onReadyForSpeech()");
}
public void onResults(Bundle results)
{
Log.d(TAG, "onResults(): " + results);
String str = new String();
ArrayList<String> data = results.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION);
for(int i = 0; i < data.size(); i++)
{
str += data.get(i) + "\n";
}
tvOutput.setText(tvOutput.getText().toString() + "\n\n" + "Results: " + str);
}
public void onRmsChanged(float rmsdB)
{
Log.d(TAG, "onRmsChanged()");
}
}
我在MainActivity中的实现:
this.srSpeechRecognizer = SpeechRecognizer.createSpeechRecognizer(this);
this.srSpeechRecognizer.setRecognitionListener(new SpeechListener());
this.iSpeechIntent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
this.iSpeechIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
this.iSpeechIntent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE, "voice.recognition.test");
this.iSpeechIntent.putExtra(RecognizerIntent.EXTRA_MAX_RESULTS, 10);
所以它开始了:
srSpeechRecognizer.startListening(iSpeechIntent);
记录说话:
12-16 13:50:53.576: D/DreamManagerService(485): Dream finished: android.os.Binder@415bbf38
12-16 13:50:53.576: I/DreamManagerService(485): Leaving dreamland.
12-16 13:50:53.576: I/DreamController(485): Stopping dream: name=ComponentInfo{com.google.android.deskclock/com.android.deskclock.Screensaver}, isTest=false, userId=0
12-16 13:50:53.586: I/PowerManagerService(485): Waking up from dream...
12-16 13:50:53.616: I/ActivityManager(485): No longer want com.google.android.gsf.login (pid 13171): empty #17
12-16 13:50:56.796: I/GoogleRecognitionServiceImpl(1461): #startListening [de-DE]
12-16 13:50:56.806: I/ActivityManager(485): Start proc com.google.android.gsf.login for service com.google.android.gsf.login/com.google.android.gsf.loginservice.GoogleLoginService: pid=13343 uid=10019 gids={50019, 3003, 1007, 1028, 1015, 2001, 3006}
12-16 13:50:56.866: D/MainActivity/SpeechListener(13268): onRmsChanged()
12-16 13:50:56.886: D/dalvikvm(1461): GC_FOR_ALLOC freed 516K, 12% free 8706K/9892K, paused 18ms, total 18ms
12-16 13:50:56.906: D/dalvikvm(1461): GC_CONCURRENT freed 160K, 9% free 9015K/9892K, paused 3ms+2ms, total 21ms
12-16 13:50:56.906: I/AudioService(485): AudioFocus requestAudioFocus() from android.media.AudioManager@4135e960com.google.android.speech.audio.AudioController$1@41261910
12-16 13:50:56.916: I/VS.G3EngineManager(1461): create_rm: m=ENDPOINTER_VOICESEARCH,l=en-US
12-16 13:50:56.916: D/MainActivity/SpeechListener(13268): onRmsChanged()
12-16 13:50:56.916: I/VS.G3EngineManager(1461): Brought up new g3 instance :/system/usr/srec/en-US/endpointer_voicesearch.config for: en-USin: 3 ms
12-16 13:50:56.926: I/ConnectionFactoryImpl(1461): Opening SSL connection: vs.google.com:14259
12-16 13:50:56.966: D/MainActivity/SpeechListener(13268): onRmsChanged()
12-16 13:50:57.016: D/MainActivity/SpeechListener(13268): onRmsChanged()
12-16 13:50:57.066: D/MainActivity/SpeechListener(13268): onRmsChanged()
12-16 13:50:57.116: D/MainActivity/SpeechListener(13268): onRmsChanged()
12-16 13:50:57.166: D/MainActivity/SpeechListener(13268): onRmsChanged()
12-16 13:50:57.216: D/MainActivity/SpeechListener(13268): onRmsChanged()
12-16 13:50:57.266: D/MainActivity/SpeechListener(13268): onRmsChanged()
12-16 13:50:57.316: D/MainActivity/SpeechListener(13268): onRmsChanged()
12-16 13:50:57.366: D/MainActivity/SpeechListener(13268): onRmsChanged()
12-16 13:50:57.416: D/MainActivity/SpeechListener(13268): onRmsChanged()
12-16 13:50:57.466: D/MainActivity/SpeechListener(13268): onRmsChanged()
12-16 13:50:57.516: D/MainActivity/SpeechListener(13268): onRmsChanged()
12-16 13:50:57.566: D/MainActivity/SpeechListener(13268): onRmsChanged()
12-16 13:50:57.616: D/MainActivity/SpeechListener(13268): onRmsChanged()
12-16 13:50:57.666: D/MainActivity/SpeechListener(13268): onRmsChanged()
12-16 13:50:57.716: D/MainActivity/SpeechListener(13268): onRmsChanged()
12-16 13:50:57.766: D/MainActivity/SpeechListener(13268): onRmsChanged()
12-16 13:50:57.816: D/MainActivity/SpeechListener(13268): onRmsChanged()
12-16 13:50:57.866: D/MainActivity/SpeechListener(13268): onRmsChanged()
12-16 13:50:57.916: D/MainActivity/SpeechListener(13268): onRmsChanged()
12-16 13:50:57.966: D/MainActivity/SpeechListener(13268): onRmsChanged()
12-16 13:50:58.016: D/MainActivity/SpeechListener(13268): onRmsChanged()
12-16 13:50:58.066: D/MainActivity/SpeechListener(13268): onRmsChanged()
12-16 13:50:58.116: I/MainActivity/SpeechListener(13268): onBeginningOfSpeech()
12-16 13:50:58.126: D/MainActivity/SpeechListener(13268): onRmsChanged()
12-16 13:50:58.176: D/MainActivity/SpeechListener(13268): onRmsChanged()
12-16 13:50:58.226: D/MainActivity/SpeechListener(13268): onRmsChanged()
12-16 13:50:58.276: D/MainActivity/SpeechListener(13268): onRmsChanged()
12-16 13:50:58.326: D/MainActivity/SpeechListener(13268): onRmsChanged()
12-16 13:50:58.376: D/MainActivity/SpeechListener(13268): onRmsChanged()
12-16 13:50:58.426: D/MainActivity/SpeechListener(13268): onRmsChanged()
12-16 13:50:58.476: D/MainActivity/SpeechListener(13268): onRmsChanged()
12-16 13:50:58.526: D/MainActivity/SpeechListener(13268): onRmsChanged()
12-16 13:50:58.576: D/MainActivity/SpeechListener(13268): onRmsChanged()
12-16 13:50:58.626: D/MainActivity/SpeechListener(13268): onRmsChanged()
12-16 13:50:58.676: D/MainActivity/SpeechListener(13268): onRmsChanged()
12-16 13:50:58.726: D/MainActivity/SpeechListener(13268): onRmsChanged()
12-16 13:50:58.776: D/MainActivity/SpeechListener(13268): onRmsChanged()
12-16 13:50:58.826: D/MainActivity/SpeechListener(13268): onRmsChanged()
12-16 13:50:58.876: D/MainActivity/SpeechListener(13268): onRmsChanged()
12-16 13:50:58.926: D/MainActivity/SpeechListener(13268): onRmsChanged()
12-16 13:50:58.976: D/MainActivity/SpeechListener(13268): onRmsChanged()
12-16 13:50:59.026: D/MainActivity/SpeechListener(13268): onRmsChanged()
12-16 13:50:59.076: D/MainActivity/SpeechListener(13268): onRmsChanged()
12-16 13:50:59.126: D/MainActivity/SpeechListener(13268): onRmsChanged()
12-16 13:50:59.176: D/MainActivity/SpeechListener(13268): onRmsChanged()
12-16 13:50:59.236: D/MainActivity/SpeechListener(13268): onRmsChanged()
12-16 13:50:59.286: D/MainActivity/SpeechListener(13268): onRmsChanged()
12-16 13:50:59.336: D/MainActivity/SpeechListener(13268): onRmsChanged()
12-16 13:50:59.386: D/MainActivity/SpeechListener(13268): onRmsChanged()
12-16 13:50:59.436: D/MainActivity/SpeechListener(13268): onRmsChanged()
12-16 13:50:59.486: D/MainActivity/SpeechListener(13268): onRmsChanged()
12-16 13:50:59.536: D/MainActivity/SpeechListener(13268): onRmsChanged()
12-16 13:50:59.586: D/MainActivity/SpeechListener(13268): onRmsChanged()
12-16 13:50:59.636: D/MainActivity/SpeechListener(13268): onRmsChanged()
12-16 13:50:59.646: I/MicrophoneInputStream(1461): mic_close
12-16 13:50:59.666: I/AudioService(485): AudioFocus abandonAudioFocus() from android.media.AudioManager@4135e960com.google.android.speech.audio.AudioController$1@41261910
12-16 13:50:59.666: D/dalvikvm(1461): threadid=37: thread exiting, not yet detached (count=0)
12-16 13:50:59.666: I/MainActivity/SpeechListener(13268): onEndOfSpeech()
12-16 13:50:59.676: I/decoder(1461): INFO: recognition time wall: 2.732 sec user: 0.54 sec sys: 0.08 sec
12-16 13:50:59.686: D/MainActivity/SpeechListener(13268): onRmsChanged()
12-16 13:50:59.736: D/MainActivity/SpeechListener(13268): onRmsChanged()
12-16 13:50:59.786: D/MainActivity/SpeechListener(13268): onRmsChanged()
12-16 13:50:59.826: I/MainActivity/SpeechListener(13268): onResults(): Bundle[mParcelledData.dataSize=292]
12-16 13:50:59.836: D/MainActivity/SpeechListener(13268): onRmsChanged()
12-16 13:50:59.886: D/MainActivity/SpeechListener(13268): onRmsChanged()
12-16 13:50:59.936: D/MainActivity/SpeechListener(13268): onRmsChanged()
12-16 13:50:59.986: D/MainActivity/SpeechListener(13268): onRmsChanged()
12-16 13:51:00.046: D/MainActivity/SpeechListener(13268): onRmsChanged()
12-16 13:51:00.096: D/MainActivity/SpeechListener(13268): onRmsChanged()
12-16 13:51:00.146: D/MainActivity/SpeechListener(13268): onRmsChanged()
12-16 13:51:00.196: D/MainActivity/SpeechListener(13268): onRmsChanged()
不说话的日志:
12-16 13:53:39.246: I/GoogleRecognitionServiceImpl(1461): #startListening [de-DE]
12-16 13:53:39.296: D/dalvikvm(1461): GC_FOR_ALLOC freed 567K, 12% free 8708K/9892K, paused 21ms, total 21ms
12-16 13:53:39.316: D/dalvikvm(1461): GC_CONCURRENT freed 164K, 9% free 9017K/9892K, paused 3ms+2ms, total 21ms
12-16 13:53:39.316: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:39.316: I/AudioService(485): AudioFocus requestAudioFocus() from android.media.AudioManager@4135e960com.google.android.speech.audio.AudioController$1@41261910
12-16 13:53:39.326: I/VS.G3EngineManager(1461): create_rm: m=ENDPOINTER_VOICESEARCH,l=en-US
12-16 13:53:39.326: I/ConnectionFactoryImpl(1461): Opening SSL connection: vs.google.com:14259
12-16 13:53:39.326: I/VS.G3EngineManager(1461): Brought up new g3 instance :/system/usr/srec/en-US/endpointer_voicesearch.config for: en-USin: 5 ms
12-16 13:53:39.366: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:39.416: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:39.466: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:39.516: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:39.576: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:39.626: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:39.676: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:39.726: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:39.776: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:39.826: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:39.876: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:39.926: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:39.976: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:40.026: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:40.076: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:40.136: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:40.176: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:40.226: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:40.286: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:40.336: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:40.386: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:40.436: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:40.486: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:40.536: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:40.586: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:40.636: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:40.686: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:40.736: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:40.786: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:40.836: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:40.886: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:40.936: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:40.986: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:41.046: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:41.096: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:41.146: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:41.196: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:41.246: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:41.296: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:41.346: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:41.396: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:41.446: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:41.496: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:41.546: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:41.596: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:41.646: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:41.696: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:41.746: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:41.796: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:41.846: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:41.896: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:41.946: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:41.996: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:42.046: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:42.096: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:42.146: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:42.196: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:42.246: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:42.296: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:42.356: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:42.406: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:42.456: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:42.506: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:42.556: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:42.606: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:42.656: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:42.706: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:42.756: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:42.806: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:42.856: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:42.906: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:42.956: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:43.006: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:43.056: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:43.116: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:43.156: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:43.216: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:43.266: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:43.316: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:43.366: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:43.416: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:43.466: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:43.516: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:43.566: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:43.616: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:43.666: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:43.716: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:43.766: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:43.816: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:43.866: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:43.916: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:43.966: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:44.016: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:44.066: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:44.116: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:44.166: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:44.226: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:44.276: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:44.326: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:44.376: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:44.426: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:44.476: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:44.526: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:44.576: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:44.626: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:44.676: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:44.726: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:44.776: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:44.826: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:44.876: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:44.926: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:44.976: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:45.026: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:45.076: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:45.126: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:45.176: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:45.226: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:45.276: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:45.326: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:45.376: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:45.426: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:45.476: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:45.526: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:45.576: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:45.636: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:45.676: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:45.736: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:45.786: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:45.836: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:45.886: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:45.936: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:45.986: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:46.036: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:46.086: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:46.136: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:46.186: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:46.236: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:46.286: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:46.336: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:46.386: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:46.436: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:46.486: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:46.536: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:46.596: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:46.636: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:46.696: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:46.746: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:46.796: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:46.846: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:46.896: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:46.946: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:46.996: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:47.046: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:47.096: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:47.146: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:47.196: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:47.246: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:47.296: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:47.346: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:47.396: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:47.446: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:47.496: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:47.556: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:47.596: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:47.656: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:47.696: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:47.746: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:47.796: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:47.856: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:47.906: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:47.956: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:48.006: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:48.056: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:48.106: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:48.156: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:48.206: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:48.256: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:48.306: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:48.356: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:48.406: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:48.456: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:48.506: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:48.556: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:48.616: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:48.656: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:48.706: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:48.766: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:48.816: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:48.866: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:48.916: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:48.966: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:49.016: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:49.066: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:49.116: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:49.166: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:49.216: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:49.266: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:49.316: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:49.366: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:49.416: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:49.466: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:49.516: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:49.566: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:49.616: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:49.666: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:49.716: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:49.776: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:49.816: D/dalvikvm(1461): GC_FOR_ALLOC freed 106K, 9% free 9025K/9892K, paused 32ms, total 32ms
12-16 13:53:49.816: I/dalvikvm-heap(1461): Grow heap (frag case) to 9.282MB for 320656-byte allocation
12-16 13:53:49.836: D/dalvikvm(1461): GC_FOR_ALLOC freed 156K, 11% free 9182K/10208K, paused 19ms, total 19ms
12-16 13:53:49.836: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:49.886: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:49.936: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:49.986: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:50.036: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:50.086: D/MainActivity/SpeechListener(13441): onRmsChanged()
12-16 13:53:50.136: D/MainActivity/SpeechListener(13441): onRmsChanged()
答案 0 :(得分:19)
唯一可以解决此问题的解决方案是使用第三方服务。 4.1.1和4.2 依赖于语音识别服务的一个版本,该服务不遵守记录的行为,因为运行它的服务无声地死亡。
如果您不想使用第三方API,并且您需要以某种方式解释此服务死亡, 可能,但它不是很理想。
服务终止后,将不会调用以下任何方法:
但如果在服务死亡之前调用onBeginningOfSpeech,您可以放心,最终会调用onError或onEndOfSpeech。
因此,如果你想要的是确保你知道Jellybean中服务的生命和死亡,内置SpeechRecognizer中此问题的解决方法是执行以下操作:
为什么这不是维持连续语音识别设置的理想解决方案
在您的问题中没有直接说明,但有些人希望这样做,以便他们可以持续进行语音识别。 这在4.1.1和4.2 中实现这一点并不是一个好方法,因为Google的SpeechRecognition服务现在开始时带有非可选的“bloop”音效。似乎无法关闭此声音。 API中没有列出任何内容来控制它。您的用户不会喜欢在4秒重复循环中“泛滥”。
答案 1 :(得分:3)
您可以尝试提供以下RecognizerIntent个额外内容:
EXTRA_SPEECH_INPUT_COMPLETE_SILENCE_LENGTH_MILLIS
EXTRA_SPEECH_INPUT_MINIMUM_LENGTH_MILLIS
EXTRA_SPEECH_INPUT_POSSIBLY_COMPLETE_SILENCE_LENGTH_MILLIS
虽然它们都不适合这种情况。 Android根本不提供额外的“WAIT_UNTIL_I_START_SPEAKING
”。这不是一个错误(在果冻豆或其他地方),它只是缺乏一个功能。即使在Android的未来版本中添加了这样的额外内容,也可能无法保证语音识别应用程序(例如Google语音搜索)实际上实现了这一点。 RecognizerIntent文档包含大量具有未指定行为的附加内容。
您最好的选择可能是在您onEndOfSpeech
或onError
后立即重新启动识别器。
答案 2 :(得分:3)
我制作了一个带有音频到语音识别器的服务,每次出现错误或结果时都会通过重新启动来模拟连续性。正如您所看到的,我的服务侦听广播接收器以启动/停止连续ASR(电池价格昂贵,因此我建议您仅在相关UI位于前台时运行此连续ASR服务)。 ASR的结果也会广播到应用程序的其余部分。你可以忽略广播,服务和识别器监听器是主要的想法。 不要忘记INTERNET权限和清单以及服务声明:
<service android:name=".speechRecognitionService" />
SpeechRecognitionService:
/**
* Created by Josh on 22/07/15.
* This service bears an Audio to Speech recognizer (ASR), once this service is started,
* it listens a broadcast called "asrService".
* the Service starts ASR when it receives a "START-ASR" value inside the "message" parameter of its broadcast receiver
* the Service stopss ASR when it receives a "STOP-ASR" value inside the "message" parameter of its broadcast receiver
Example:
Intent intent = new Intent("asrService");
intent.putExtra("message", "STOP-ASR");
LocalBroadcastManager.getInstance(context).sendBroadcast(intent);
Once the ASR Listener that this service bears is running, it will broadcast the results is gets.
To catch ASR results, implement a Broadcast receiver that listens to app.asrResult="ASRresult", for example:
private BroadcastReceiver ASRReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String message = intent.getStringExtra("message");
if(message!=null) {
app.logwhite("ASR says: "+message);
}
}
};
LocalBroadcastManager.getInstance(this).registerReceiver(ASRReceiver, new IntentFilter(app.asrResult));
Unregister the broadcast receiver likewise:
LocalBroadcastManager.getInstance(this).unregisterReceiver(ASRReceiver);
*/
public class speechRecognitionService extends Service {
private static speechRecognitionListenerJosh speechReconListener;
private static SpeechRecognizer mSpeechRecognizer=null;
private static Intent mSpeechRecognizerIntent;
private static boolean mIslistening=false;
//======== BROADCAST RECEIVERS
// handler for received Intents for the "my-event" event
private BroadcastReceiver startASRReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String message = intent.getStringExtra("message");
if(message.equals("START-ASR")) {
if (mIslistening == false) {
if (mSpeechRecognizer != null) {
mSpeechRecognizer.destroy();
mSpeechRecognizer = null;
}
app.logy("==BROADCAST Rx: START_ASR");
mSpeechRecognizerIntent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
mSpeechRecognizerIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_PREFERENCE, "en-US");
mSpeechRecognizerIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
//mSpeechRecognizerIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_WEB_SEARCH);
//mSpeechRecognizerIntent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE , this.getPackageName());
mSpeechRecognizerIntent.putExtra(RecognizerIntent.EXTRA_SPEECH_INPUT_COMPLETE_SILENCE_LENGTH_MILLIS, 5000);
mSpeechRecognizerIntent.putExtra(RecognizerIntent.EXTRA_SPEECH_INPUT_MINIMUM_LENGTH_MILLIS, 5000);
//mSpeechRecognizerIntent.putExtra(RecognizerIntent.EXTRA_PARTIAL_RESULTS, true);
//mSpeechRecognizerIntent.putExtra(RecognizerIntent.EXTRA_MAX_RESULTS, 3);
mSpeechRecognizer = SpeechRecognizer.createSpeechRecognizer(getApplicationContext());
speechReconListener = new speechRecognitionListenerJosh();
mSpeechRecognizer.setRecognitionListener(speechReconListener);
mSpeechRecognizer.startListening(mSpeechRecognizerIntent);
} else {
app.logy("==BROADCAST Rx: STOP_ASR");
mSpeechRecognizer.stopListening();
mSpeechRecognizer.destroy();
speechReconListener = null;
}
}
if(message.equals("STOP-ASR")){
app.logy("==BROADCAST Rx: STOP_ASR");
mSpeechRecognizer.stopListening();
mSpeechRecognizer.destroy();
speechReconListener = null;
}
}
};
@Override
public void onCreate() {
super.onCreate();
mSpeechRecognizerIntent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
mSpeechRecognizerIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_PREFERENCE, "en-US");
mSpeechRecognizerIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL , RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
//mSpeechRecognizerIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_WEB_SEARCH);
mSpeechRecognizerIntent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE , this.getPackageName());
mSpeechRecognizerIntent.putExtra(RecognizerIntent.EXTRA_SPEECH_INPUT_MINIMUM_LENGTH_MILLIS, 4000);
mSpeechRecognizerIntent.putExtra(RecognizerIntent.EXTRA_MAX_RESULTS, 3);
mSpeechRecognizer = SpeechRecognizer.createSpeechRecognizer(this);
speechReconListener = new speechRecognitionListenerJosh();
mSpeechRecognizer.setRecognitionListener(speechReconListener);
LocalBroadcastManager.getInstance(this).registerReceiver(startASRReceiver, new IntentFilter("asrService"));
app.toastlog("==ASR Service - CREATED");
}
@Override
public void onDestroy() {
super.onDestroy();
LocalBroadcastManager.getInstance(this).unregisterReceiver(startASRReceiver);
if (mSpeechRecognizer != null){
mSpeechRecognizer.destroy();
mSpeechRecognizer=null;
}
app.toastlog("==ASR Service - DESTROYED");
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override //rather not use, runs before onStart
public int onStartCommand(Intent intent, int flags, int startId) {
return super.onStartCommand(intent, flags, startId);
}
@Override
public void onStart(Intent intent, int startId) {
super.onStart(intent, startId);
app.toastlog("==ASRservice - onStart");
}
private class speechRecognitionListenerJosh implements RecognitionListener {
@Override
public void onBeginningOfSpeech() {
mIslistening=true;
app.loge("=ASRListener - onBeginingOfSpeech");
}
@Override
public void onBufferReceived(byte[] buffer){
}
@Override
public void onEndOfSpeech(){
app.loge("=ASRListener - onEndOfSpeech");
}
@Override
public void onError(int error) {
mIslistening=false;
String code= Integer.toString(error);
if(error==SpeechRecognizer.ERROR_CLIENT){ // 5
code="ERROR_CLIENT";
mIslistening=false;
mSpeechRecognizer.destroy();
Intent intent = new Intent("asrService");
intent.putExtra("message", "START-ASR");
LocalBroadcastManager.getInstance(app.appContext).sendBroadcast(intent);
}
if(error==SpeechRecognizer.ERROR_SPEECH_TIMEOUT){ // 6
code="SPEECH_TIMEOUT";
mSpeechRecognizer.stopListening();
mIslistening=false;
Intent intent = new Intent("asrService");
intent.putExtra("message", "START-ASR");
LocalBroadcastManager.getInstance(app.appContext).sendBroadcast(intent);
//Usualy bounces back to ERROR_CLIENT.
}
if(error==SpeechRecognizer.ERROR_NO_MATCH){ // 7
code="ERROR_NO_MATCH";
mIslistening=false;
Intent intent = new Intent("asrService");
intent.putExtra("message", "START-ASR");
LocalBroadcastManager.getInstance(app.appContext).sendBroadcast(intent);
//Usually bounces back to ERROR_CLIENT.
}
app.loge("=ASRListener - ASR Error: "+code);
/*
// 1 = NETWORK_TIMEOUT
// 2 = ERROR_NETWORK
// 3 = ERROR_AUDIO
// 4 = ERROR_SERVER
// 5 = ERROR_CLIENT
// 8 = ERROR_RECOGNIZER_BUSY
// 9 = ERROR_INSUFFICIENT_PERMISSIONS
*/
}
@Override
public void onEvent(int eventType, Bundle params){
}
@Override //Somehow doesn't trigger upon partial results
public void onPartialResults(Bundle partialResults){
ArrayList<String> results=partialResults.getStringArrayList("EXTRA_PARTIAL_RECOGNITION");
if(results!=null) {
if (results.size() > 0) {
app.logwhite("=== ASR Partial Results: " + results);
}
}
}
@Override
public void onReadyForSpeech(Bundle params){
app.loge("=ASRListener - onReadyForSpeech, LISTENING (((( ");
}
@Override
public void onResults(Bundle resultBundle){
app.loge("=ASRListener - onResults");
ArrayList<String> result = resultBundle.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION);
if(result!=null) { //when speaking timeout happen, results is null
// matches are the return values of speech recognition engine
if (result.size() > 0) {
app.logwhite("=== ASR Results:");
app.logwhite(result.get(0));
//BC name, message
app.broadcast(app.asrResult,result.get(0)); //The result is broadcast to the entire app
}
}
mIslistening=false;
Intent intent = new Intent("asrService");
intent.putExtra("message", "START-ASR");
LocalBroadcastManager.getInstance(app.appContext).sendBroadcast(intent);
}
@Override
public void onRmsChanged(float rmsdB){
//VOLUME VUmeter!!!!
}
}
}
答案 3 :(得分:0)
一段时间以来,我面临着同样的问题,我在任何地方都找不到正确的工作答案。
为了使聆听无限进行,请在重新实例化SpeechRecognizer并重新设置意图对象之后,再次发布onError()
或onResults()
我是在打电话给speechRecognizer.startListening(intent);
。
但是正如您提到的,它最终在听了一段时间后就消失了。
这是我尝试过的方法,对我有用。
我只是确保在回想speechRecognizer.startListening(intent);
之前先打电话给
speechRecognizer.stopListening();
speechRecognizer.destroy();
去做第一段中提到的事情。
到目前为止,对我来说一切正常。
答案 4 :(得分:0)
我在Node.js库中遇到了同样的问题,这是我与团队的答复一起提交的问题。 https://github.com/googleapis/nodejs-speech/issues/667
TLDR; 设置您的配置如下(注意使用增强型)
const config = {
encoding: "LINEAR16",
sampleRateHertz: 16000,
languageCode: "en-US",
metadata: recognitionMetadata,
model: 'phone_call',
useEnhanced: true}
您将获得以下输出-注意替代方案,在我看来这有点误导性措词,但是哦:
[{"results":[{"alternatives":[{"words":[],"transcript":"I live in Boston","confidence":0.9128385782241821}],"channelTag":0,"languageCode":"en-us"},{"alternatives":[{"words":[],"transcript":" Boston is an amazing City","confidence":0.9128385186195374}],