Lenguaje de marcas de síntesis de voz (SSML)

Puedes enviar lenguaje de marcas de síntesis de voz (SSML) en tu solicitud de Text-to-Speech para personalizar más tu respuesta de audio. Para ello, proporciona detalles sobre las pausas y el formato de audio de acrónimos, fechas, horas, abreviaturas o texto que deba censurarse. Consulta el tutorial sobre SSML de Text-to-Speech para obtener más información y ejemplos de código.

A continuación, se muestra un ejemplo de marcas SSML y el texto que sintetiza la función de texto a voz:

<speak>
  Here are <say-as interpret-as="characters">SSML</say-as> samples.
  I can pause <break time="3s"/>.
  I can play a sound
  <audio src="https://www.example.com/MY_MP3_FILE.mp3">didn't get your MP3 audio file</audio>.
  I can speak in cardinals. Your number is <say-as interpret-as="cardinal">10</say-as>.
  Or I can speak in ordinals. You are <say-as interpret-as="ordinal">10</say-as> in line.
  Or I can even speak in digits. The digits for ten are <say-as interpret-as="characters">10</say-as>.
  I can also substitute phrases, like the <sub alias="World Wide Web Consortium">W3C</sub>.
  Finally, I can speak a paragraph with two sentences.
  <p><s>This is sentence one.</s><s>This is sentence two.</s></p>
</speak>

A continuación se muestra el texto sintetizado del documento SSML de ejemplo:

Here are S S M L samples. I can pause [3 second pause]. I can play a sound [audio file plays].
I can speak in cardinals. Your number is ten.
Or I can speak in ordinals. You are tenth in line.
Or I can even speak in digits. The digits for ten are one oh.
I can also substitute phrases, like the World Wide Web Consortium.
Finally, I can speak a paragraph with two sentences. This is sentence one. This is sentence two.

Text-to-Speech admite un subconjunto de las etiquetas SSML disponibles, que se describen en este tema.

Para obtener más información sobre cómo crear datos de audio a partir de una entrada SSML con la API Text-to-Speech, consulta el artículo Crear archivos de audio de voz.

Consejos para usar SSML

En función de tu implementación, es posible que tengas que usar secuencias de escape para las comillas o las comillas simples en la carga útil de SSML que envíes a Text-to-Speech. En el siguiente ejemplo se muestra cómo dar formato a la entrada SSML incluida en un objeto JSON.

"{
    'input':{
     'ssml':'<speak>The <say-as interpret-as=\"characters\">SSML</say-as>
          standard <break time=\"1s\"/>is defined by the
          <sub alias=\"World Wide Web Consortium\">W3C</sub>.</speak>'
    },
    'voice':{
      'languageCode':'en-us',
      'name':'en-US-Standard-B',
      'ssmlGender':'MALE'
    },
    'audioConfig':{
      'audioEncoding':'MP3'
    }
  }"

Caracteres reservados

No utilices caracteres reservados de SSML en el texto que se va a convertir en audio. Cuando necesites usar un carácter reservado de SSML, evita que se lea como código usando su código de escape. En la siguiente tabla se muestran los caracteres SSML reservados y sus códigos de escape asociados.

Carácter Código de escape
" &quot;
& &amp;
' &apos;
< &lt;
> &gt;

Selecciona una voz

Puedes definir la voz en el objeto VoiceSelectionParams. Consulta el tutorial de SSML de Text-to-Speech para ver un ejemplo de código que muestra el uso del objeto VoiceSelectionParams.

Puedes usar la etiqueta <voice> para leer SSML con varias voces, pero debes asignar al atributo VoiceSelectionParams el nombre de una voz compatible:

Tipo de voz solicitado Tipo de voz admitido en la etiqueta <voice>
Neural2 Studio Wavenet Noticias Estándar
Neural2
Studio
Wavenet
Estándar
Noticias

Compatibilidad con elementos SSML

En las siguientes secciones se describen los elementos y las opciones de SSML que se pueden usar en tus acciones.

<speak>

Elemento raíz de la respuesta SSML.

Para obtener más información sobre el elemento speak, consulta la especificación de W3.

Ejemplo

<speak>
  my SSML content
</speak>

<break>

Elemento vacío que controla las pausas u otros límites prosódicos entre palabras. El uso de <break> entre cualquier par de tokens es opcional. Si este elemento no está presente entre palabras, el salto se determina automáticamente en función del contexto lingüístico.

