SpeechRecognizer将重复,而不是永久运行



我正在尝试开发类似于谷歌助手的东西。所以当我说";OK应用程序";,它应该可以处理。所以我刚刚创建了一个在后台运行的服务:

public class SttService extends Service implements RecognitionListener {
private static final String TAG = "SstService";
SpeechRecognizer mSpeech;
private void speak() {
mSpeech = SpeechRecognizer.createSpeechRecognizer(SttService.this);
mSpeech.setRecognitionListener(SttService.this);
Intent intent1 = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
intent1.putExtra(RecognizerIntent.EXTRA_LANGUAGE_PREFERENCE, "en");
mSpeech.startListening(intent1);
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.e(TAG, "onStartCommand: I am running");
speak();
return START_STICKY;
}
@Nullable
@Override
public IBinder onBind(Intent intent) {
Log.e(TAG, "onBind: ");
return null;
}
@Override
public void onReadyForSpeech(Bundle params) {
Log.e(TAG, "onReadyForSpeech: ");
}
@Override
public void onBeginningOfSpeech() {
Log.e(TAG, "onBeginningOfSpeech: ");
}
@Override
public void onRmsChanged(float rmsdB) {
// Log.e(TAG, "onRmsChanged: ");
}
@Override
public void onBufferReceived(byte[] buffer) {
Log.e(TAG, "onBufferReceived: ");
}
@Override
public void onEndOfSpeech() {
Log.e(TAG, "onEndOfSpeech: ");
}
@Override
public void onError(int error) {
Log.e(TAG, "onError: " + error);
if (error == 7) {
speak();
}
}
@Override
public void onResults(Bundle results) {
ArrayList<String> resultsStringArrayList = results.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION);
String mainResult = resultsStringArrayList.get(0);
Log.e(TAG, "onResults: " + mainResult);
if (mainResult.equalsIgnoreCase("Okay App")) {
System.out.println("What's up?");
}
mSpeech.destroy();
mSpeech = null;
speak();
}
@Override
public void onPartialResults(Bundle partialResults) {
Log.e(TAG, "onPartialResults: ");
}
@Override
public void onEvent(int eventType, Bundle params) {
Log.e(TAG, "onEvent: ");
}
}

我的问题是应用程序没有永久监听。它开始倾听,然后就有了结果。当我什么都没说的时候,它会听大约2秒,然后SpeechRecognizer就会被破坏,这样就可以开始另一次演讲了。因此,在它被摧毁的时候,会有一段休息时间,当我在这段时间说些什么时,它不会被认可。

我的应用程序没有按我的意愿运行。也许我做这件事的方式完全错了。因此,我试图实现的是一个SpeechRecognizer,它永久运行,只在我说";Okay应用程序";。我该怎么做?

SpeechRecognizer就是这样设计的。这不是为了永久的背景倾听,而是为了短期的即时反应。就像有人点击搜索栏中的麦克风按钮一样。如果你想要永久性的背景倾听,你就必须走低层次,自己去做。

相关内容

  • 没有找到相关文章

最新更新