Las etiquetas SSML sirven para enviar lenguaje de marcado de síntesis de voz (SSML) en tu solicitud a Text-to-Speech para permitir una mayor personalización en tu respuesta de audio mediante la entrega de detalles sobre las pausas y el formato de audio para los acrónimos, las fechas, las horas, las abreviaturas o el texto que se debe censurar. Consulta el instructivo de SSML de Text-to-Speech para obtener más información y muestras de código.
A continuación, se muestra un ejemplo de lenguaje de marcación SSML y cómo Text-to-Speech sintetiza el texto:
Aquí tienes algunos ejemplos de etiquetas <say-as interpret-as="characters">SSML</say-as>. Puedo hacer una pausa <break time="3s"/>. También puedo reproducir un sonido: <audio src="https://www.example.com/MY_MP3_FILE.mp3">no se pudo cargar tu archivo de audio</audio>. Puedo leer números cardinales. Tu número es <say-as interpret-as="cardinal">12345</say-as>. O puedo leerlos como ordinales. Estás en la posición número <say-as interpret-as="ordinal">10</say-as>
La tecnología Text-to.Speech de los Voicebots de Audara esta completamente adaptada al uso de etiquetas SSML esto quiere decir que puede reconocerlas de forma simple y tambien visual. Esto quiere decir que para usar etiquetas en Audara no requiere el uso de la etiqueta <speak> para iniciar basta con escribir directamente la etiqueta SSML requerida en la parte que se necesite y esta se mostrará de otro color.
En el ejemplo se puede ver como las etiquetas SSML quedan en color morado una vez escritas y en color azul cualquier variable.
Un elemento vacío que controla las pausas, o bien otros límites prosódicos entre las palabras. Usar <break> entre cualquier par de tokens es opcional. Si este elemento no está presente entre las palabras, la pausa se determina automáticamente según el contexto lingüístico.
time
Establece la duración de la pausa en segundos o milisegundos (p. ej., “3 s” o “250 ms”).
strength
Establece la intensidad de la pausa prosódica del resultado según términos relativos. Los valores válidos son “x-weak”, “weak”, “medium”, “strong” y “x-strong”. El valor “none” (ninguna) indica que no se debe incluir ningún límite de pausa prosódica en el resultado; se puede usar para evitar una pausa prosódica que, de lo contrario, el procesador produciría. Los demás valores indican una intensidad de pausa no descendente y monótona (conceptualmente ascendente) entre los tokens. Los límites más intensos generalmente están acompañados de una pausa.
En el siguiente ejemplo, se muestra cómo usar el elemento <break> para hacer pausas entre pasos:
Step 1, take a deep breath. <break time="200ms"/> Step 2, exhale. Step 3, take a deep breath again. <break strength="weak"/> Step 4, exhale.
Con este elemento, puedes indicar información sobre el tipo de construcción de texto que contiene el elemento. También te ayuda a especificar el nivel de detalle para el procesamiento del texto contenido.
El elemento <say‑as> tiene el atributo obligatorio interpret-as, que determina cómo se pronuncia el valor. Se pueden usar los atributos opcionales format y detail según el valor interpret-as determinado.
El atributo interpret-as admite los siguientes valores:
En el siguiente ejemplo, se expresa como “forty two dollars and one cent”. Si se omite el atributo de idioma, se usa la configuración regional actual.
<say-as interpret-as='currency' language='en-US'>$42.01</say-as>
En el siguiente ejemplo, se expresa como “one eight zero zero two zero two one two one two”. Si se omite el atributo “google:style”, habla cero como la letra O.
En la actualidad, el atributo “google:style=’zero-as-zero’” solo funciona la configuración regional en inglés.
<say-as interpret-as='telephone' google:style='zero-as-zero'>1800-202-1212</say-as>
En el siguiente ejemplo, se deletrea letra por letra:
<say-as interpret-as="verbatim">abcdefg</say-as>
El atributo format es una secuencia de códigos de caracteres del campo de fecha. Los códigos de caracteres de campo admitidos en format son {y, m, d} para el año, el mes y el día (del mes), respectivamente. Si el código del campo aparece una vez para el año, mes o día, entonces la cantidad de dígitos que se espera es 4, 2 y 2, respectivamente. Si el código del campo se repite, entonces la cantidad de dígitos que se espera es la cantidad de veces que se repite el código. Los campos en el texto de la fecha pueden separarse con puntuación o espacios.
El atributo detail controla el formato con el que se expresa la forma hablada de la fecha. Para detail='1', solo son obligatorios los campos de día y uno de los campos de mes o año, aunque se pueden ingresar ambos. Esta es la configuración predeterminada cuando no se proporcionan los tres campos. Se expresa como “El {número ordinal del día} de {mes}, {año}”.
El siguiente ejemplo se expresa como “The tenth of September, nineteen sixty” (el diez de septiembre, mil novecientos sesenta):
<say-as interpret-as="date" format="yyyymmdd" detail="1"> 1960-09-10 </say-as>
En el siguiente ejemplo, la forma hablada se expresa como “The tenth of September” (el diez de septiembre):
<say-as interpret-as="date" format="dm">10-9</say-as>
Para detail='2', son obligatorios los campos de día, mes y año, y esta es la configuración predeterminada cuando se proporcionan los tres campos. Se expresa como “{mes} {número ordinal del día}, {año}”.
En el siguiente ejemplo, se expresa como “September tenth, nineteen sixty” (septiembre diez, mil novecientos sesenta):
<say-as interpret-as="date" format="dmy" detail="2"> 10-9-1960 </say-as>
En el siguiente ejemplo, la forma hablada se expresa como “C A N”:
<say-as interpret-as="characters">can</say-as>
La forma hablada del número del siguiente ejemplo es “Doce mil trescientos cuarenta y cinco”, en el caso del inglés estadounidense.
<say-as interpret-as="cardinal">12345</say-as>
En el siguiente ejemplo, la forma hablada es “First” (primero):
<say-as interpret-as="ordinal">1</say-as>
En el siguiente ejemplo, la forma hablada se expresa como “five and a half” (cinco y medio):
<say-as interpret-as="fraction">5+1/2</say-as>
En el siguiente ejemplo, se escucha un “pip”, como si la palabra estuviera censurada:
<say-as interpret-as="expletive">censor this</say-as>
Convierte las unidades en singular o plural según el número. En el siguiente ejemplo, la forma hablada se expresa como “10 feet” (10 pies):
<say-as interpret-as="unit">10 foot</say-as>
En el siguiente ejemplo, se expresa como “Two thirty P.M.” (dos treinta p.m.):
<say-as interpret-as="time" format="hms12">2:30pm</say-as>
El atributo format es una secuencia de códigos de caracteres de campo de hora. Los códigos de caracteres de campo admitidos en format son {h, m, s, Z, 12, 24} para la hora, los minutos (de la hora), los segundos (del minuto), la zona horaria, el formato de 12 horas y de 24 horas, respectivamente. Si el código del campo aparece una vez para la hora, los minutos o los segundos, la cantidad de dígitos que se espera es 1, 2 y 2, respectivamente. Si el código del campo se repite, entonces la cantidad de dígitos que se espera es la cantidad de veces que se repite el código. Los campos en el texto de la hora pueden separarse con puntuación o espacios. Si no se especifican la hora, los minutos o los segundos en el formato o si los dígitos no coinciden, el campo se trata como si tuviera valor cero. El valor predeterminado para format es “hms12”.
El atributo detail controla si se usa el formato de 12 o 24 horas para la forma hablada de la hora. El formato hablado será de 24 horas si se usa detail='1' o si se omite detail y el formato de la hora es de 24 horas. El formato hablado será de 12 horas si se usa detail='2' o si se omite detail y el formato de la hora es de 12 horas.
Admite la inserción de archivos de audio grabado y la inserción de otros formatos de audio junto con el resultado de voz sintetizada.
Obligatorio: Si
Valor predeterminado: n/a
Valores:
Un URI que hace referencia a la fuente de audio multimedia. El protocolo admitido es https.
Obligatorio: No
Valor predeterminado: 0
Valores:
Una TimeDesignation que es el desplazamiento desde el inicio del audio de origen en el cual se debe iniciar la reproducción. Si este valor es mayor o igual que la duración real del audio de origen, entonces no se inserta ningún audio.
Obligatorio: No
Valor predeterminado: infinito
Valores:
Una TimeDesignation que es el desplazamiento desde el inicio del audio de origen en el cual se debe finalizar la reproducción. Si la duración real del audio de origen es menor que este valor, entonces la reproducción finalizará en ese momento. Si clipBegin es mayor o igual que clipEnd, entonces no se inserta ningún audio.
Obligatorio: No
Valor predeterminado: 100%
Valores:
La tasa proporcional de velocidad de reproducción del resultado en relación con la velocidad de entrada normal expresada como un porcentaje. El formato es un número real positivo seguido de %. El rango admitido actualmente es [50% (lento – velocidad media), 200% (rápido – doble de velocidad)]. Los valores que se encuentren fuera de este intervalo se podrán ajustar (o no) para que se incluyan en él.
Obligatorio: No
Valor predeterminado: 1 o 10 si se configura repeatDur
Valores:
Un número real que especifica cuántas veces se debe insertar el audio (después del recorte, si corresponde, con clipBegin o clipEnd). Las repeticiones fraccionarias no son compatibles, por lo que el valor se redondeará al número entero más cercano. Cero no es un valor válido y, por consiguiente, se trata como sin especificar y se usa el valor predeterminado en ese caso.
Obligatorio: No
Valor predeterminado: infinito
Valores:
Una TimeDesignation que es un límite de la duración del audio insertado después de procesar la fuente para los atributos clipBegin, clipEnd, repeatCount y speed (en lugar de la duración normal de la reproducción). Si la duración del audio procesado es menor que este valor, entonces la reproducción finalizará en ese momento.
Obligatorio: No
Valor predeterminado: +0dB
Valores:
Ajusta el nivel de sonido del audio en decibeles de soundLevel. El intervalo máximo es de +/-40dB, pero el real puede ser, en efecto, menor, y la calidad del resultado puede no ser buena en el intervalo total.
A continuación, se definen las opciones de configuración que se admiten para el audio en la actualidad:
El contenido del elemento <audio> es opcional y se usa si el archivo de audio no se puede reproducir o si el dispositivo de salida no admite audio. Puede incluir un elemento <desc>, en cuyo caso el contenido de texto de ese elemento se utiliza para mostrarse.
La URL src también debe ser una URL HTTPS.
<audio src="cat_purr_close.ogg"> <desc>a cat purring</desc> PURR (sound didn't load) </audio>
Se usa para personalizar el tono de la voz, la velocidad del habla y el volumen del texto que contiene el elemento. Actualmente, se admiten los atributos rate, pitch y volume.
En el siguiente ejemplo, se usa el elemento <prosody> para hablar lentamente a 2 semitonos por debajo de lo normal:
<prosody rate="slow" pitch="-2st">Can you hear me now?</prosody>
Se usa para agregar o quitar énfasis al texto que contiene el elemento. El elemento <emphasis> modifica el discurso de manera similar a <prosody>, pero sin la necesidad de establecer atributos de voz individuales.
Este elemento acepta un atributo de “nivel” opcional con los siguientes valores válidos:
strongmoderatenonereducedEn el siguiente ejemplo, se usa el elemento <emphasis> para hacer un anuncio:
<emphasis level="moderate">This is an important announcement</emphasis>
Un contenedor multimedia paralelo que te permite reproducir varios elementos multimedia a la vez. El único contenido permitido es un conjunto de uno o más elementos <par>, <seq> y <media>. El orden de los elementos <media> no es importante.
A menos que un elemento secundario especifique un tiempo de inicio diferente, el tiempo de inicio implícito del elemento es el mismo que el del contenedor <par>. Si un elemento secundario tiene un valor de desplazamiento configurado para su atributo begin o end, el desplazamiento del elemento estará relacionado con el tiempo de inicio del contenedor <par>. Para el elemento raíz <par>, el atributo begin se ignora y el tiempo de inicio será cuando el proceso de síntesis de voz SSML comience a generar resultados para el elemento raíz <par> (es decir, en efecto, tiempo “cero”).
<par>
<media xml:id="question" begin="0.5s">
<speak>Who invented the Internet?</speak>
</media>
<media xml:id="answer" begin="question.end+2.0s">
<speak>The Internet was invented by cats.</speak>
</media>
<media begin="answer.end-0.2s" soundLevel="-6dB">
<audio
src="https://actions.google.com/.../cartoon_boing.ogg"/>
</media>
<media repeatCount="3" soundLevel="+2.28dB"
fadeInDur="2s" fadeOutDur="0.2s">
<audio
src="https://actions.google.com/.../cat_purr_close.ogg"/>
</media>
</par> Un contenedor multimedia secuencial con el que puedes reproducir elementos multimedia uno detrás de otro. El único contenido permitido es un conjunto de uno o más elementos <seq>, <par> y <media>. El orden de los elementos multimedia será el orden en el que se procesen.
Los atributos begin y end de los elementos secundarios se pueden configurar como valores de desplazamiento (consulta la sección de Especificación de tiempos, a continuación). Los valores de desplazamiento de esos elementos secundarios estarán relacionados con el final del elemento anterior en la secuencia o, en el caso del primer elemento de la secuencia, con el comienzo de su contenedor <seq>.
En el siguiente ejemplo, se usa el elemento <emphasis> para hacer un anuncio:
<seq>
<media begin="0.5s">
<speak>Who invented the Internet?</speak>
</media>
<media begin="2.0s">
<speak>The Internet was invented by cats.</speak>
</media>
<media soundLevel="-6dB">
<audio
src="https://actions.google.com/.../cartoon_boing.ogg"/>
</media>
<media repeatCount="3" soundLevel="+2.28dB"
fadeInDur="2s" fadeOutDur="0.2s">
<audio
src="https://actions.google.com/.../cat_purr_close.ogg"/>
</media>
</seq> Puedes usar la etiqueta <phoneme> para producir pronunciaciones personalizadas de palabras intercaladas. Text-to-Speech acepta los alfabetos fonéticos IPA y X-SAMPA. Consulta la página de fonemas para ver una lista de idiomas y fonemas compatibles.
Cada aplicación de la etiqueta <phoneme> dirige la pronunciación de una sola palabra:
<phoneme alphabet="ipa" ph="ˌmænɪˈtoʊbə">manitoba</phoneme> <phoneme alphabet="x-sampa" ph='m@"hA:g@%ni:'>mahogany</phoneme>
Puedes usar <lang> para incluir texto en varios idiomas dentro de la misma solicitud de SSML. Todos los idiomas se sintetizarán con la misma voz, a menos que uses la etiqueta <voice> para cambiar la voz de forma explícita. La string xml:lang debe contener el idioma de destino en formato BCP-47 (este valor aparece como “código de idioma” en la tabla voces compatibles). En el siguiente ejemplo, “chat” se verbalizará en francés en lugar del idioma predeterminado (inglés):
The french word for cat is <lang xml:lang="fr-FR">chat</lang>
Text-to-Speech admite la etiqueta <lang> según el criterio del mejor esfuerzo. No todas las combinaciones de idiomas producen los mismos resultados de calidad si se especifican en la misma solicitud de SSML. En algunos casos, una combinación de idiomas puede producir un efecto que es detectable, pero sutil o percibido como negativo. Problemas conocidos:
<lang>. La entrada se translitera y se lee como caracteres chinos.<lang> y generarán silencio. Si deseas usar cualquiera de estos idiomas, te recomendamos que uses la etiqueta <voice> para cambiar a una voz que habla el idioma deseado (si está disponible).Cuando trabajas con asistentes de voz o modelos de lenguaje que generan respuestas para ser habladas, puedes incluir etiquetas SSML directamente en el prompt para indicar cómo deben sonar ciertos fragmentos. Por ejemplo, puedes pedirle al modelo:
“Cuando menciones el código de acceso, utiliza la etiqueta <say-as interpret-as="characters"> para que cada dígito se deletree uno por uno.”
Esto es útil para:
Deletrear números, letras o códigos (como cédulas, placas, claves).
Dar formato especial a fechas, tiempos o cantidades.
Incluir pausas estratégicas con <break time="1s"/>.
Reproducir audios con <audio src="URL"/>.
O cambiar la entonación con <emphasis> o <prosody>.