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.
Nota:
Además de las voces neuronales de Voz de Azure AI (no HD), también puede usar Voces de alta definición de voz de Azure AI (HD) y voces neuronales de Azure OpenAI (HD y no HD). Las voces HD proporcionan una mayor calidad para escenarios más versátiles.
Algunas voces no admiten todas las etiquetas Lenguaje de marcado de síntesis de voz (SSML). Esto incluye voces HD neuronal de texto a voz, voces personales y voces incrustadas.
- Para las voces de alta definición (HD) de Voz de Azure AI, consulte la compatibilidad con SSML aquí.
- Para la voz personal, puede encontrar la compatibilidad con SSML aquí.
- Para las voces insertadas, compruebe el soporte con SSML aquí.
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 elementoaudio
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 elementoaudio
también puede contener texto y los siguientes elementos:audio
,break
,p
,s
,phoneme
,prosody
,say-as
ysub
.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
ysub
.lang
: Este elemento puede contener todos los demás elementos exceptomstts:backgroundaudio
,voice
yspeak
.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
ysub
.mstts:express-as
: Este elemento puede contener texto y los siguientes elementos:audio
,break
,emphasis
,lang
,phoneme
,prosody
,say-as
ysub
.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
ys
.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
ys
.s
: Este elemento puede contener texto y los siguientes elementos:audio
,break
,phoneme
,prosody
,say-as
,mstts:express-as
ysub
.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
yvoice
.voice
: Este elemento puede contener todos los demás elementos exceptomstts:backgroundaudio
yspeak
.
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 &
en lugar de &
, use <
en lugar de <
y use >
en lugar de >
. De lo contrario, SSML no se analiza correctamente.
Por ejemplo, especifique green & 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 & 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 speak
elemento, 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:
|
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 20000 milisegundos. Si establece un valor mayor que el máximo admitido, el servicio usa 20000ms . 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:
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 20000 milisegundos. Si establece un valor mayor que el máximo admitido, el servicio usa 20000ms . |
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.
|
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>