Para obtener más información sobre el elemento break, consulta la especificación de W3.

Atributos

Atributo Descripción
time

Define la duración de la pausa en segundos o milisegundos (por ejemplo, "3s" o "250ms").

strength

Define la intensidad de la pausa prosódica de la salida mediante términos relativos. Los valores válidos son "x-weak", "weak", "medium", "strong" y "x-strong". El valor "none" indica que no se debe generar ningún límite de pausa prosódica, lo que se puede usar para evitar una pausa prosódica que el procesador produciría de otro modo. Los demás valores indican una resistencia a la rotura entre tokens que no disminuye de forma monótona (es decir, que aumenta). Los límites más firmes suelen ir acompañados de pausas.

Ejemplo

En el siguiente ejemplo se muestra cómo usar el elemento <break> para hacer una pausa entre pasos:

<speak>
  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.
</speak>

<say‑as>

Este elemento le permite indicar información sobre el tipo de construcción de texto que contiene el elemento. También ayuda a especificar el nivel de detalle para renderizar el texto incluido.

El elemento <say‑as> tiene el atributo obligatorio interpret-as, que determina cómo se pronuncia el valor. Los atributos opcionales format y detail se pueden usar en función del valor de interpret-as.

Ejemplos

El atributo interpret-as admite los siguientes valores:

  • currency

    En el siguiente ejemplo, se dice "cuarenta y dos dólares y un centavo". Si se omite el atributo de idioma, se usa la configuración regional actual.

    <speak>
      <say-as interpret-as='currency' language='en-US'>$42.01</say-as>
    </speak>
        
  • telephone

    Consulta la descripción de interpret-as='telephone' en la nota del grupo de trabajo valores del atributo say-as de SSML 1.0 de W3C.

    En el siguiente ejemplo, se dice "uno ocho cero cero dos cero dos uno dos uno dos". Si se omite el atributo "google:style", se pronuncia cero como la letra O.

    Actualmente, el atributo "google:style='zero-as-zero'" solo funciona en configuraciones regionales en inglés.

          <speak>
            <say-as interpret-as='telephone' google:style='zero-as-zero'>1800-202-1212</say-as>
          </speak>
        
  • verbatim o spell-out

    En el siguiente ejemplo se escribe letra por letra:

    <speak>
      <say-as interpret-as="verbatim">abcdefg</say-as>
    </speak>
        
  • date

    El atributo format es una secuencia de códigos de caracteres de 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 de campo aparece una vez para el año, el mes o el día, el número de dígitos esperado es 4, 2 y 2, respectivamente. Si el código de campo se repite, el número de dígitos esperado es el número de veces que se repite el código. Los campos del texto de la fecha pueden estar separados por signos de puntuación o espacios.

    El atributo detail controla la forma hablada de la fecha. En el caso de detail='1', solo son obligatorios los campos de día y uno de los campos de mes o año, aunque se pueden proporcionar ambos. Este es el valor predeterminado cuando se proporcionan menos de los tres campos. La forma hablada es "El {día ordinal} de {mes}, {año}".

    El siguiente ejemplo se pronuncia como "El diez de septiembre de mil novecientos sesenta":

    <speak>
      <say-as interpret-as="date" format="yyyymmdd" detail="1">
        1960-09-10
      </say-as>
    </speak>
        

    El siguiente ejemplo se pronuncia como "El diez de septiembre":

    <speak>
      <say-as interpret-as="date" format="dm">10-9</say-as>
    </speak>
        

    En detail='2', los campos de día, mes y año son obligatorios. Esta es la opción predeterminada cuando se proporcionan los tres campos. La forma hablada es "{mes} {día ordinal}, {año}".

    El siguiente ejemplo se pronuncia "September tenth, nineteen sixty" (10 de septiembre de 1960):

    <speak>
      <say-as interpret-as="date" format="dmy" detail="2">
        10-9-1960
      </say-as>
    </speak>
        
  • characters

    El siguiente ejemplo se pronuncia "C A N":

    <speak>
      <say-as interpret-as="characters">can</say-as>
    </speak>
        
  • cardinal

    El siguiente ejemplo se pronuncia como "Twelve thousand three hundred forty five" (en inglés de EE. UU.) o "Twelve thousand three hundred and forty five" (en inglés del Reino Unido):

    <speak>
      <say-as interpret-as="cardinal">12345</say-as>
    </speak>
        
  • ordinal

    El siguiente ejemplo se pronuncia como "First":

    <speak>
      <say-as interpret-as="ordinal">1</say-as>
    </speak>
        
  • fraction

    El siguiente ejemplo se pronuncia como "cinco y medio":

    <speak>
      <say-as interpret-as="fraction">5+1/2</say-as>
    </speak>
        
  • expletive o bleep

    El siguiente ejemplo se muestra como un pitido, como si se hubiera censurado:

    <speak>
      <say-as interpret-as="expletive">censor this</say-as>
    </speak>
        
  • unit

    Convierte las unidades a singular o plural en función del número. En el siguiente ejemplo se dice "10 pies":

    <speak>
      <say-as interpret-as="unit">10 foot</say-as>
    </speak>
        
  • time

    El siguiente ejemplo se pronuncia como "Dos y media de la tarde":

    <speak>
      <say-as interpret-as="time" format="hms12">2:30pm</say-as>
    </speak>
        

    El atributo format es una secuencia de códigos de caracteres de campo de tiempo. Los códigos de caracteres de campo admitidos en format son {h,m, s, Z, 12, 24} para hora, minuto (de la hora), segundo (del minuto), zona horaria, hora en formato de 12 horas y hora en formato de 24 horas, respectivamente. Si el código de campo aparece una vez para la hora, los minutos o los segundos, el número de dígitos esperado es 1, 2 y 2, respectivamente. Si el código de campo se repite, el número de dígitos esperado es el número de veces que se repite el código. Los campos del texto de tiempo pueden estar separados por signos de puntuación o espacios. Si no se especifica la hora, los minutos o los segundos en el formato, o no hay dígitos coincidentes, el campo se trata como un valor cero. El valor predeterminado format es "hms12".

    El atributo detail controla si la hora se dice en formato de 12 o de 24 horas. Si se omite detail='1' o detail y la hora se expresa en formato de 24 horas, se usará este formato. Se usa el formato de 12 horas si se omite detail='2' o detail y el formato de la hora es de 12 horas.

