Eventos y estructura de documentos SSML

El lenguaje de marcado de síntesis de voz (SSML) con texto de entrada determina la estructura, el contenido y otras características de la salida de texto a voz. Por ejemplo, puede usar SSML para definir un párrafo, una oración, una interrupción o pausa, o un silencio. Puede encapsular texto con etiquetas de eventos como un delimitador o viseme que la aplicación puede procesar más adelante.

Consulte las secciones siguientes para obtener más información sobre cómo estructurar elementos en el documento SSML.

Estructura de documento

La implementación del servicio de Voz de SSML se basa en la versión 1.0 del Lenguaje de marcado de síntesis de voz del World Wide Web Consortium. Los elementos admitidos por Voz pueden diferir del estándar W3C.

Cada documento SSML se crea con los elementos o etiquetas SSML. Estos elementos se utilizan para ajustar la voz, el estilo, el tono, la prosodia, el volumen y mucho más.

Este es un subconjunto de la estructura básica y la sintaxis de un documento SSML:

<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xmlns:mstts="https://www.w3.org/2001/mstts" xml:lang="string">
    <mstts:backgroundaudio src="string" volume="string" fadein="string" fadeout="string"/>
    <voice name="string" effect="string">
        <audio src="string"></audio>
        <bookmark mark="string"/>
        <break strength="string" time="string" />
        <emphasis level="value"></emphasis>
        <lang xml:lang="string"></lang>
        <lexicon uri="string"/>
        <math xmlns="http://www.w3.org/1998/Math/MathML"></math>
        <mstts:audioduration value="string"/>
        <mstts:ttsembedding speakerProfileId="string"></mstts:ttsembedding>
        <mstts:express-as style="string" styledegree="value" role="string"></mstts:express-as>
        <mstts:silence type="string" value="string"/>
        <mstts:viseme type="string"/>
        <p></p>
        <phoneme alphabet="string" ph="string"></phoneme>
        <prosody pitch="value" contour="value" range="value" rate="value" volume="value"></prosody>
        <s></s>
        <say-as interpret-as="string" format="string" detail="string"></say-as>
        <sub alias="string"></sub>
    </voice>
</speak>

En la lista siguiente se describen algunos ejemplos de contenido permitidos en cada elemento:

  • audio: El cuerpo del elemento audio puede contener texto sin formato o marcado SSML que se lee en voz alta si el archivo de audio no está disponible o no se puede reproducir. El elemento audio también puede contener texto y los siguientes elementos: audio, break, p, s, phoneme, prosody, say-as y sub.
  • bookmark: Este elemento no puede contener texto ni ningún otro elemento.
  • break: Este elemento no puede contener texto ni ningún otro elemento.
  • emphasis: Este elemento puede contener texto y los siguientes elementos: audio, break, emphasis, lang, phoneme, prosody, say-as y sub.
  • lang: Este elemento puede contener todos los demás elementos excepto mstts:backgroundaudio, voice y speak.
  • lexicon: Este elemento no puede contener texto ni ningún otro elemento.
  • math: Este elemento solo puede contener texto y elementos MathML.
  • mstts:audioduration: Este elemento no puede contener texto ni ningún otro elemento.
  • mstts:backgroundaudio: Este elemento no puede contener texto ni ningún otro elemento.
  • mstts:embedding: Este elemento puede contener texto y los siguientes elementos: audio, break, emphasis, lang, phoneme, prosody, say-as y sub.
  • mstts:express-as: Este elemento puede contener texto y los siguientes elementos: audio, break, emphasis, lang, phoneme, prosody, say-as y sub.
  • mstts:silence: Este elemento no puede contener texto ni ningún otro elemento.
  • mstts:viseme: Este elemento no puede contener texto ni ningún otro elemento.
  • p: Este elemento puede contener texto y los siguientes elementos: audio, break, phoneme, prosody, say-as, sub, mstts:express-as y s.
  • phoneme: Este elemento solo puede contener texto; no puede contener ningún otro elemento.
  • prosody: Este elemento puede contener texto y los siguientes elementos: audio, break, p, phoneme, prosody, say-as, sub y s.
  • s: Este elemento puede contener texto y los siguientes elementos: audio, break, phoneme, prosody, say-as, mstts:express-as y sub.
  • say-as: Este elemento solo puede contener texto; no puede contener ningún otro elemento.
  • sub: Este elemento solo puede contener texto; no puede contener ningún otro elemento.
  • speak: El elemento raíz de un documento SSML. Este elemento puede contener los siguientes elementos: mstts:backgroundaudio y voice.
  • voice: Este elemento puede contener todos los demás elementos excepto mstts:backgroundaudio y speak.

