Android: dos instancias de Text-to-Speech funcionan muy lentamente

Necesito implementar la característica en mi aplicación de Andorind que permita jugar dos idiomas sintetizados diferentes en Acitivity actual – por ejemplo que tiene dos botones dicen el inglés y dicen el francés

He intentado hacerlo de dos maneras siguientes, pero ambos funcionan de manera ineficaz porque hay mucho retraso antes de que el sonido se reproduzca:

  1. Primer enfoque: crear una sola instancia de TTS y cambiar el idioma por el método setLocale dependiendo de qué idioma tiene que ser jugado. Desafortunadamente el cambio entre lenguajes por setLocale requiere mucho tiempo, lo cual tiene impacto en la reacción después de hacer clic en el botón
  2. Segundo enfoque: crear dos instancias de TTS cada uno para el idioma respectivo. Desafortunadamente el retraso ocurre aquí también y no hay ninguna diferencia entre la primera solución.

¿Puede usted por favor ayudar a resolver este problema molesto?

¿Qué hay de esperar a que los dos motores TTS terminen de inicializarse al inicio de su aplicación, antes de cualquier interacción del usuario (haga esto creando un OnInitListener y esperando – por ejemplo, con un semáforo – hasta que se llama al método onInit () Que en el momento en que el usuario llega al punto en la aplicación donde se introducen los botones, tiene los dos motores ya inicializado?

Solucioné este problema creando esas instancias juntas en un subproceso distinto del subproceso de la aplicación principal:

private class tempTask extends AsyncTask { ... @Override protected Object doInBackground(Object... params) { firstTTSObj = new TextToSpeech(getApplicationContext(), new TextToSpeech.OnInitListener() { @Override public void onInit(int status) { if(status != TextToSpeech.ERROR){ firstTTSObj.setLanguage(Locale.UK); } } }); secondTTSObj = new TextToSpeech(getApplicationContext(), new TextToSpeech.OnInitListener() { @Override public void onInit(int status) { if(status != TextToSpeech.ERROR){ secondTTSObj .setLanguage(Locale.KOREA); } } }); return null; } } 

Espero que esto ayude.

Parece que es cómo se diseña TextToSpeech. Supongo que podría cargar sólo un idioma de datos de la misma hora y cuando se solicita otro tiene que descargar los datos del idioma actual y cargar uno nuevo. He añadido el problema aquí: https://code.google.com/p/android/issues/detail?id=200974

Probablemente Google lo arreglará en el futuro. ¡Ellos lo hicieron!

Como solución por el momento, puede pre-sintetizar el archivo de audio y, a continuación, simplemente reproducirlo. Fg se puede iniciar algunas AsyncTask al iniciar la actividad y generar el sonido en el fondo. Y cuando esté listo, revele el botón de la interfaz de usuario para que el usuario pueda reproducirlo. También encontré que TextToSpeech cosas mejor para poner en su propio proceso de servicio utilizando android: el atributo de proceso para el Servicio para evitar el congelamiento de la interfaz de usuario en algunos dispositivos cuando setLanguage está cargando los datos del lenguaje.

UPDATE 2016-02-17: Acabo de actualizar TextToSpeech a la versión 3.8.14 a partir de 15 de febrero. Y no más retrasos! ¡Estoy usando 2 idiomas que leen los diversos textos de la lengua uno por uno y ningún retraso entre más! Gracias Google y TextToSpeech equipo! ¡Eress el mejor!

ACTUALIZACIÓN 2016-02-18: he probado más dispositivos y he encontrado que el problema sigue existiendo para dispositivos antiguos donde Android 4.x todavía se utiliza. Probado en XOOM con Android 4.1.2 y algunos dispositivos 7100 con Android 4.1.1. Ambos tienen los mismos retrasos. No estoy seguro de que está relacionado, pero me di cuenta de que tanto el dispositivo Android con Android 4.x tienen el problema con el UtteranceProgressListener. Para que funcione en estos dispositivos tuve que pasar el parámetro utteranceId a la función speak (). Sin embargo, el dispositivo donde este error se ha ido funcionó bien sin este parámetro. El dispositivo donde está funcionando bien por ahora es LG d405 con Android 5.0.2 Y tuvo el mismo problema de retraso antes de instalar la actualización de TextToSpeech reciente.

  • TTS android 4.1 jellybean
  • Android texto a voz es muy lento para inicializar
  • Android TTS no habla
  • Texto a voz (TTS) -Android
  • Ampliación del paquete de idiomas de texto a voz (TTS) de Android
  • Obtener locales disponibles para tts
  • Android TTS Masculino Masculino Voz Cambio
  • TextToSpeech versión de compilación android no reproduce audio
  • Otras opciones de la biblioteca de Android TextToSpeech
  • TextToSpeech.setEngineByPackageName () no establece nada
  • Referencia no resuelta en el anonimo oyente de Kotlin
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.