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.
- ¿Qué significan los nombres / códigos de Android Voice?
- Hablar con TTS como Hindi
- ¿Cómo puedo guardar el archivo Text to Speech como formato .wav / .mp3 en idioma árabe en External Storage?
- ¿Por qué la intención de ACTION_CHECK_TTS_DATA es "incómoda de usar"?
- Android TTS Masculino Masculino Voz Cambio
// ---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
- Cómo dar pausa o brecha entre palabras en TTS en android
- ¿Cómo interpretar audiblemente la pronunciación IPA en Android?
- Pausa en el TTS android
- Android TTS no habla
- TextToSpeech: función de palabra obsoleta en el nivel 21 de la API
- TextToSpeech, playEarcon y archivos .wav
- Resalte la palabra actual que el motor TTS está hablando
- Cómo utilizar TTS (TextToSpeech) mientras que la cadena tiene más de 4000 caracteres en Android
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.
- ¿Hay una barra de progreso negra para ser visible en un fondo blanco?
- Repetición inesperada de "nombre del paquete" mientras se reanudaba en '' nombre del paquete '' Error en Android