El servicio de Voz administra automáticamente la puntuación según corresponda, como hacer una pausa después de un punto o usar la entonación correcta cuando una oración termina con un signo de interrogación.

Caracteres especiales

Para usar los caracteres &, < y > dentro del valor o texto del elemento SSML, debe usar el formato de entidad. En concreto, debe usar &amp; en lugar de &, use &lt; en lugar de < y use &gt; en lugar de >. De lo contrario, SSML no se analiza correctamente.

Por ejemplo, especifique green &amp; yellow en lugar de green & yellow. El siguiente SSML se analiza según lo previsto:

<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="en-US">
    <voice name="en-US-AvaNeural">
        My favorite colors are green &amp; yellow.
    </voice>
</speak>

Los caracteres especiales, como comillas, apóstrofos y corchetes, deben ser de escape. Para más información, consulte Lenguaje de marcado extensible (XML) 1.0: Apéndice D.

Las comillas dobles o simples deben incluir los valores de atributo. Por ejemplo, <prosody volume="90"> y <prosody volume='90'> son elementos válidos y bien formados, pero el elemento <prosody volume=90> no se reconoce.

Elemento raíz Speak

El elemento speak contiene información, como la versión, el idioma y la definición del vocabulario de marcado. El elemento speak es el elemento raíz que se necesita para todos los documentos SSML. Debe especificar el idioma predeterminado dentro del speakelemento, independientemente de que el idioma se ajuste o no en otro lugar como, por ejemplo, dentro del elementolang.

Esta es la sintaxis del elemento speak:

<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="string"></speak>
Atributo Descripción Obligatorio u opcional
version Indica la versión de la especificación SSML utilizada para interpretar el marcado del documento. La versión actual es "1.0". Obligatorio
xml:lang El idioma del documento raíz. El valor puede contener un código de idioma como en (inglés) o una configuración regional como en-US (inglés de Estados Unidos). Obligatorio
xmlns El URI del documento que define el vocabulario de marcado (los tipos de elementos y nombres de atributos) del documento SSML. El identificador URI actual es "http://www.w3.org/2001/10/synthesis". Obligatorio

El elemento speak debe contener al menos un elemento de voz.

Ejemplos de habla

Los valores admitidos para los atributos del elemento speak se describieron anteriormente.

Ejemplo de voz única

En este ejemplo se usa la voz en-US-AvaNeural. Para obtener más ejemplos, consulte ejemplos de voz.

<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="en-US">
    <voice name="en-US-AvaNeural">
        This is the text that is spoken.
    </voice>
</speak>

Adición de una pausa

Use el elemento break para invalidar el comportamiento predeterminado de saltos o pausas entre palabras. De lo contrario, el servicio Voz inserta automáticamente las pausas.

El uso de los atributos del elemento break se describe en la tabla siguiente.

Atributo Descripción Obligatorio u opcional
strength La duración relativa de una pausa mediante uno de los valores siguientes:
  • x-weak
  • weak
  • medium (default)
  • strong
  • x-strong
Opcional
time La duración absoluta de una pausa en segundos (como 2s) o milisegundos (como 500ms). Los valores válidos oscilan entre 0 y 5000 milisegundos. Si establece un valor mayor que el máximo admitido, el servicio usa 5000ms. Si establece el atributo time, se omite el atributo strength. Opcional

A continuación, se especifican más detalles sobre el atributo strength.

