2015-04-10 3 views
1

Я работаю с текстом в речь и речь в текст в одно и то же время. Я делаю приложение, в котором он задает вопрос через текст в речь и получает ответ от пользователя через речь и приложение, преобразуя его в текст. но это не работает нормально. оба работают в то же время, как и то, что они говорят, это текст обратно. можем ли мы дать некоторую задержку, чтобы, когда она перестала говорить, она прослушивает голос и возвращает этот текст. `Android Текст в речь И речь к тексту

import android.app.Activity; 
import android.content.ActivityNotFoundException; 
import android.content.Intent; 
import android.speech.RecognizerIntent; 
import android.speech.tts.TextToSpeech; 
import android.os.Bundle; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.widget.TextView; 
import android.widget.Toast; 
import java.util.ArrayList; 
import java.util.Locale; 
public class MainActivity extends Activity implementsTextToSpeech.OnInitListener { 
    TextView eText1; 
    TextToSpeech textToSpeech; 
    String speech = "Hey, Can u read me?"; 
    private final int REQ_CODE_SPEECH_INPUT = 100; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     eText1 = (TextView)findViewById(R.id.textView2); 
     textToSpeech = new TextToSpeech(this,this); 
    } 
    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     switch (requestCode) { 
      case REQ_CODE_SPEECH_INPUT: { 
       if (resultCode == RESULT_OK && null != data) { 
        ArrayList<String> result = data 
         .getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS); 
        eText1.setText(result.get(0)); 
       } 
       break; 
      } 
     } 
    } 
    private void promptSpeechInput() { 
     Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); 
     intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM); 
     intent.putExtra(RecognizerIntent.EXTRA_PROMPT, speech); 
     try { 
      startActivityForResult(intent, REQ_CODE_SPEECH_INPUT); 
     } catch (ActivityNotFoundException a) { 
      Toast.makeText(getApplicationContext(), 
        getString(R.string.speech_not_supported), 
        Toast.LENGTH_SHORT).show(); 
     } 
    } 
    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.menu_main, menu); 
     return true; 
    } 
    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 

     int id = item.getItemId(); 

     if (id == R.id.action_settings) { 
      return true; 
     } 
     return super.onOptionsItemSelected(item); 
    } 
    private void speakOut() { 
     String text = speech; 
     textToSpeech.speak(text, TextToSpeech.QUEUE_FLUSH, null); 
    } 
    @Override 
    public void onInit(int status) { 
     if(status == TextToSpeech.SUCCESS){ 
      int result = textToSpeech.setLanguage(Locale.ENGLISH); 
      if(result == TextToSpeech.LANG_NOT_SUPPORTED || result == TextToSpeech.LANG_MISSING_DATA){ 
       Toast.makeText(this, "This language is not supported", Toast.LENGTH_LONG).show(); 
      } 
      else{ 
       speakOut(); 
       promptSpeechInput(); 
      } 
     }else{ 
      Toast.makeText(this, "Initialization failed", Toast.LENGTH_LONG).show(); 
     } 
    } 
} 

`

+1

Можете ли вы разместить код? – TameHog

+0

@TameHog, если в моем коде есть какие-либо ошибки, пожалуйста, дайте мне знать. – Bisma

ответ

0

Попробуйте изменить:

speakOut(); 
promptSpeechInput(); 

в

promptSpeechInput(); 

А потом добавить:

speakOut(); 

после

eText1.setText(result.get(0)); 

Это должно говорить текст после того, как он закончил получения текста

Edit: использовать this, чтобы определить, когда речь закончена. Когда это просто вызов promptSpeechInput()

+0

Я хочу, чтобы он говорил текст перед тем, как получить текст. – Bisma

+0

О, я вижу, что посмотрю, что можно сделать – TameHog

+0

Отредактировал свой ответ. Извините, что я поздно был занят – TameHog

Смежные вопросы