TTS-UtteranceProgressListener no se llama

No quiero poner todo mi código aquí, así que estoy poniendo las piezas pertinentes. Si necesita más, no dude en preguntar.

Estoy utilizando texto a voz (TTS) que conduce a un oyente de voz después de que hace una pregunta … Encontré a través de salidas de registro que onInit TTS está siendo llamado, pero el UtteranceProgressListener no es y no puedo entender por qué. Cualquier ayuda es apreciada.

// ---Initialize TTS variables--- // Implement Text to speech feature tts = new TextToSpeech(this, new ttsInitListener()); // set listener to the TTS engine tts.setOnUtteranceProgressListener(new ttsUtteranceListener()); if (!tts.isSpeaking()) { tts.speak("Speak to me", TextToSpeech.QUEUE_FLUSH, null); } 

 // --- TEXT TO SPEECH && SPEECH TO TEXT METHODS --- class ttsInitListener implements OnInitListener { @Override public void onInit(int status) { if (status == TextToSpeech.SUCCESS) { tts.setLanguage(Locale.getDefault()); } else { tts = null; Toast.makeText(mContext, "Failed to initialize TTS engine.", Toast.LENGTH_SHORT).show(); } } } class ttsUtteranceListener extends UtteranceProgressListener { @Override public void onDone(String utteranceId) { if (processStart) { speech.startListening(intent); } else { ... } } @Override public void onError(String utteranceId) { } @Override public void onStart(String utteranceId) { } } 

Añadí salidas de registro a todos los métodos de TTS y de voz. UtteranceProgressListener onStart ni siquiera está siendo llamado:

 11-30 00:38:37.299: D/OpenGLRenderer(15842): Enabling debug mode 0 11-30 00:38:39.782: I/TextToSpeech(15842): Connected to ComponentInfo{com.google.android.tts/com.google.android.tts.service.GoogleTTSService} 11-30 00:38:39.782: I/TextToSpeech(15842): Set up connection to ComponentInfo{com.google.android.tts/com.google.android.tts.service.GoogleTTSService} 11-30 00:38:39.782: D/LOOK AT ME!!!(15842): ttsInitListener - onInit 

Encontré la respuesta

Resulta que los recursos de TTS que encontré en línea estaban usando una fuente de cadena TTS única, por lo que el tercer parámetro en tts.speak (String text, int queueMode, HashMap params) fue puesto a null.

A cualquiera que tenga este problema en el futuro:

Si establece el tercer parámetro como nulo, no hay ID para que UtteranceProgressListener realice el seguimiento. La corrección fue la creación e inicialización de un hashmap, a continuación, añadir a la matriz incluida para cada nuevo TTS con un nuevo ID podría ser rastreado. Aquí está el código:

 HashMap<String, String> map = new HashMap<String, String>(); 

Luego, antes de llamar a tts.speak …

 map.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, "UniqueID"); 

Entonces usted puede llamar a hablar con todos los parámetros …

 tts.speak(text, TextToSpeech.QUEUE_FLUSH, map); 

Para añadir a la buena respuesta de WizardKnight:

La nueva API prefiere un paquete así que reemplace el HashMap con un paquete

 Bundle params = new Bundle(); params.putString(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, ""); 

Entonces cuando haces la llamada de voz

 tts.speak(text, TextToSpeech.QUEUE_FLUSH, params, "UniqueID"); 

La clave es utilizar el ID en la llamada de voz. Usted puede ponerlo en el paquete, pero no hará nada más para usted. Tiene que estar en la llamada de hablar para activar el oyente.

  • TextToSpeech.setEngineByPackageName () devuelve el éxito incluso cuando el paquete no está disponible
  • TextToSpeech.setEngineByPackageName () no establece nada
  • Cómo crear un motor de texto a voz personalizado
  • ¿Qué es un Earcon?
  • Ejecución de TTS Android en un servicio
  • TextToSpeech versión de compilación android no reproduce audio
  • La salida TTS siempre va a A2DP
  • Transmisión de notificaciones de texto a voz durante la conducción
  • Referencia no resuelta en el anonimo oyente de Kotlin
  • ¿Cómo agregar un sonido al motor pico TTS de Android?
  • Cómo cambiar programáticamente el motor predeterminado TTS
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.