Intensidad Duración relativa
Muy baja 250 ms
Baja 500 ms
Media 750 ms
Alta 1000 ms
Muy alta 1250 ms

Ejemplos de interrupción

Los valores admitidos para los atributos del elemento break se describieron anteriormente. Las tres maneras siguientes agregan saltos de 750 ms.

<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="en-US">
    <voice name="en-US-AvaNeural">
        Welcome <break /> to text to speech.
        Welcome <break strength="medium" /> to text to speech.
        Welcome <break time="750ms" /> to text to speech.
    </voice>
</speak>

Incorporación del silencio

Use el elemento mstts:silence para insertar pausas antes o después del texto, o bien entre dos frases adyacentes.

Una de las diferencias entre mstts:silence y break es que un elemento break se puede insertar en cualquier parte del texto. El silencio solo funciona al principio o al final del texto de entrada o en el límite de dos frases adyacentes.

La configuración de silencio se aplica a todo el texto de entrada dentro del elemento contenedor voice. Para restablecer o cambiar de nuevo la configuración de silencio, debe usar un nuevo elemento voice con la misma voz o una voz diferente.

El uso de los atributos del elemento mstts:silence se describe en la tabla siguiente.

Atributo Descripción Obligatorio u opcional
type Especifica dónde y cómo agregar silencio. Se admiten los siguientes tipos de silencios:
  • Leading – Silencio adicional al principio del texto. El valor que establezca se agrega al silencio natural antes del inicio del texto.
  • Leading-exact – Silencio al principio del texto. El valor es una longitud de silencio absoluta.
  • Tailing – Silencio adicional al final del texto. El valor que establezca se agrega al silencio natural después de la última palabra.
  • Tailing-exact – Silencio al final del texto. El valor es una longitud de silencio absoluta.
  • Sentenceboundary – Silencio adicional entre oraciones adyacentes. La longitud real del silencio de este tipo incluye el silencio natural después de la última palabra de la oración anterior, el valor que estableció para este tipo y el silencio natural antes de la palabra inicial en la siguiente oración.
  • Sentenceboundary-exact – Silencio entre oraciones adyacentes. El valor es una longitud de silencio absoluta.
  • Comma-exact: silencio en la coma en formato de ancho medio o ancho completo. El valor es una longitud de silencio absoluta.
  • Semicolon-exact: silencio en el punto y coma en formato de ancho medio o ancho completo. El valor es una longitud de silencio absoluta.
  • Enumerationcomma-exact: silencio en la coma de enumeración en formato de ancho completo. El valor es una longitud de silencio absoluta.

Un tipo de silencio absoluto (con el sufijo -exact) reemplaza cualquier silencio inicial o final natural. Los tipos de silencio absoluto tienen prioridad sobre el tipo no absoluto correspondiente. Por ejemplo, si establece ambos tipos Leading y Leading-exact, se aplicará el tipo Leading-exact. El evento WordBoundary tiene prioridad sobre la configuración de silencio relacionada con los signos de puntuación, como Comma-exact, Semicolon-exact o Enumerationcomma-exact. Cuando use a la vez el evento WordBoundary y la configuración de silencio mediante signos de puntuación, está última no tendrá efecto.
Obligatorio
Value La duración de una pausa en segundos (como 2s) o milisegundos (como 500ms). Los valores válidos oscilan entre 0 y 5000 milisegundos. Si establece un valor mayor que el máximo admitido, el servicio usa 5000ms. Obligatorio

Ejemplos de silencio mstts

Los valores admitidos para los atributos del elemento mstts:silence se describieron anteriormente.

En este ejemplo, se usa mstts:silence para agregar 200 ms de silencio entre dos frases.

<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xmlns:mstts="http://www.w3.org/2001/mstts" xml:lang="en-US">
<voice name="en-US-AvaNeural">
<mstts:silence  type="Sentenceboundary" value="200ms"/>
If we're home schooling, the best we can do is roll with what each day brings and try to have fun along the way.
A good place to start is by trying out the slew of educational apps that are helping children stay happy and smash their schooling at the same time.
</voice>
</speak>

