2016-04-26 10 views
5

Ich verwende Google API für die Spracherkennung, möchte aber die Hörzeit begrenzen. Zum Beispiel zwei Sekunden. Nach zwei Sekunden, obwohl der Benutzer weiterhin Spracherkennung verwendet, sollte aufhören zu hören. Ich habe versucht, ein paar Extras wieAndroid - Spracherkennung Begrenzen der Hörzeit

EXTRA_SPEECH_INPUT_COMPLETE_SILENCE_LENGTH_MILLIS EXTRA_SPEECH_INPUT_MINIMUM_LENGTH_MILLIS EXTRA_SPEECH_INPUT_POSSIBLY_COMPLETE_SILENCE_LENGTH_MILLIS

aber es hat mir geholfen, nicht. Mein vollständige Code ist hier, wenn jemand mir helfen kann, werde ich

public void promptSpeechInput() 
{ 
    //This intent recognize the peech 
    Intent i = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); 
    i.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM); 
    i.putExtra(RecognizerIntent.EXTRA_LANGUAGE, Locale.getDefault()); 
    i.putExtra(RecognizerIntent.EXTRA_PROMPT, "Say Something"); 

    try { 
     startActivityForResult(i, 100); 
    } 
    catch (ActivityNotFoundException a) 
    { 
     Toast.makeText(MainActivity.this,"Your device does not support",Toast.LENGTH_LONG).show(); 
    } 
} 

//For receiving speech input 
public void onActivityResult(int request_code, int result_code, Intent i) 
{ 
    super.onActivityResult(request_code, result_code, i); 

    switch (request_code) 
    { 
     case 100: if(result_code == RESULT_OK && i != null) 
     { 
      ArrayList<String> result = i.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS); 
      resultTEXT.setText(result.get(0)); 
     } 
      break; 
    } 
} 

Antwort

2

Sie können nicht die Zeit begrenzen, zu schätzen wissen, dass die Erkennungsempfangsbereit ist. Stellen Sie einfach die Mindestzeit ein, die Sie vor dem Schließen hören möchten, aber nicht die Maximalzeit.

Ich habe auch nach einer Lösung für dieses Problem gesucht, also hoffe ich, dass Sie vielleicht einen besseren finden werden. Ich fand diesen Beitrag von einem anderen Stackoverflow Mate:

SpeechRecognizer Time Limit

Dort schlagen er die nächste Möglichkeit, Ihr Problem zu beheben:

Ihre beste Wette wäre eine Art Timer einzufädeln, so etwas wie ein CountDownTimer:

yourSpeechListener.startListening(yourRecognizerIntent); 
new CountDownTimer(2000, 1000) { 

public void onTick(long millisUntilFinished) { 
    //do nothing, just let it tick 
} 

public void onFinish() { 
    yourSpeechListener.stopListening(); 
} }.start(); 

In anderer Art und Weise, Ihre Spracherkennungs kurz zu machen, yo u kann den nächsten Parameter zu Ihrem Intent hinzufügen: EXTRA_PARTIAL_RESULTS

So können Sie Teilergebnisse von Ihrem SpeechRecognizer erhalten, was bedeutet, dass Ihre Methor onActivityPartialResult kehren Sie ein weiteres Array mit Streichhölzern Wert. Diese Methode wird vor onActivityResults aufgerufen und ist schneller, aber natürlich nicht so genau wie onActivityResult. Das hilft Ihnen nur dann, wenn Ihr Listener nach einem bestimmten Wort sucht.

Hoffe, dass dies Ihnen ein wenig mit Ihrer App helfen wird!

Viel Glück!

+0

Danke Francisco, ich werde es versuchen – ysfcyln