私は多くのことを試みましたが、それを見つけることができませんので、あなたが私を助けることができると思います。
ダイアログを表示しない独自の音声認識アプリを作成しようとしています。
私はすでにいくつかのコードを書いており、非常にうまく動作しますが、私の問題は、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()
この問題を確実に回避する唯一の解決策は、サードパーティのサービスを使用することです。 4.1.1および4.2両方文書化された動作に従わない音声認識サービスのバージョンに依存しており、それを実行しているサービスはサイレントに終了します。
サードパーティのAPIを使用したくない場合、何らかの方法でこのサービスの停止を考慮する必要がある場合、それはis可能ですが、きれいではありませんまたは理想。
サービスが停止すると、次のメソッドは呼び出されません。
Butサービスが終了する前にonBeginningOfSpeechが呼び出された場合、onErrorまたはonEndOfSpeechのいずれかが最終的に呼び出されることが保証されます。
したがって、Jellybeanのサービスの生と死を確実に把握することだけが必要な場合組み込みのSpeechRecognizerでこの問題を回避するには、次のようにします。
なぜこれが連続的な音声認識設定を維持する理想的なソリューションではないのか
それはあなたの質問に直接述べられていませんでしたが、少数の人々は彼らが継続的な音声認識を持つことができるようにこれをしたいです。 4.1.1および4.2でこれを行うのは本当に良い方法ではありません。これは、GoogleのSpeechRecognitionサービスがオプションではない「bloop」サウンドで開始するためです効果。この音をオフにする方法はないようです。 APIを制御するものは何もリストされていません。ユーザーは、4秒間の繰り返しループで「ループ」されることに感謝しません。
次の RecognizerIntent extrasを提供しようとすることができます。
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 thereの将来のバージョンで追加されたとしても音声認識アプリ(Google Voice Searchなど)が実際にこれを実装することを保証するものではありません。 RecognizerIntent ドキュメントには、動作が指定されていない追加機能が多数含まれています。
最適なオプションは、onEndOfSpeech
またはonError
を取得したらすぐに認識エンジンを再起動することです。
エラーまたは結果が発生するたびに自動的に再起動することで継続的であることをシミュレートする音声認識認識機能を持つサービスを作成しました。ご覧のとおり、私のサービスは連続ASRを開始/停止するためにブロードキャストレシーバーをリッスンします(バッテリーが高価なため、関連するUIがフォアグラウンドにあるときにのみこの連続ASRサービスを実行することをお勧めします)。 ASRの結果は、アプリの他の部分にもブロードキャストされます。ブロードキャストは無視できます。サービスとRecognizer Listenerが主なアイデアです。 DONTは、インターネットアクセス許可とマニフェスト、およびサービス宣言を忘れます。
<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!!!!
}
}
}
私はしばらくの間同じ問題に直面していましたが、どこでも正しい答えを見つけることができませんでした。リスニングを無限に行うには、onError()
またはonResults()
をポストしますspeechRecognizerを再インスタンス化し、インテントオブジェクトを再設定した後、再度speechRecognizer.startListening(intent);
を呼び出しました。
しかし、あなたが言及したように、それは最終的にはしばらく聞いた後に消えていました。
ここに私が試したものがあり、それは私のために働いた。
speechRecognizer.startListening(intent);
を思い出す前に、私は単に
speechRecognizer.stopListening();
speechRecognizer.destroy();
そして、最初のパラで言及したことを実行します。
これまでのところ、私にとってはうまく機能しています。