En este ejemplo, se usa mstts:silence para agregar 50 ms de silencio en la coma, 100 ms de silencio en el punto y coma y 150 ms de silencio en la coma de enumeración.

<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xmlns:mstts="http://www.w3.org/2001/mstts" xml:lang="zh-CN">
<voice name="zh-CN-YunxiNeural">
<mstts:silence type="comma-exact" value="50ms"/><mstts:silence type="semicolon-exact" value="100ms"/><mstts:silence type="enumerationcomma-exact" value="150ms"/>你好呀,云希、晓晓;你好呀。
</voice>
</speak>

Especificación de párrafos y oraciones

Los elementos p y s se utilizan para indicar párrafos y frases, respectivamente. En ausencia de estos elementos, el servicio de Voz determina automáticamente la estructura del documento SSML.

Ejemplos de párrafos y oraciones

En el ejemplo siguiente se definen dos párrafos que contienen oraciones. En el segundo párrafo, el servicio de Voz determina automáticamente la estructura de oraciones, ya que no se definen en el documento SSML.

<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="en-US">
    <voice name="en-US-AvaNeural">
        <p>
            <s>Introducing the sentence element.</s>
            <s>Used to mark individual sentences.</s>
        </p>
        <p>
            Another simple paragraph.
            Sentence structure in this paragraph is not explicitly marked.
        </p>
    </voice>
</speak>

Elemento marcador

Puede usar el elemento bookmark en SSML para hacer referencia a una ubicación específica en el texto o la secuencia de etiquetas. A continuación, usará el SDK de Voz y se suscribirá al evento BookmarkReached para obtener el desplazamiento de cada marcador de la secuencia de audio. No se habla el elemento bookmark. Para más información, vea Suscripción a eventos de sintetizador.

El uso de los atributos del elemento bookmark se describe en la tabla siguiente.

Atributo Descripción Obligatorio u opcional
mark El texto de referencia del elemento bookmark. Obligatorio

Ejemplos de marcadores

Los valores admitidos para los atributos del elemento bookmark se describieron anteriormente.

Por ejemplo, es posible que quiera conocer el desplazamiento de tiempo de cada palabra relacionada con flores en el fragmento de código siguiente:

<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="en-US">
    <voice name="en-US-AvaNeural">
        We are selling <bookmark mark='flower_1'/>roses and <bookmark mark='flower_2'/>daisies.
    </voice>
</speak>

Elemento de visema

Un visema es la descripción visual de un fonema en lenguaje hablado. Define la posición de la cara y la boca cuando habla una persona. Puede usar el elemento mstts:viseme en SSML para solicitar la salida del visema. Para obtener más información, consulte Obtención de la posición facial con visema.

La configuración de visema se aplica a todo el texto de entrada dentro del elemento contenedor voice. Para restablecer o cambiar de nuevo la configuración de viseme, debe usar un nuevo elemento voice con la misma voz o una voz diferente.

El uso de los atributos del elemento viseme se describe en la tabla siguiente.

Atributo Descripción Obligatorio u opcional
type El tipo de salida de viseme.
  • redlips_front: sincronización de labios con id. de visema y salida de desplazamiento de audio
  • FacialExpression: resultado de mezcla de formas
Obligatorio

Nota

Actualmente, redlips_front solo admite voces neuronales en la configuración regional en-US y FacialExpression admite voces neuronales en las configuraciones regionales en-US y zh-CN.

Ejemplos de Viseme

Los valores admitidos para los atributos del elemento viseme se describieron anteriormente.

Este fragmento de código SSML muestra cómo solicitar formas de combinación con la voz sintetizada.

<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xmlns:mstts="http://www.w3.org/2001/mstts" xml:lang="en-US">
  <voice name="en-US-AvaNeural">
    <mstts:viseme type="FacialExpression"/>
    Rainbow has seven colors: Red, orange, yellow, green, blue, indigo, and violet.
  </voice>
</speak>

Pasos siguientes