2017-06-23 1 views
0

Ich benutze recognitionlistener Schnittstelle in meiner App, um Sprache in Text zu konvertieren. Ich möchte jedoch den konvertierten Text aus der Sprache anzeigen, sobald ich spreche. Wenn ich 4-5 Wörter spreche, sollte das erste Wort angezeigt werden, sobald ich es ausspreche. Kurz gesagt, wie Google-Assistent. Ich überschreibe es derzeit onresults Methode und zeigt Ergebnisse, wenn diese Methode aufgerufen wird. Gibt es eine Möglichkeit, ein Wort nach dem anderen zu erkennen und eins nach dem anderen zu zeigen?Android (RecognitionListener) Live-Rede zur Textvorschau

https://drive.google.com/open?id=0BxHdMJXrMP2HRk80aVBtZHIxaDAenter link description here

import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.speech.RecognitionListener; 
import android.speech.RecognizerIntent; 
import android.speech.SpeechRecognizer; 
import android.widget.Button; 
import android.widget.TextView; 
import java.util.ArrayList; 
import android.util.Log; 



public class VoiceRecognitionTest extends Activity implements OnClickListener 
{ 

    private TextView mText; 
    private SpeechRecognizer sr; 
    private static final String TAG = "MyActivity"; 
    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.main); 
      Button speakButton = (Button) findViewById(R.id.btn_speak);  
      mText = (TextView) findViewById(R.id.textView1);  
      speakButton.setOnClickListener(this); 
      sr = SpeechRecognizer.createSpeechRecognizer(this);  
      sr.setRecognitionListener(new listener());   
    } 

    class listener implements RecognitionListener   
    { 
      public void onReadyForSpeech(Bundle params) 
      { 
        Log.d(TAG, "onReadyForSpeech"); 
      } 
      public void onBeginningOfSpeech() 
      { 
        Log.d(TAG, "onBeginningOfSpeech"); 
      } 
      public void onRmsChanged(float rmsdB) 
      { 
        Log.d(TAG, "onRmsChanged"); 
      } 
      public void onBufferReceived(byte[] buffer) 
      { 
        Log.d(TAG, "onBufferReceived"); 
      } 
      public void onEndOfSpeech() 
      { 
        Log.d(TAG, "onEndofSpeech"); 
      } 
      public void onError(int error) 
      { 
        Log.d(TAG, "error " + error); 
        mText.setText("error " + error); 
      } 
      public void onResults(Bundle results)     
      { 
        String str = new String(); 
        Log.d(TAG, "onResults " + results); 
        ArrayList data = results.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION); 
        for (int i = 0; i < data.size(); i++) 
        { 
           Log.d(TAG, "result " + data.get(i)); 
           str += data.get(i); 
        } 
        mText.setText("results: "+String.valueOf(data.size()));   
      } 
      public void onPartialResults(Bundle partialResults) 
      { 
        Log.d(TAG, "onPartialResults"); 
      } 
      public void onEvent(int eventType, Bundle params) 
      { 
        Log.d(TAG, "onEvent " + eventType); 
      } 
    } 
    public void onClick(View v) { 
      if (v.getId() == R.id.btn_speak) 
      { 
       Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);   
       intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,RecognizerIntent.LANGUAGE_MODEL_FREE_FORM); 
       intent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE,"voice.recognition.test"); 

       intent.putExtra(RecognizerIntent.EXTRA_MAX_RESULTS,5); 
        sr.startListening(intent); 

      } 
    } 
} 
+1

einige Code hinzufügen ... –

Antwort

2

Ja, Sie können, müssen Sie onPartialResults außer Kraft zu setzen :)

@Override 
      public void onPartialResults(Bundle partialResults) { 
       ArrayList data = partialResults.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION); 
       String word = (String) data.get(data.size() - 1); 
       recognisedText.setText(word); 

       Log.i("TEST", "partial_results: " + word); 
      } 
+1

Zusätzlich dazu hatte ich RecognizerIntent.EXTRA_PARTIAL_RESULTS einstellen zu wahr. Vielen Dank! –

+0

Ich bin froh, dass du es geschafft hast! :) –

Verwandte Themen