2017-07-28 1 views
3

Ich entwickle in Android und SpeechRecognizer verwenden, um kontinuierliche Spracherkennung zu implementieren.Warum ist der SpeechRecognizer beschäftigt, wenn ich ihn starte, nachdem der onEndOfSpeech aufgerufen wurde?

Nach dem Start der Spracherkennung über folgenden Code:

private void startListening(){ 
    recognizerIntent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); 
    recognizerIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,RecognizerIntent.LANGUAGE_MODEL_WEB_SEARCH); 
    recognizerIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_PREFERENCE, "en"); 
    recognizerIntent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE, getActivity().getPackageName()); 
    recognizerIntent.putExtra(RecognizerIntent.EXTRA_SPEECH_INPUT_COMPLETE_SILENCE_LENGTH_MILLIS,Long.valueOf(3000L)); 
    recognizerIntent.putExtra(RecognizerIntent.EXTRA_MAX_RESULTS,1); 
} 

Und nennen startListening() wieder, wenn onEndOfSpeech aufgerufen wurde.

Aber die onError wird aufgerufen, und zeigen SpeechRecognizer.ERROR_RECOGNIZER_BUSY.

Q1: Warum die SpeechRecognizer beschäftigt ist, wenn ich es nach dem onEndOfSpeech Start aufgerufen wurde?

Q2 Wie implementiert man die crooect Art der kontinuierlichen Spracherkennung?

Antwort

1

Die Android-Spracherkennungsbibliothek ist so konzipiert, dass bei einer extensiven Verwendung möglicherweise eine Zeitüberschreitung auftritt.

Als solche gibt es keine offizielle Dokumentation darüber, warum Google das tut und selbst bei der Verwendung von Google Apps gibt es keine kontinuierliche Spracherkennung.

Um dies zu umgehen, müssen wir mit den Sprach-Callback-Methoden herumspielen, um den Fehler zu erfassen und erneut zu hören. Ich habe eigens eine Bibliothek erstellt, um dieses Zeitproblem zu lösen, und ich denke, dass es auch Ihrem Zweck dienen würde.

Gehen Sie zu Github - DroidSpeech und fügen Sie die Bibliothek zu Ihrem Projekt hinzu, entweder klonen Sie es oder Sie können die Abhängigkeit von Großbuchstaben verwenden. Sobald Droid Speech hinzugefügt initialisieren und den Hörer wie unten erwähnt,

DroidSpeech droidSpeech = new DroidSpeech(this, null); 
droidSpeech.setOnDroidSpeechListener(this); 

den Benutzer hören zu starten rufen Sie den Code unten,

droidSpeech.startDroidSpeechRecognition(); 

Und Sie werden die Stimme Ergebnis in der Listener-Methode zu erhalten,

@Override 
public void onDroidSpeechFinalResult(String finalSpeechResult, boolean droidSpeechWillListen) 
{ 
    // Do whatever you want with the speech result 
} 

Was diese Bibliothek unterscheidet, ist

  1. Angebote kontinuierliche Spracherkennung Unterstützung nach jedem Wort gesprochen wird,
  2. Sie müssen Fehler keine Sorge über die Rede beschäftigt & Zeit, wie die Bibliothek Pflege dieser nimmt und stellt sicher, dass es das Problem insgesamt rottet,
  3. Sie müssen keine spezifischen Codezeilen für die Spracherkennung schreiben, außer das Initialisieren der Bibliothek und das Einstellen der Listener-Methoden.
  4. Kann bei Bedarf die Mikrofonberechtigungen für den Benutzer erfragen.
  5. kümmert sich um den lästigen Piepton Ton wenn gibt es einen Fehler
+0

Danke, ich werde es versuchen! – Wun

+0

Warum hört es nach ein paar Versuchen auf zu arbeiten? Oder verwende ich es falsch? – edwardffs

Verwandte Themen