Referencia del lenguaje de marcación de síntesis de voz (SSML) (Beta)

Text-to-Speech admite varias funciones Beta de SSML, además de los elementos de SSML estándar de Text-to-Speech. Para obtener más información sobre cómo personalizar los resultados de voz sintetizados con elementos de SSML, consulta el instructivo de SSML y la documentación de referencia de SSML.

Resumen de las características admitidas de SSML Beta:

  • <phoneme>: Personaliza la pronunciación de palabras específicas.
  • <say-as interpret-as="duration">: Especifica las duraciones.
  • <voice>: Alterna entre voces en la misma solicitud.
  • <lang>: Usa varios idiomas en la misma solicitud.
  • Puntos temporales: Usa la etiqueta <mark> para mostrar el punto temporal de un punto especificado en tu transcripción.

<phoneme>

Puedes usar la etiqueta <phoneme> para producir pronunciaciónes personalizadas de palabras intercaladas. Text-to-Speech acepta los alfabetos fonéticos IPA y X-SAMPA. Consulta la página phonemes para ver una lista de los idiomas y fonemas admitidos.

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>

Marcadores de estrés

Existen tres niveles de estrés que se pueden ubicar en una transcripción:

  1. Espesor principal: Se indica con /ˈ/ en IPA y /"/ en X-SAMPA.
  2. Espesor secundario: Se indica con /ˌ/ en IPA y /%/ en X-SAMPA.
  3. Sin estrés: se indica con un símbolo (en cualquiera de las notación).

Es posible que algunos idiomas tengan menos de tres niveles o que no se les indiquen todos los obstáculos. Consulta la página fonemas para ver los niveles de estrés disponibles en tu idioma. Los marcadores de estrés se colocan al comienzo de cada escalofrío. Por ejemplo, en inglés de EE.UU.:

Palabra de ejemplo IPA X-SAMPA
agua ˈwɑːtɚ “wA:t@”
Bajo el agua ˌʌndɚˈwɑːtɚ %Vnd@"wA:t@

Transcripciones amplias y limitadas

Como regla general, mantén tus transcripciones en una naturaleza más amplia y fonética. Por ejemplo, en inglés de EE.UU., transcribe transcripción intersecular /t/ (en lugar de usar un toque):

Palabra de ejemplo IPA X-SAMPA
mantequilla ˈbʌtɚ en lugar de ˈbʌɾɚ "bVt@" en lugar de "bV4@"

En algunas instancias en las que el uso de la representación fonética hace que tus resultados de TTS suenen poco naturales (por ejemplo, si la secuencia de fonemas es algo difícil de pronunciar).

Un ejemplo de esto es la sospecha de /s en inglés. En este caso, la cantidad se debería reflejar en la transcripción:

Palabra de ejemplo IPA X-SAMPA
cats Kˈts "k{ts"
dogs ˈdɑːgz en lugar de ˈdɑːgs "dA:gzE en lugar de "dA:gs"

de TCO

Todos los distribuirs únicamente deben contener uno (y solo uno). Esto significa que debes evitar constanes silámicos y transcribirlos con una vocal reducida. Por ejemplo:

Palabra de ejemplo IPA X-SAMPA
gatito ˈkɪtən en lugar de ˈkɪtn "kIt@n en lugar de "kitn"
hervidor ˈkɛtəl en lugar de ˈkɛtl "kEt@l en lugar de "kEtl"

Distribución

Opcionalmente, puede especificar límites de aplicación y aplicación que usen /./. Cada segmento debe contener solo uno (y solo uno). Por ejemplo:

Palabra de ejemplo IPA X-SAMPA
legibilidad ˌɹiː.də.ˈbɪ.lə.tiː %r\i:.d@."bI.l@.ti:

Duraciones

Text-to-Speech admite <say-as interpret-as="duration"> para leer las duraciones de lectura de forma correcta. Por ejemplo, el siguiente ejemplo se verbalizará como "cinco horas y treinta minutos":

<say-as interpret-as="duration" format="h:m">5:30</say-as>

La string de formato admite los siguientes valores:

Abreviatura Valor
h horas
m minutos
s segundos
ms milésimas de segundo

<voice>

La etiqueta <voice> te permite usar más de una voz en una sola solicitud de SSML. En el siguiente ejemplo, la voz predeterminada es una voz masculina en inglés. Todas las palabras se sintetizan en esta voz, excepto por "qu'est-ce qui t'amène ici", que se pronuncia en inglés con una voz femenina en lugar del idioma predeterminado (inglés) y el género (hombre).

