gpt4 book ai didi

android - SpeechRecognizer 在第一个结果后没有听到

转载 作者:太空狗 更新时间:2023-10-29 12:52:12 27 4
gpt4 key购买 nike

我在 Android 中使用 SpeechRecognizer 和 RecognizerIntent 来实现语音识别。我的目标是在我的语音识别器在屏幕上显示结果后重新开始收听语音。为此,我使用了以下代码。

问题是,第一次运行良好并显示结果,但在第二次开始收听(从 onResults 方法调用)后,由于某种原因它听不到正在说的内容。然后它给出 ERROR_SPEECH_TIMEOUT 错误,这意味着没有语音输入。在 Logcat 上,我可以看到它进入 onReadyForSpeech(),但不知何故,它听不到我在说什么。

有谁知道为什么会这样?它返回结果后是否继续监听?显式再次调用 startListening 是否正确?

public class VR extends Activity implements RecognitionListener {


private static final int VOICE_RECOGNITION_REQUEST_CODE = 1234;
private TextView vrtext;
private SpeechRecognizer speech = null;
private Intent intent;
private String TAG = "VR";

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.vr);

vrtext = (TextView) findViewById(R.id.vrtext);

}

@Override
public void onResume()
{
listen();
super.onResume();
}

private void listen()
{
speech = SpeechRecognizer.createSpeechRecognizer(this);
speech.setRecognitionListener(this);
intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_PREFERENCE, "en");
intent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE, this.getPackageName());
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_WEB_SEARCH);
intent.putExtra(RecognizerIntent.EXTRA_MAX_RESULTS, 3);

speech.startListening(intent);
}

@Override
protected void onPause() {
super.onPause();
// TODO Auto-generated method stub

if(speech != null)
{
speech.destroy();
Log.i(TAG,"destroy");
}

}

public void onBeginningOfSpeech() {
// TODO Auto-generated method stub
Log.i(TAG, "onbeginningofspeech");
}

public void onBufferReceived(byte[] arg0) {
// TODO Auto-generated method stub
//Log.i(TAG, "onbufferreceived");
}

public void onEndOfSpeech() {
// TODO Auto-generated method stub
Log.i(TAG, "onendofspeech");
}

public void onError(int arg0) {
// TODO Auto-generated method stub
Log.i(TAG, "error code: " + arg0);
}

public void onEvent(int arg0, Bundle arg1) {
// TODO Auto-generated method stub
Log.i(TAG, "onevent");
}

public void onPartialResults(Bundle arg0) {
// TODO Auto-generated method stub
Log.i(TAG, "onpartialresults");
}

public void onReadyForSpeech(Bundle arg0) {
// TODO Auto-generated method stub
Log.i(TAG, "onreadyforspeech");
}

public void onResults(Bundle arg0) {
// TODO Auto-generated method stub
Log.i(TAG, "onresults");
ArrayList<String> matches = arg0.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION);
String s = "";
for (String result:matches)
s += result + "\n";

vrtext.setText(s);

speech.startListening(intent);

}

public void onRmsChanged(float arg0) {
// TODO Auto-generated method stub
//Log.i(TAG, "onrmschanged");
}

}

最佳答案

“返回结果后是否继续监听?”没有

“显式再次调用 startListening 是否正确?”是的。

另外,如果你想保持识别持续发生,你应该在出现如下错误时再次调用startListening:

@Override
public void onError(int errorCode)
{
if ((errorCode == SpeechRecognizer.ERROR_NO_MATCH)
|| (errorCode == SpeechRecognizer.ERROR_SPEECH_TIMEOUT))
{
Log.d(TAG, "didn't recognize anything");
// keep going
recognizeSpeechDirectly();
}
else
{
Log.d(TAG,
"FAILED "
+ SpeechRecognitionUtil
.diagnoseErrorCode(errorCode));
}
}

查看我使用 SpeechRecognizer 检测特定口语单词的代码 here .

关于android - SpeechRecognizer 在第一个结果后没有听到,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11196052/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com