¿Cómo saber cuándo se termina el TTS?

Estoy implementando una aplicación Interactive Voice Response en Android. Me gustaría saber cómo determinar cuándo la función tts.speak() ha terminado de hablar para poder llamar a mi función de reconocimiento de voz.

 public class TTSActivity extends Activity implements OnInitListener, OnUtteranceCompletedListener, ... { private TextToSpeech mTts; ........... private void speak(String text) { if(text != null) { HashMap<String, String> myHashAlarm = new HashMap<String, String>(); myHashAlarm.put(TextToSpeech.Engine.KEY_PARAM_STREAM, String.valueOf(AudioManager.STREAM_ALARM)); myHashAlarm.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, "SOME MESSAGE"); mTts.speak(text, TextToSpeech.QUEUE_FLUSH, myHashAlarm); } } // Fired after TTS initialization public void onInit(int status) { if(status == TextToSpeech.SUCCESS) { mTts.setOnUtteranceCompletedListener(this); } } // It's callback public void onUtteranceCompleted(String utteranceId) { Log.i(TAG, utteranceId); //utteranceId == "SOME MESSAGE" } ........... } 

Leer un buen tutorial

El setOnUtteranceCompletedListener está obsoleto desde el nivel de API 15. En su lugar, utilice setOnUtteranceProgressListener .

Encontré un fragmento de código ( aquí ) que me hizo muy fácil saber cuándo se terminó el texto:

 @Override public void onInit(int status) { if (status == TextToSpeech.SUCCESS) { myTTS.setOnUtteranceProgressListener(new UtteranceProgressListener() { @Override public void onDone(String utteranceId) { // Log.d("MainActivity", "TTS finished"); } @Override public void onError(String utteranceId) { } @Override public void onStart(String utteranceId) { } }); } else { Log.e("MainActivity", "Initilization Failed!"); } } 

http://www.codota.com/android/scenarios/52fcbd34da0ae25e0f855408/android.speech.tts.TextToSpeech?tag=dragonfly

Me di cuenta de que hay personas que tienen problemas en el uso de TextToSpeech para pedir que la solución a usted

¿Cómo saber cuándo se termina el TTS? Sin usar setOnUtteranceCompletedListener

 public void isTTSSpeaking(){ final Handler h =new Handler(); Runnable r = new Runnable() { public void run() { if (!tts.isSpeaking()) { onTTSSpeechFinished(); } h.postDelayed(this, 1000); } }; h.postDelayed(r, 1000); } 

Utilice un SpeakableListener cuando haga el texto para hablar.

 private volatile boolean finished; private SpeakableListener listener = new SpeakableListener() { @Override public void markerReached(SpeakableEvent arg0) { // TODO Auto-generated method stub } @Override public void speakableCancelled(SpeakableEvent arg0) { // TODO Auto-generated method stub } @Override public void speakableEnded(SpeakableEvent arg0) { TestSpeaker.this.finished = true; } @Override public void speakablePaused(SpeakableEvent arg0) { // TODO Auto-generated method stub } @Override public void speakableResumed(SpeakableEvent arg0) { // TODO Auto-generated method stub } @Override public void speakableStarted(SpeakableEvent arg0) { TestSpeaker.this.finished = false; } @Override public void topOfQueue(SpeakableEvent arg0) { // TODO Auto-generated method stub } @Override public void wordStarted(SpeakableEvent arg0) { // TODO Auto-generated method stub } }; /** Speak the following string. */ public void sayIt(String str) { System.out.print(" " + str + " "); /* The the synthesizer to speak. */ synthesizer.speakPlainText(str, listener); 
  • ¿Es Google TTS Engine en todos los teléfonos Android, y dónde puedo conseguirlo?
  • Ampliación del paquete de idiomas de texto a voz (TTS) de Android
  • Cómo cambiar programáticamente el motor predeterminado TTS
  • Cómo utilizar TTS (TextToSpeech) mientras que la cadena tiene más de 4000 caracteres en Android
  • Hablar con TTS como Hindi
  • Cómo detener android.speech.tts.TextToSpeech?
  • Android TTS añadir idiomas
  • Problema con isSpeaking () cuando se utiliza Text-to-Speech en Android
  • Android TTS no habla gran cantidad de texto
  • TextToSpeech: función de palabra obsoleta en el nivel 21 de la API
  • La interfaz de usuario de texto a voz es un android lento
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.