<speak>And then she asked, <voice language="fr-FR" gender="female">qu'est-ce qui
t'amène ici</voice><break time="250ms"/> in her sweet and gentle voice.</speak>

De forma alternativa, puedes usar una etiqueta <voice> para especificar una voz individual (el nombre de voz en la página de voces compatibles) en lugar de especificar un language o gender:

<speak>The dog is friendly<voice name="fr-CA-Wavenet-B">mais la chat est
mignon</voice><break time="250ms"/> said a pet shop
owner</speak>

Cuando usas la etiqueta <voice>, Text-to-Speech espera recibir un name (el nombre de la voz que deseas usar) o una combinación de los siguientes atributos. Los tres atributos son opcionales, pero debes proporcionar al menos uno si no proporcionas un name.

  • gender: Puede ser “male”, “female” o “neutral”.
  • variant: Se usa como separador para casos en los que hay varias posibilidades de usar la voz en función de tu configuración.
  • language: El idioma que quieres. Solo se puede especificar un idioma en una etiqueta <voice> determinada. Especifica tu idioma en formato BCP-47. Puedes encontrar el código BCP-47 de tu idioma en la columna código de idioma en la página de voces y idiomas compatibles.

También puedes controlar la prioridad relativa de cada uno de los atributos gender, variant y language con dos etiquetas adicionales: required y ordering.

  • required: Si un atributo se designa como required y no se configuró correctamente, la solicitud fallará.
  • ordering: Los atributos que se muestran después de una etiqueta ordering se consideran como atributos preferidos en lugar de obligatorios. La API de Text-to-Speech considera los atributos preferidos en función del mejor esfuerzo, en el orden en que se enumeran después de la etiqueta ordering. Si algún atributo preferido está configurado de forma incorrecta, Text-to-Speech podría mostrar una voz válida, pero si se quitó la configuración incorrecta.

Ejemplos de configuraciones con las etiquetas required y ordering:

<speak>And there it was <voice language="en-GB" gender="male" required="gender"
ordering="gender language">a flying bird </voice>roaring in the skies for the
first time.</speak>
<speak>Today is supposed to be <voice language="en-GB" gender="female"
ordering="language gender">Sunday Funday.</voice></speak>

<lang>

Puedes usar <lang> para incluir texto en varios idiomas con la misma solicitud de SSML. Todos los idiomas se sintetizan en 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 objetivo en formato BCP-47 (este valor aparece como "código de idioma" en la tabla de voces compatibles). En el siguiente ejemplo, "chat" se verbalizará en francés en lugar del idioma predeterminado (inglés):

<speak>The french word for cat is <lang xml:lang="fr-FR">chat</lang></speak>

Text-to-Speech admite la etiqueta <lang> en el 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 se pueda detectar, pero que sea sutil o que se perciba como negativo. Problemas conocidos:

  • La etiqueta <lang> no admite el japonés con caracteres kanji. La entrada se translitera y se lee como caracteres chinos.
  • Los idiomas semiáticos, como el árabe, el hebreo y el persa, no son compatibles con la etiqueta <lang> y dan como resultado el silencio. Si quieres usar alguno de estos idiomas, te recomendamos utilizar la etiqueta <voice> para cambiar a una voz que hable el idioma deseado (si está disponible).

Puntos de SSML

La API de Text-to-Speech admite el uso de puntos de tiempo en los datos de audio creados. Un punto de tiempo es una marca de tiempo (en segundos, medida desde el comienzo del audio generado) que corresponde a un punto designado en la secuencia de comandos. Puedes configurar un punto en la secuencia de comandos con la etiqueta <mark>. Cuando se genera el audio, la API muestra la compensación horaria entre el principio del audio y el punto temporal.

Hay dos pasos para establecer un punto de tiempo:

  1. Agrega una etiqueta SSML <mark> al punto de la secuencia de comandos para la que deseas tener una marca de tiempo.
  2. Establece TimepointType en SSML_MARK. Si no se configura este campo, los puntos temporales no se mostrarán de forma predeterminada.

En el siguiente ejemplo, se muestran dos puntos temporales:

  • timepoint_1: indica la hora (en segundos) que la palabra “Mark” aparece en el audio generado.
  • pointpoint_2: indica el tiempo (en segundos) que la palabra “ver” aparece en el audio generado.
<speak>Hello <mark name="timepoint_1"/> Mark. Good to <mark
name="timepoint_2"/> see you.</speak>