Para obtener más información sobre el elemento say-as, consulta la especificación de W3.

<audio>

Permite insertar archivos de audio grabados y otros formatos de audio junto con la salida de voz sintetizada.

Atributos

Atributo Obligatorio Predeterminado Valores
src yes n/a Un URI que hace referencia a la fuente multimedia de audio. El protocolo admitido es https.
clipBegin no 0 Un TimeDesignation que es el desplazamiento desde el principio de la fuente de audio para iniciar la reproducción. Si este valor es mayor o igual a la duración real de la fuente de audio, no se insertará ningún audio.
clipEnd no infinito Un TimeDesignation que es el desplazamiento desde el principio de la fuente de audio hasta el final de la reproducción. Si la duración real de la fuente de audio es inferior a este valor, la reproducción finalizará en ese momento. Si clipBegin es mayor o igual que clipEnd, no se inserta ningún audio.
speed no 100 % La proporción de la velocidad de reproducción de salida en relación con la velocidad de entrada normal, expresada como porcentaje. El formato es un número real positivo seguido de %. El intervalo admitido actualmente es [50% (lento, la mitad de la velocidad), 200% (rápido, el doble de la velocidad)]. Los valores que estén fuera de ese intervalo pueden ajustarse (o no) para que se incluyan en él.
repeatCount no 1 o 10 si se ha definido repeatDur Un número real que especifica cuántas veces se va a insertar el audio (después de recortarlo, si se ha hecho, con clipBegin o clipEnd). No se admiten repeticiones fraccionarias, por lo que el valor se redondeará al entero más próximo. El cero no es un valor válido, por lo que se trata como si no se hubiera especificado ningún valor y se le asigna el valor predeterminado.
repeatDur no infinito Un TimeDesignation que es un límite de la duración del audio insertado después de que se procese la fuente para los atributos clipBegin, clipEnd, repeatCount y speed (en lugar de la duración de reproducción normal). Si la duración del audio procesado es inferior a este valor, la reproducción finalizará en ese momento.
soundLevel no +0 dB Ajusta el nivel de sonido del audio en soundLevel decibelios. El intervalo máximo es de ±40 dB, pero el intervalo real puede ser inferior y la calidad de salida puede no dar buenos resultados en todo el intervalo.

