OnUtteranceCompleted () perdido si TTS recibido es demasiado largo
Acabo de observar una "anomalía indocumentada" en el motor de TTS de Android: Si el texto a ser hablado es demasiado largo (mayor de 4K caracteres), entonces onUtteranceCompleted () para ese enunciado en particular nunca llegará …
¿Alguien más se ha topado con esto?
- OnUtteranceCompleted no se llama?
- Mejor práctica para especificar la pronunciación para el motor Android TTS?
- TextToSpeech muestra Null Pointer Exception?
- ¿Soporta Android TTS el lenguaje de marcado de síntesis de voz?
- ¿Cómo usar e importar eSpeak en eclipse?
¿Se trata de un error o limitación conocido?
¿Qué se podría hacer para evitar esto?
- Ampliación del motor TTS android
- ¿Alguna api de TTS para Android en turco?
- Android TextToSpeech solo escribe palabras cortas en lugar de pronunciarlas
- Android Vietnamita Texto a voz?
- ¿Cuál es la sintaxis adecuada para el atributo de fonema en el TTS XML de Android?
- Los componentes de IntentReceiver no pueden enlazar servicios
Yo no era consciente del límite, como prefiero trozos más pequeños de la palabra (útil si la pausa o si la actividad se detiene).
Cuando llama a speak, puede agregar el nuevo enunciado al final de la cola usando esto para queueMode: TextToSpeech.QUEUE_ADD
Prueba para estar seguro de que la frase no suena diferente, pero creo que simplemente analizar automáticamente en la siguiente oración (o palabra si es necesario) después de una longitud de corte funcionaría.
No estoy seguro de si esto será útil en su caso, pero en una situación similar he utilizado un receptor de difusión anónimo con un IntentFilter para TextToSpeech.ACTION_TTS_QUEUE_PROCESSING_COMPLETED como se da a continuación
filter = new IntentFilter(TextToSpeech.ACTION_TTS_QUEUE_PROCESSING_COMPLETED); receiver = new BroadcastReceiver(){ public void onReceive(Context p1, Intent p2) { if (p2.getAction().equals(TextToSpeech.ACTION_TTS_QUEUE_PROCESSING_COMPLETED) && tts != null) { // //code here } } }; context.registerReceiver(receiver, filter); tts = new TextToSpeech(context, this);
Espero que esto podría ser de alguna ayuda para alguien en algún momento