2016-05-29 4 views
3

Ich möchte Sprache in Text in meiner App konvertieren .. Dafür verwende ich recognitionListener Schnittstelle Alles funktioniert gut, aber wie Sie den Text aktualisiert und sogar während des Sprechens angezeigt (wie in google jetzt die Sprachsuche)Android Rede zu Text :: Getting Text in Echtzeit aktualisiert

ich die RecognizerIntent.EXTRA_PARTIAL_RESULTS festgelegt haben, auf true und verwendet auch die onPartialResults (Bundle arg() -Methode der recognitionListener Schnittstelle Text Durch den ganzen Text zu setzen angezeigt wird immer an Sobald die Spracherkennung abgeschlossen ist Aber ich möchte den Echtzeit-Text angezeigt werden, wie der Benutzer

spricht

meine Tätigkeit

public class MainActivity extends Activity implements RecognitionListener 
{ 
private TextView returnedText; 
private ToggleButton toggleButton; 
private ProgressBar progressBar; 
private SpeechRecognizer speech = null; 
private Intent recognizerIntent; 
private String LOG_TAG = "VoiceRecognitionActivity"; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    returnedText = (TextView) findViewById(R.id.textView1); 
    progressBar = (ProgressBar) findViewById(R.id.progressBar1); 
    toggleButton = (ToggleButton) findViewById(R.id.toggleButton1); 
    Button recordbtn = (Button) findViewById(R.id.mainButton); 


    progressBar.setVisibility(View.INVISIBLE); 
    speech = SpeechRecognizer.createSpeechRecognizer(this); 
    speech.setRecognitionListener(this); 
    recognizerIntent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); 
    recognizerIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_PREFERENCE, 
           "en"); 
    recognizerIntent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE, 
           this.getPackageName()); 
    recognizerIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, 
           RecognizerIntent.LANGUAGE_MODEL_WEB_SEARCH); 
    recognizerIntent.putExtra(RecognizerIntent.EXTRA_PARTIAL_RESULTS, true); 
    recognizerIntent.putExtra(RecognizerIntent.EXTRA_SPEECH_INPUT_MINIMUM_LENGTH_MILLIS, 3000); 

    toggleButton.setOnCheckedChangeListener(new OnCheckedChangeListener() { 

      @Override 
      public void onCheckedChanged(CompoundButton buttonView, 
             boolean isChecked) { 
       if (isChecked) { 
        progressBar.setVisibility(View.VISIBLE); 
        progressBar.setIndeterminate(true); 
        speech.startListening(recognizerIntent); 
       } else { 
        progressBar.setIndeterminate(false); 
        progressBar.setVisibility(View.INVISIBLE); 
        speech.stopListening(); 
       } 
      } 
     }); 


    recordbtn.setOnLongClickListener(new OnLongClickListener(){ 

      @Override 
      public boolean onLongClick(View p1) 
      { 
       progressBar.setVisibility(View.VISIBLE); 
       progressBar.setIndeterminate(true); 
       speech.startListening(recognizerIntent); 
       return true; 
      } 


     }); 



} 

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

@Override 
protected void onPause() { 
    super.onPause(); 
    if (speech != null) { 
     speech.destroy(); 
     Log.i(LOG_TAG, "destroy"); 
    } 

} 

@Override 
public void onBeginningOfSpeech() { 
    Log.i(LOG_TAG, "onBeginningOfSpeech"); 
    progressBar.setIndeterminate(false); 
    progressBar.setMax(10); 
} 

@Override 
public void onBufferReceived(byte[] buffer) { 
    Log.i(LOG_TAG, "onBufferReceived: " + buffer); 
} 

@Override 
public void onEndOfSpeech() { 
    Log.i(LOG_TAG, "onEndOfSpeech"); 
    progressBar.setIndeterminate(true); 
    toggleButton.setChecked(false); 
} 

@Override 
public void onError(int errorCode) { 
    String errorMessage = getErrorText(errorCode); 
    Log.d(LOG_TAG, "FAILED " + errorMessage); 
    returnedText.setText(errorMessage); 
    toggleButton.setChecked(false); 
} 

@Override 
public void onEvent(int arg0, Bundle arg1) { 
    Log.i(LOG_TAG, "onEvent"); 
} 

@Override 
public void onPartialResults(Bundle arg0) { 
    Log.i(LOG_TAG, "onPartialResults"); 

    ArrayList<String> matches = arg0.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION); 
    String text = ""; 
    for (String result : matches) 
     text += result + "\n"; 

    returnedText.setText(text); 
} 

@Override 
public void onReadyForSpeech(Bundle arg0) { 
    Log.i(LOG_TAG, "onReadyForSpeech"); 
} 

@Override 
public void onResults(Bundle results) { 
    Log.i(LOG_TAG, "onResults"); 

} 

@Override 
public void onRmsChanged(float rmsdB) { 
    Log.i(LOG_TAG, "onRmsChanged: " + rmsdB); 
    progressBar.setProgress((int) rmsdB); 

} 

public static String getErrorText(int errorCode) { 
    String message; 
    switch (errorCode) { 
     case SpeechRecognizer.ERROR_AUDIO: 
      message = "Audio recording error"; 
      break; 
     case SpeechRecognizer.ERROR_CLIENT: 
      message = "Client side error"; 
      break; 
     case SpeechRecognizer.ERROR_INSUFFICIENT_PERMISSIONS: 
      message = "Insufficient permissions"; 
      break; 
     case SpeechRecognizer.ERROR_NETWORK: 
      message = "Network error"; 
      break; 
     case SpeechRecognizer.ERROR_NETWORK_TIMEOUT: 
      message = "Network timeout"; 
      break; 
     case SpeechRecognizer.ERROR_NO_MATCH: 
      message = "No match"; 
      break; 
     case SpeechRecognizer.ERROR_RECOGNIZER_BUSY: 
      message = "RecognitionService busy"; 
      break; 
     case SpeechRecognizer.ERROR_SERVER: 
      message = "error from server"; 
      break; 
     case SpeechRecognizer.ERROR_SPEECH_TIMEOUT: 
      message = "No speech input"; 
      break; 
     default: 
      message = "Didn't understand, please try again."; 
      break; 
    } 
    return message; 
} 

} 

WIE DIESE

Antwort

3

Sie können möglich machen keinen Echtzeit-Erkennung mit Google-API erreichen. Im besten Fall können Sie das gleiche Ergebnis als Google erreichen, wenn Sie auf OK Google oder zum Beispiel Recognition in Whatsup für Schreib Text Wort für Wort verwenden mit denen Sie Ihre Absicht:

recognizerIntent.putExtra("android.speech.extra.DICTATION_MODE", true); 

Die Speechrecognizer nehmen seine Zeit alles zu verarbeiten die Informationen und teilen Sie sie als Informationen, um sie in Ihrer App verwenden zu können. Sie können den nächsten Beitrag sehen, ob es Ihnen hilft, Ihre App zu optimieren: Make SpeechRecognizer Faster

Ich hoffe, dass es Ihnen helfen wird!

+0

Danke für den Vorschlag Bro ... ich werde es versuchen ,, – user5894647

+1

hoffe, es wird Ihnen helfen! Ich habe viel mit dieser Scheiße zu tun, wenn ich dir mit etwas anderem helfen kann, lass es mich wissen;) –

+0

haha ​​,, nichts anderes bro ,, danke – user5894647