Estos son los ajustes de audio que se admiten actualmente:

  • Formato: MP3 (MPEG v2)
    • 24.000 muestras por segundo
    • De 24.000 a 96.000 bits por segundo, tasa fija
  • Formato: Opus en Ogg
    • 24.000 muestras por segundo (super banda ancha)
    • De 24.000 a 96.000 bits por segundo, tasa fija
  • Formato (obsoleto): WAV (RIFF)
    • PCM de 16 bits con signo, little endian
    • 24.000 muestras por segundo
  • Para todos los formatos:
    • Se recomienda usar un solo canal, pero también se acepta el estéreo.
    • Duración máxima de 240 segundos. Si quieres reproducir audio durante más tiempo, te recomendamos que implementes una respuesta multimedia.
    • El tamaño máximo de archivo es de 5 MB.
    • La URL de origen debe usar el protocolo HTTPS.
    • Nuestro UserAgent al obtener el audio es "Google-Speech-Actions".

El contenido del elemento <audio> es opcional y se usa si no se puede reproducir el archivo de audio o si el dispositivo de salida no admite audio. El contenido puede incluir un elemento <desc>, en cuyo caso se utiliza el contenido de texto de ese elemento para mostrarlo. Para obtener más información, consulta la sección Audio grabado de la lista de comprobación de respuestas.

La URL src también debe ser una URL https (Google Cloud Storage puede alojar tus archivos de audio en una URL https).

Para obtener más información sobre las respuestas multimedia, consulta la sección Respuestas multimedia de la guía Respuestas.

Para obtener más información sobre el elemento audio, consulta la especificación de W3.

Ejemplo

