tts texttospeech studio spanish example español developers code android text-to-speech ssml

texttospeech - ¿Mejores prácticas para especificar la pronunciación del motor de Android TTS?



text to speech android studio español (2)

En general, estoy muy impresionado con el motor de texto a voz predeterminado de Android (es decir, com.svox.pico). Como era de esperar, pronuncia mal algunas palabras (como yo) y, por lo tanto, ocasionalmente necesita una guía de pronunciación. Así que me pregunto cuáles son las mejores prácticas para deletrear fonéticamente las palabras que el motor pico TTS pronuncia mal.

Por ejemplo, la pronunciación correcta del ave Chachalaca es CHAH-chah-LAH-kah. Esto es lo que produce el motor TTS:

mTts.speak("Chachalaca", TextToSpeech.QUEUE_ADD, null); // output: chuh-KAL-uh-KUH mTts.speak("CHAH-chah-LAH-kah", TextToSpeech.QUEUE_ADD, null); // output: CHAH-chah-EL-AY-AYCH-dash-kuh mTts.speak("CHAHchahLAHkah", TextToSpeech.QUEUE_ADD, null); // output: CHA-chah-LAH-ka mTts.speak("CHAH chah LOCKah", TextToSpeech.QUEUE_ADD, null); // output: CHAH-chah-LAH-kah

Aquí están mis preguntas.

  • ¿Existe una ortografía fonética estándar reconocida por el motor de Android TTS?
  • Si no es así, ¿hay algunas reglas generales para hacer la pronunciación personalizada de ortografía que hará más probable que sean correctas en futuras versiones / motores de TTS?
  • Parece que el motor de Android TTS ignora el caso de texto. ¿Cuál es la mejor manera de especificar el énfasis?

Por cierto, esto es lo que el motor de TTS escribe en logcat:

Servicio V / Tts (294): procesamiento TTS: CHAH chah LOCKah
V / TtsService (294): TtsService.setLanguage (ing., EE. UU.)
I / SVOX Pico Engine (294): Idioma ya cargado (en-US == en-US)
I / SynthProxy (294): ajuste de la velocidad de voz a 100
I / SynthProxy (294): ajuste del tono a 100

[ACTUALIZAR]

Intenté pasar un documento XML a TextToSpeech.speak () de la siguiente manera:

String text = "<?xml version=/"1.0/"?>" + "<speak version=/"1.0/" xmlns=/"http://www.w3.org/2001/10/synthesis/" " + "xmlns:xsi=/"http://www.w3.org/2001/XMLSchema-instance/" " + "xsi:schemaLocation=/"http://www.w3.org/2001/10/synthesis " + "http://www.w3.org/TR/speech-synthesis/synthesis.xsd/" " + "xml:lang=/"en-US/">" + "That is a big car! " + "That <emphasis>is</emphasis> a big car! " + "That is a <emphasis>big</emphasis> car! " + "That is a huge bank account! " + "That <emphasis level=/"strong/">is</emphasis> a huge bank account! " + "That is a <emphasis level=/"strong/">huge</emphasis> bank account!" + "</speak>"; mTts.speak(text, TextToSpeech.QUEUE_ADD, null);

Como sugirió Android Eve, el motor TTS solo leyó el cuerpo XML (es decir, los comentarios sobre el gran automóvil y la enorme cuenta bancaria). No me di cuenta de que el motor TTS era capaz de analizar documentos XML. Sin embargo, no escuché ningún énfasis en la salida de TTS.

[ACTUALIZACIÓN 2]

Simplifiqué la pregunta sobre si Android TTS admite o no el lenguaje de marcado de síntesis de voz here .


JW respondió a mi pregunta en el tts-for-android :

Hola Greg,

El motor Pico reconoce la etiqueta con el alfabeto XSAMPA.

No hay reglas fáciles para derivar una pronunciación determinada de la ortografía, pero puede utilizar la ortografía intuitiva y la prueba y error. La capitalización y los guiones introducirán más problemas que resolverlos. Usar diferentes grafías e introducir límites de palabras adicionales (espacios) puede funcionar.

La etiqueta de énfasis y el signo de exclamación no cambiarán el resultado de la síntesis. Utilice, y comandos en su lugar.

Algunos ejemplos de la sintaxis adecuada para especificar la pronunciación utilizando la etiqueta de fonema SSML se encuentran en estas pruebas de TextToSpeech .

Incluso con estos sencillos documentos de prueba de SSML, hay mensajes de advertencia publicados en logcat acerca de que el documento de SSML no está bien formado. Así que abrí un problema sobre estos mensajes logcat aparentemente incorrectos al rastreador de problemas de Android .

La sintaxis para especificar una secuencia x-SAMPA para SVOX pico es

String text = "<speak xml:lang=/"en-US/"> <phoneme alphabet=/"xsampa/" ph=/"d_ZIn/"/>.</speak>"; mTts.speak(text, TextToSpeech.QUEUE_ADD, null);

Aunque más ejemplos serían útiles, una buena referencia para x-SAMPA es en http://en.wikipedia.org/wiki/Xsampa Si compilo un par de docenas de ejemplos, los publicaré en esa página de Wikipedia.


Una respuesta para las 3 preguntas: mire las especificaciones de SSML: http://www.w3.org/TR/speech-synthesis/

Por ejemplo, para especificar el énfasis, utiliza el elemento de énfasis , por ejemplo,

<?xml version="1.0"?> <speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/10/synthesis http://www.w3.org/TR/speech-synthesis/synthesis.xsd" xml:lang="en-US"> That is a <emphasis> big </emphasis> car! That is a <emphasis level="strong"> huge </emphasis> bank account! </speak>