¿Por qué no se llama a UtteranceProgress Listener a Text to Speach?
He intentado llamar a algunos métodos de inicio y final de texto a voz, así que he utilizado el setOnUtteranceProgressListener, pero no funciona / get llamado.
¿Qué estoy haciendo mal?
- La interfaz de usuario de texto a voz es un android lento
- ¿Cómo puedo controlar cómo Android TTS reproduce audio?
- Pausa tono del teléfono mientras habla a través de texto a voz y luego reanudar
- KitKat tarda 6 segundos más que Froyo para reaccionar a TextToSpeech.speak () en primera llamada
- Ejecución de TTS Android en un servicio
Aquí el código necesario:
Clase:
public class SpeechRecognizerActivity extends Activity implements TextToSpeech.OnInitListener
Método de Init:
@Override public void onInit(int status) { if (status == TextToSpeech.SUCCESS) { String language = Locale.getDefault().getLanguage(); int result = tts.setLanguage(Locale.US); if (result == TextToSpeech.LANG_MISSING_DATA || result == TextToSpeech.LANG_NOT_SUPPORTED) { Log.e("TTS", "This Language is not supported"); } else { } } else { Log.e("TTS", "Initilization Failed!"); } }
Método donde comienza hablando:
private void speakOut(String text) { setTtsListener(); tts.setPitch(1.5f); tts.setSpeechRate(1.5f); tts.speak(text, TextToSpeech.QUEUE_FLUSH, null); }
El Listener (Método se llama en speakOut): Ninguno de esos registros se muestran en Logcat.
private void setTtsListener() { if (Build.VERSION.SDK_INT >= 15) { int listenerResult = tts.setOnUtteranceProgressListener(new UtteranceProgressListener() { @Override public void onDone(String utteranceId) { Log.d(TAG,"progress on Done " + utteranceId); } @Override public void onError(String utteranceId) { Log.d(TAG,"progress on Error " + utteranceId); } @Override public void onStart(String utteranceId) { Log.d(TAG,"progress on Start " + utteranceId); } }); if (listenerResult != TextToSpeech.SUCCESS) { Log.e(TAG, "failed to add utterance progress listener"); } } else { int listenerResult = tts.setOnUtteranceCompletedListener(new TextToSpeech.OnUtteranceCompletedListener() { @Override public void onUtteranceCompleted(String utteranceId) { Log.d(TAG,"progress on Completed " + utteranceId); } }); if (listenerResult != TextToSpeech.SUCCESS) { Log.e(TAG, "failed to add utterance completed listener"); } } }
Una pequeña solución que encontré fue esta:
boolean speakingEnd = tts.isSpeaking(); do { speakingEnd = tts.isSpeaking(); } while ((speakingEnd)); Log.d(TAG,"talking stopped");
Lo he añadido al final del método speakOut, pero esta solución no es muy buena. Trabajar con los oyentes sería perfecto.
Entonces, ¿qué estoy haciendo mal?
- Agrega mi motor TTS a Android TTS Serivce como SAPI
- ¿Cómo agregar un sonido al motor pico TTS de Android?
- Lenguaje hindi
- TTS android 4.1 jellybean
- ¿Cómo interpretar audiblemente la pronunciación IPA en Android?
- ¿Cómo saber cuándo se termina el TTS?
- Pausa en el TTS android
- ¿Por qué la intención de ACTION_CHECK_TTS_DATA es "incómoda de usar"?
Cuando llama a tts.speak(text, TextToSpeech.QUEUE_FLUSH, null);
Necesita pasarle un mapa con el KEY_PARAM_UTTERANCE_ID
HashMap<String, String> map = new HashMap<String, String>(); map.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID,"messageID"); tts.speak(text, TextToSpeech.QUEUE_FLUSH, map);
Esto permite que TextToSpeech sepa utilizar su oyente de emisión para ese text
- ¿Cómo configurar ButterKnife plugin en Android Studio?
- Cómo leer la salida del comando de proceso android