<speak>
  <audio src="cat_purr_close.ogg">
    <desc>a cat purring</desc>
    PURR (sound didn't load)
  </audio>
</speak>

<p>,<s>

Elementos de frases y párrafos.

Para obtener más información sobre los elementos p y s, consulta la especificación de W3.

Ejemplo

<p><s>This is sentence one.</s><s>This is sentence two.</s></p>

Prácticas recomendadas

  • Usa etiquetas <s>...</s> para envolver frases completas, sobre todo si contienen elementos SSML que cambian la prosodia (es decir, <audio>, <break>, <emphasis>, <par>, <prosody>, <say-as>, <seq> y <sub>).
  • Si quieres que haya una pausa lo suficientemente larga como para que se oiga, usa las etiquetas <s>...</s> y coloca la pausa entre las frases.

<sub>

Indica que el texto del valor del atributo de alias sustituye al texto incluido para la pronunciación.

También puedes usar el elemento sub para proporcionar una pronunciación simplificada de una palabra difícil de leer. En el último ejemplo que aparece a continuación se muestra este caso práctico en japonés.

Para obtener más información sobre el elemento sub, consulta la especificación de W3.

Ejemplos

<sub alias="World Wide Web Consortium">W3C</sub>
<sub alias="にっぽんばし">日本橋</sub>

<mark>

Un elemento vacío que coloca un marcador en la secuencia de texto o de etiquetas. Se puede usar para hacer referencia a una ubicación específica de la secuencia o para insertar un marcador en un flujo de salida para recibir notificaciones asíncronas.

Para obtener más información sobre el elemento mark, consulta la especificación de W3.

Ejemplo

<speak>
Go from <mark name="here"/> here, to <mark name="there"/> there!
</speak>

<prosody>

Se usa para personalizar el tono, la velocidad de lectura y el volumen del texto contenido en el elemento. Actualmente, se admiten los atributos rate, pitch y volume.

Los atributos rate y volume se pueden definir según las especificaciones de W3. Hay tres opciones para definir el valor del atributo pitch:

Atributo Descripción
name

El ID de cadena de cada marca.

Opción Descripción
Relativo Especifica un valor relativo (por ejemplo, "bajo", "medio", "alto", etc.), donde "medio" es el tono predeterminado.
Semitonos Sube o baja el tono N semitonos con "+Nst" o "-Nst", respectivamente. Ten en cuenta que "+/-" y "st" son obligatorios.
Porcentaje Aumenta o disminuye el tono en un "N" por ciento con "+N%" o "-N%", respectivamente. Ten en cuenta que el símbolo "%" es obligatorio, pero "+/-" es opcional.

Para obtener más información sobre el elemento prosody, consulta la especificación de W3.

Ejemplo

En el siguiente ejemplo se usa el elemento <prosody> para hablar lentamente, dos semitonos por debajo de lo normal:

<prosody rate="slow" pitch="-2st">Can you hear me now?</prosody>

<emphasis>

Se usa para añadir o quitar énfasis del texto contenido en el elemento. El elemento <emphasis> modifica el habla de forma similar a <prosody>, pero sin necesidad de definir atributos de habla individuales.

Este elemento admite un atributo "level" opcional con los siguientes valores válidos:

  • strong
  • moderate
  • none
  • reduced

Para obtener más información sobre el elemento emphasis, consulta la especificación de W3.

Ejemplo

En el siguiente ejemplo se usa el elemento <emphasis> para hacer un anuncio:

<emphasis level="moderate">This is an important announcement</emphasis>

<par>

Un contenedor multimedia paralelo que te permite reproducir varios elementos multimedia a la vez. El único contenido permitido es un conjunto de uno o varios elementos <par>, <seq> y <media>. El orden de los elementos <media> no es significativo.

A menos que un elemento secundario especifique una hora de inicio diferente, la hora de inicio implícita del elemento es la misma que la del contenedor <par>. Si un elemento secundario tiene un valor de desplazamiento definido en su atributo begin o end, el desplazamiento del elemento será relativo a la hora de inicio del contenedor <par>. En el caso del elemento raíz <par>, se ignora el atributo begin y la hora de inicio es cuando el proceso de síntesis de voz de SSML empieza a generar la salida del elemento raíz <par> (es decir, el tiempo "cero").

Ejemplo

<speak>
  <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>
</speak>

<seq>

Un contenedor multimedia secuencial que te permite reproducir elementos multimedia uno tras otro. El único contenido permitido es un conjunto de uno o varios elementos <seq>, <par> y <media>. El orden de los elementos multimedia es el orden en el que se renderizan.

Los atributos begin y end de los elementos secundarios se pueden definir con valores de desplazamiento (consulta la sección Especificación de tiempo más abajo). Los valores de desplazamiento de esos elementos secundarios serán relativos al final del elemento anterior de la secuencia o, en el caso del primer elemento de la secuencia, relativos al principio de su contenedor <seq>.

Ejemplo

<speak>
  <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>
</speak>

<media>

Representa una capa multimedia dentro de un elemento <par> o <seq>. El contenido permitido de un elemento <media> es un elemento <speak> o <audio> de SSML. En la siguiente tabla se describen los atributos válidos de un elemento <media>.

Atributos

Atributo Obligatorio Predeterminado Valores
xml:id no sin valor Identificador XML único de este elemento. No se admiten entidades codificadas. Los valores de identificador permitidos coinciden con la expresión regular "([-_#]|\p{L}|\p{D})+". Consulta XML-ID para obtener más información.
empezar no 0 Hora de inicio de este contenedor multimedia. Se ignora si se trata del elemento contenedor multimedia raíz (se trata igual que el valor predeterminado "0"). Consulte la sección Especificación de tiempo que aparece más abajo para ver los valores de cadena válidos.
end no sin valor Especificación de la hora de finalización de este contenedor multimedia. Consulte la sección Especificación de tiempo que aparece más abajo para ver los valores de cadena válidos.
repeatCount no 1 Un número real que especifica cuántas veces se debe insertar el contenido multimedia. No se admiten repeticiones fraccionarias, por lo que el valor se redondeará al entero más próximo. El cero no es un valor válido, por lo que se trata como si no se hubiera especificado ningún valor y se le asigna el valor predeterminado.
repeatDur no sin valor Un TimeDesignation que es un límite de la duración del contenido multimedia insertado. Si la duración del contenido multimedia es inferior a este valor, la reproducción finalizará en ese momento.
soundLevel no +0 dB Ajusta el nivel de sonido del audio en soundLevel decibelios. El intervalo máximo es de ±40 dB, pero el intervalo real puede ser inferior y la calidad de salida puede no dar buenos resultados en todo el intervalo.
fadeInDur no 0 s Un TimeDesignation durante el cual el contenido multimedia pasará de estar en silencio al soundLevel especificado (opcional). Si la duración del contenido multimedia es inferior a este valor, el fundido de entrada se detendrá al final de la reproducción y el nivel de sonido no alcanzará el nivel especificado.
fadeOutDur no 0 s Un TimeDesignation durante el cual el contenido multimedia se atenuará desde el soundLevel especificado opcionalmente hasta que se quede en silencio. Si la duración del contenido multimedia es inferior a este valor, el nivel de sonido se ajusta a un valor inferior para que se alcance el silencio al final de la reproducción.

Especificación de tiempo

Una especificación de tiempo, que se usa para el valor de los atributos `begin` y `end` de los elementos <media> y los contenedores multimedia (elementos <par> y <seq>), es un valor de desplazamiento (por ejemplo, +2.5s) o un valor de base de sincronización (por ejemplo, foo_id.end-250ms).

  • Valor de desplazamiento: el valor de desplazamiento de tiempo es un valor de recuento de tiempo SMIL que permite valores que coincidan con la expresión regular: "\s\*(+|-)?\s\*(\d+)(\.\d+)?(h|min|s|ms)?\s\*"

    La primera cadena de dígitos es la parte entera del número decimal y la segunda cadena de dígitos es la parte fraccionaria decimal. El signo predeterminado (es decir, "(+|-)?") es "+". Los valores de la unidad corresponden a horas, minutos, segundos y milisegundos, respectivamente. La unidad predeterminada es "s" (segundos).

  • Valor de syncbase: es un valor de syncbase de SMIL que permite valores que coincidan con la expresión regular: "([-_#]|\p{L}|\p{D})+\.(begin|end)\s\*(+|-)\s\*(\d+)(\.\d+)?(h|min|s|ms)?\s\*"

    Los dígitos y las unidades se interpretan de la misma forma que un valor de desplazamiento.

<phoneme>

Puedes usar la etiqueta <phoneme> para producir pronunciaciones personalizadas de palabras en línea. La función de texto a voz acepta los alfabetos fonéticos IPA y X-SAMPA. Consulta la página de fonemas 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

En una transcripción se pueden indicar hasta tres niveles de énfasis:

  1. Énfasis primario: se indica con /ˈ/ en el AFI y con /"/ en X-SAMPA.
  2. Énfasis secundario: se indica con /ˌ/ en el AFI y con /%/ en X-SAMPA.
  3. Sin acento: no se indica con ningún símbolo (en ninguna de las dos notaciones).

Es posible que algunos idiomas tengan menos de tres niveles o que no indiquen la posición de la tónica. Consulta la página de fonemas para ver los niveles de énfasis disponibles en tu idioma. Las marcas de acento se colocan al principio de cada sílaba acentuada. Por ejemplo, en inglés de EE. UU.:

Palabra de ejemplo IPA X-SAMPA
agua ˈwɑːtɚ "wA:t@`
submarina ˌʌndɚˈwɑːtɚ %Vnd@"wA:t@

Transcripciones amplias y restringidas

Por lo general, las transcripciones deben ser más amplias y fonémicas. Por ejemplo, en inglés de EE. UU., transcribe la /t/ intervocal (en lugar de usar un toque):

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

Hay casos en los que el uso de la representación fonémica hace que los resultados de la síntesis de voz no suenen naturales (por ejemplo, si la secuencia de fonemas es difícil de pronunciar desde el punto de vista anatómico).

Un ejemplo de esto es la asimilación de sonoridad de /s/ en inglés. En este caso, la asimilación debería reflejarse en la transcripción:

Palabra de ejemplo IPA X-SAMPA
gatos ˈkæts "k{ts
perros ˈdɑːgz en lugar de ˈdɑːgs "dA:gz en lugar de "dA:gs

50% en TCO

Cada sílaba debe contener una vocal (y solo una). Esto significa que debes evitar las consonantes silábicas y transcribirlas 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

Silabación

También puedes especificar los límites de las sílabas con /./. Cada sílaba debe contener una vocal (y solo una). Por ejemplo:

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

Diccionario de pronunciación personalizado

Como alternativa a proporcionar pronunciaciones insertadas en la etiqueta phoneme, puedes proporcionar un diccionario de pronunciaciones personalizadas en la RPC de síntesis de voz. Cuando el diccionario de pronunciación personalizado se incluye en la solicitud, el texto de entrada se transforma automáticamente con la etiqueta phoneme de SSML.

Por ejemplo, la siguiente solicitud con texto de entrada y pronunciación personalizada se transformará y será equivalente al SSML que se muestra a continuación.

Entrada original:

input: {
  text: 'Hello world! It is indeed a beautiful world!',
  custom_pronunciations: {
    pronunciations: {
      phrase: 'world'
      phonetic_encoding: PHONETIC_ENCODING_IPA
      pronunciation: 'wɜːld'
    }
  }
}

Entrada transformada:

input: {
  ssml: '<speak>Hello <phoneme alphabet="ipa" ph="wɜːld">world</phoneme>! It is indeed a beautiful <phoneme alphabet="ipa" ph="wɜːld">world</phoneme>!</speak>'
}

Duraciones

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

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

La cadena de formato admite los siguientes valores:

Abreviatura Valor
h horas
m minutos
s segundos
ms milisegundos

<voice>

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

<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>

También puedes usar la etiqueta <voice> para especificar una voz concreta (el nombre de la voz en la página de voces admitidas) en lugar de especificar 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>, la función de texto a voz espera recibir un name (el nombre de la voz que quieres usar) o una combinación de los siguientes atributos. Los tres atributos son opcionales, pero debe proporcionar al menos uno si no indica un name.

  • gender: uno de los valores "male", "female" o "neutral".
  • variant: se usa como criterio de desempate en los casos en los que hay varias posibilidades de qué voz usar en función de tu configuración.
  • language: el idioma que quieras. Solo se puede especificar un idioma en una etiqueta <voice> determinada. Especifica el idioma en formato BCP-47. Puedes encontrar el código BCP-47 de tu idioma en la columna Código de idioma de la página de voces e idiomas admitidos.

También puede controlar la prioridad relativa 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 configura correctamente, la solicitud fallará.
  • ordering: los atributos que se incluyan después de una etiqueta ordering se considerarán atributos preferidos en lugar de obligatorios. La API Text-to-Speech tiene en cuenta los atributos preferidos de la mejor forma posible y en el orden en que aparecen después de la etiqueta ordering. Si alguno de los atributos preferidos se configura de forma incorrecta, la conversión de texto a voz puede devolver una voz válida, pero con la configuración incorrecta descartada.

Ejemplos de configuraciones que usan 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 en la misma solicitud SSML. Todos los idiomas se sintetizarán con la misma voz, a menos que uses la etiqueta <voice> para cambiarla explícitamente. La cadena xml:lang debe contener el idioma de destino en formato BCP-47 (este valor se indica como "código de idioma" en la tabla de voces admitidas). 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>

La función de conversión de texto a voz admite la etiqueta <lang> en la medida de lo posible. No todas las combinaciones de idiomas producen resultados de la misma calidad si se especifican en la misma solicitud de SSML. En algunos casos, una combinación de idiomas puede producir un efecto que sea detectable pero 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 semíticos, como el árabe, el hebreo y el persa, no son compatibles con la etiqueta <lang> y provocarán silencio. Si quieres usar alguno de estos idiomas, te recomendamos que utilices la etiqueta <voice> para cambiar a una voz que hable el idioma que quieras (si está disponible).

Marcas de tiempo de SSML

La API Text-to-Speech admite el uso de marcas de tiempo en los datos de audio que crees. Un punto temporal es una marca de tiempo (en segundos, medida desde el principio del audio generado) que corresponde a un punto concreto del guion. Puedes definir un punto temporal en tu secuencia de comandos con la etiqueta <mark>. Cuando se genera el audio, la API devuelve el desfase de tiempo entre el inicio del audio y el punto temporal.

Para definir un punto temporal, debes seguir estos dos pasos:

  1. Añade una etiqueta <mark> SSML en el punto de la secuencia de comandos en el que quieras que se muestre una marca de tiempo.
  2. Asigna el valor SSML_MARK a TimepointType. Si no se define este campo, los puntos temporales no se devuelven de forma predeterminada.

En el siguiente ejemplo se devuelven dos marcas de tiempo:

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

Estilos

Las siguientes voces pueden hablar con varios estilos:

  1. en-US-Neural2-F
  2. en-US-Neural2-J

Usa la etiqueta <google:style> para controlar qué estilo quieres usar. Solo debes usar la etiqueta en frases completas.

Ejemplo:

<speak><google:style name="lively">Hello I'm so happy today!</google:style></speak>

El campo name admite los siguientes valores:

  1. apologetic
  2. calm
  3. empathetic
  4. firm
  5. lively