Linguagem de marcação de síntese de voz (SSML)

Para possibilitar mais personalização da resposta de áudio, é possível enviar Linguagem de marcação de síntese de fala (SSML, na sigla em inglês) na solicitação do Text-to-Speech com o fornecimento de detalhes sobre pausas, formatação de áudio para acrônimos, datas, horas, abreviaturas ou texto que deva ser censurado. Consulte o tutorial de SSML do Text-to-Speech para mais informações e exemplos de código.

Em seguida, mostramos um exemplo de marcação SSML e a sintetização do texto por meio do Text-to-Speech:

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

Aqui está o texto sintetizado para o documento SSML de exemplo:

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.

O Text-to-Speech é compatível com um subconjunto das tags SSML disponíveis que estão descritas neste tópico.

Para mais informações sobre como criar dados de áudio com o Text-to-Speech usando entradas SSML, consulte Como criar arquivos de áudio de voz.

Dicas para usar a SSML

Dependendo da sua implementação, talvez seja necessário adicionar caracteres de escape em aspas no payload de SSML enviado para o Text-to-Speech. O exemplo a seguir mostra como formatar uma entrada SSML incluída em um 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'
    }
  }"

Reservar caracteres

Evite usar caracteres de reserva SSML no texto que será convertido em áudio. Quando você precisar fazer isso, use o código de escape para impedir que o caractere seja lido como código. A tabela a seguir mostra caracteres SSML reservados e os códigos de escape associados a eles.

Caractere Código de escape
" &quot;
& &amp;
. &apos;
< &lt;
> &gt;

Selecionar uma voz

Você pode definir a voz no objeto VoiceSelectionParams. Consulte o tutorial de SSML do Text-to-Speech para ver um exemplo de código que demonstra o uso do objeto VoiceSelectionParams.

É possível usar a tag <voice> para ler SSML em várias vozes, mas você precisa definir o nome do VoiceSelectionParams para uma voz compatível:

Tipo de voz solicitado Recurso de digitação por voz compatível com a tag <voice>
Neural2 Studio Wavenet Notícias Standard
Neural2
Studio
Wavenet
Standard
Notícias

Compatibilidade com elementos SSML

As seções a seguir descrevem os elementos e as opções de SSML que podem ser usados em suas ações.

<speak>

O elemento raiz da resposta SSML.

Para saber mais sobre o elemento speak, consulte a especificação do W3.

Exemplo

<speak>
  my SSML content
</speak>

<break>

Elemento vazio que controla a pausa ou outros limites prosódicos entre as palavras. Usar <break> entre qualquer par de tokens é opcional. Se esse elemento não estiver presente entre as palavras, a quebra será determinada automaticamente com base no contexto linguístico.

Para saber mais sobre o elemento break, consulte a especificação do W3.

Atributos

Atributo Descrição
time

Define o tamanho da quebra em segundos ou milissegundos (por exemplo, "3 s" ou "250 ms").

strength

Define a força da quebra prosódica de saída por termos relativos. Os valores válidos são: "x-weak", "weak", "medium", "strong" e "x-strong". O valor "none" indica que nenhum limite de quebra prosódico será gerado, o que pode ser usado para evitar uma quebra prosódica que o processador poderia produzir. Os outros valores indicam uma força de quebra monotonicamente não decrescente (que aumenta de modo conceitual) entre os tokens. Os limites mais fortes normalmente são acompanhados por pausas.

Exemplo

O exemplo a seguir mostra como usar o elemento <break> para pausar entre as etapas:

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

Esse elemento permite indicar informações sobre o tipo de construção de texto contido no elemento. Também ajuda a especificar o nível de detalhes para renderizar o texto contido.

O elemento <say‑as> tem o atributo obrigatório, interpret-as, que determina como o valor é falado. Atributos opcionais format e detail são usados dependendo do valor interpret-as específico.

Exemplos

O atributo interpret-as aceita os seguintes valores:

  • currency

    O exemplo a seguir é falado, em inglês, como "quarenta e dois dólares e um centavo". Se o atributo de idioma for omitido, a localidade atual será usada.

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

    Veja a descrição de interpret-as='telephone' na observação do WG do W3C sobre a SSML 1.0, valores de atributo say-as.

    O exemplo a seguir é falado, em inglês, como "one eight zero zero two zero two one two one two". Se o atributo "google:style" for omitido, ele vai falar zero como a letra O.

    No momento, o atributo "google:style='zero-as-zero'" funciona apenas em localidades em EN.

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

    O exemplo a seguir é soletrado letra por letra:

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

    O atributo format é uma sequência de códigos de caracteres de campo de data. Os códigos de caracteres de campo aceitos em format são {y, m, d} para ano, mês e dia (do mês), respectivamente. Se o código de campo aparecer uma vez para ano, mês ou dia, o número de dígitos esperados será 4, 2 e 2, respectivamente. Se o código de campo for repetido, o número de dígitos esperados será o número de vezes que o código for repetido. É possível separar os campos no texto da data por pontuação e/ou espaços.

    O atributo detail controla a forma falada da data. Para detail='1', apenas os campos "dia" e um dos campos "mês ou "ano" são obrigatórios, embora seja possível fornecer ambos. Esse é o padrão quando nem todos os três campos são fornecidos. A forma falada, em inglês, é "The {dia ordinal} of {mês}, {ano}".

    O exemplo a seguir é falado, em inglês, como "The tenth of September, nineteen sixty":

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

    O exemplo a seguir é falado, em inglês, como "The tenth of September":

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

    Para detail='2', os campos "dia", "mês" e "ano" são obrigatórios e esse é o padrão quando todos os três campos são fornecidos. A forma falada, em inglês, é "{mês} {dia ordinal}, {ano}".

    O exemplo a seguir é falado, em inglês, como "September tenth, nineteen sixty":

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

    O exemplo a seguir é falado, em inglês, como "C A N":

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

    O exemplo a seguir é falado, em inglês, como "Twelve thousand three hundred forty five" (para inglês dos EUA) ou "Twelve thousand three hundred and forty five" (para inglês do Reino Unido):

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

    O exemplo a seguir é falado, em inglês, como "First":

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

    O exemplo a seguir é falado, em inglês, como "five and a half":

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

    O exemplo a seguir é emitido como um sinal sonoro de censura:

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

    Converte unidades para singular ou plural, dependendo do número. O exemplo a seguir é falado, em inglês, como "10 feet":

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

    O exemplo a seguir é falado, em inglês, como "Two thirty P.M.":

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

    O atributo format é uma sequência de códigos de caracteres do campo "tempo". Os códigos de caracteres de campo aceitos em format são {h, m, s, Z, 12, 24} para "hora", "minuto" (da hora), "segundo" (do minuto), "fuso horário", "12 horas" e "24 horas", respectivamente. Se o código de campo aparecer uma vez por hora, minuto ou segundo, o número de dígitos esperados é 1, 2 e 2, respectivamente. Se o código de campo for repetido, o número de dígitos esperados será o número de vezes que o código for repetido. É possível separar os campos no texto da hora podem por pontuação e/ou espaços. Se "hora", "minuto" ou "segundo" não forem especificados no formato ou não houver dígitos correspondentes, o campo será tratado como um valor zero. O format padrão é "hms12".

    O atributo detail controla se a forma falada da hora é de 12 ou 24 horas. O formato falado será 24 horas se detail='1' ou se detail forem omitidos e o formato da hora for 24 horas. O formato falado será de 12 horas se detail='2' ou se detail forem omitidos e o formato da hora for 12 horas.

Para saber mais sobre o elemento say-as, consulte a especificação do W3.

<audio>

Aceita a inserção de arquivos de áudio gravados e de outros formatos de áudio em conjunto com a saída de fala sintetizada.

Atributos

Atributo Obrigatório Padrão Valores
src sim n/a Um URI que se refere à fonte de mídia de áudio. O protocolo aceito é https.
clipBegin não 0 Uma TimeDesignation que especifica o ponto em que o áudio começará a tocar a partir do momento que for iniciado. Se esse valor for maior ou igual à duração real da fonte de áudio, nenhum áudio será inserido.
clipEnd não infinito Uma TimeDesignation que especifica o ponto em que o áudio parará de tocar a partir do momento que for iniciado. Se a duração real da fonte de áudio for menor que esse valor, a reprodução será finalizada nesse momento. Se clipBegin for maior ou igual a clipEnd, nenhum áudio será inserido.
speed não 100% A proporção da taxa de reprodução de saída em relação à taxa de entrada normal expressa em porcentagem. O formato é um número real positivo seguido por %. O intervalo atualmente aceito é de [50% (lento - meia velocidade), 200% (rápido - velocidade dupla)]. Valores fora desse intervalo podem (ou não) ser ajustados para ficar dentro dele.
repeatCount não 1 ou 10, se repeatDur for definido Um número real especificando quantas vezes é preciso inserir o áudio (após o recorte, se houver, até clipBegin e/ou clipEnd). Não são aceitas repetições fracionárias. Portanto, o valor será arredondado para o número inteiro mais próximo. Zero não é um valor válido e, portanto, é tratado como não especificado e tem o valor padrão nesse caso.
repeatDur não infinito Uma TimeDesignation que é um limite da duração do áudio inserido após o processamento da origem para os atributos clipBegin, clipEnd, repeatCount e speed (em vez da duração normal de reprodução). Se a duração do áudio processado for menor que esse valor, a reprodução será finalizada nesse momento.
soundLevel não +0 dB Ajusta o nível de som do áudio em soundLevel decibéis. O intervalo máximo é de +/- 40 dB, mas o real talvez seja efetivamente menor, e a qualidade de saída pode não produzir bons resultados em todo o intervalo.

Veja a seguir as configurações aceitas atualmente para áudio:

  • Formato: MP3 (MPEG v2)
    • 24.000 amostras por segundo
    • 24K - 96K bits por segundo, taxa fixa
  • Formato: Opus em Ogg
    • 24.000 amostras por segundo (super banda larga)
    • 24K - 96K bits por segundo, taxa fixa
  • Formato (obsoleto): WAV (RIFF)
    • PCM assinado de 16 bits, little endian
    • 24.000 amostras por segundo
  • Válido para todos os formatos:
    • É preferível ter um canal único, mas estéreo é aceitável.
    • Duração máxima de 240 segundos. Se você quiser tocar áudio com uma duração maior, implemente uma resposta de mídia.
    • Limite de tamanho de arquivo de 5 megabytes.
    • O URL de origem precisa usar o protocolo HTTPS.
    • O UserAgent ao buscar o áudio é o "Google-Speech-Actions".

O conteúdo do elemento <audio> é opcional e será usado se não for possível abrir o arquivo de áudio ou se o dispositivo de saída não for compatível com áudio. O conteúdo inclui um elemento <desc>. Nesse caso, o conteúdo de texto desse elemento é usado para exibição. Para mais informações, consulte a seção "Áudio gravado" na Lista de verificação de respostas.

O URL src também precisa ser um URL de HTTPS. O Google Cloud Storage hospeda seus arquivos de áudio em um URL https.

Para saber mais sobre respostas de mídia, consulte a seção de resposta de mídia no guia de respostas.

Para saber mais sobre o elemento audio, consulte a especificação do W3.

Exemplo

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

<p>,<s>

Elementos de frase e parágrafo.

Para saber mais sobre os elementos p e s, consulte a especificação do W3.

Exemplo

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

Práticas recomendadas

  • Use as tags <s>...</s> para agrupar frases completas, principalmente se elas contiverem elementos SSML que alterem a prosódia (ou seja, <audio>, <break>, <emphasis>, <par>, <prosody>, <say-as>, <seq> e <sub>).
  • Se uma pausa na fala for longa o suficiente para ser audível, use as tags <s>...</s> e coloque essa quebra entre as sentenças.

<sub>

Indica que o texto no valor do atributo de alias substitui o texto contido para a pronúncia.

Também é possível usar o elemento sub para fornecer uma pronúncia simplificada de uma palavra de difícil leitura. O último exemplo abaixo demonstra este caso de uso em japonês.

Para saber mais sobre o elemento sub, consulte a especificação do W3.

Exemplos

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

<mark>

Um elemento vazio que coloca um marcador na sequência de texto ou de tags. É possível usá-lo para referir-se a um local específico na sequência ou para inserir um marcador em um fluxo de saída para notificação assíncrona.

Para saber mais sobre o elemento mark, consulte a especificação do W3.

Exemplo

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

<prosody>

Usado para personalizar o tom, a taxa de fala e o volume de texto contido no elemento. Atualmente, os atributos rate, pitch e volume são compatíveis.

Os atributos rate e volume são definidos de acordo com as especificações do W3. Há três opções para definir o valor do atributo pitch:

Atributo Descrição
name

A ID da string de cada marca.

Opção Descrição
Parente Especifique um valor relativo (por exemplo, "low", "medium", "high" etc.), em que" "medium" é o tom padrão.
Semitons Aumente ou diminua o tom em "N" semitons usando "+N st" ou "-N st", respectivamente. Observe que "+/-" e "st" são obrigatórios.
Porcentagem Aumente ou diminua o tom em "N%" usando "+ N%" ou "-N%", respectivamente. Observe que "%" é obrigatório, mas "+/-" é opcional.

Para saber mais sobre o elemento prosody, consulte a especificação do W3.

Exemplo

O exemplo a seguir usa o elemento <prosody> para falar lentamente a dois semitons abaixo do normal:

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

<emphasis>

Usado para adicionar ou remover ênfase do texto contido no elemento. O elemento <emphasis> modifica a fala de forma semelhante a <prosody>, mas sem a necessidade de definir atributos de fala individuais.

Esse elemento aceita um atributo "level" opcional com os seguintes valores válidos:

  • strong
  • moderate
  • none
  • reduced

Para saber mais sobre o elemento emphasis, consulte a especificação do W3.

Exemplo

O exemplo a seguir usa o elemento <emphasis> para fazer um comunicado:

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

<par>

Um contêiner de mídia paralela que permite abrir vários elementos de mídia de uma só vez. O único conteúdo permitido é um conjunto de um ou mais elementos <par>, <seq> e <media>. A ordem dos elementos <media> não é importante.

A menos que um elemento filho especifique um horário de início diferente, o horário de início implícito para o elemento é o mesmo que o do contêiner <par>. Se um elemento filho tiver um valor de ajuste definido para seu atributo begin ou end, o ajuste do elemento será relativo ao horário de início do contêiner <par>. Para o elemento raiz <par>, o atributo "begin" é ignorado e o horário de início ocorre quando o processo de síntese de voz SSML começa a gerar a saída para o elemento raiz <par> (ou seja, efetivamente tempo "zero").

Exemplo

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

Um contêiner de mídia sequencial que permite abrir elementos de mídia um após o outro. O único conteúdo permitido é um conjunto de um ou mais elementos <seq>, <par> e <media>. A ordem dos elementos de mídia é a ordem em que eles são renderizados.

Os atributos begin e end de elementos filhos são definidos como valores de ajuste. Consulte Especificação de tempo abaixo. Os valores de ajuste desses elementos filhos serão relativos ao final do elemento anterior na sequência ou, no caso do primeiro elemento na sequência, em relação ao início do contêiner <seq> dele.

Exemplo

<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 uma camada de mídia em um elemento <par> ou <seq>. O conteúdo permitido de um elemento <media> é um elemento SSML <speak> ou <audio>. A tabela a seguir descreve os atributos válidos para um elemento <media>.

Atributos

Atributo Obrigatório Padrão Valores
xml:id não nenhum valor Um identificador XML exclusivo para esse elemento. Entidades codificadas não são aceitas. Os valores permitidos para o identificador correspondem à expressão regular "([-_#]|\p{L}|\p{D})+". Consulte XML-ID para mais informações.
begin não 0 A hora de início deste contêiner de mídia. Ignorado se este for o elemento de contêiner de mídia raiz (tratado da mesma forma que o padrão de "0"). Consulte a seção Especificação de tempo abaixo para valores de string válidos.
end não nenhum valor Uma especificação para a hora de término deste contêiner de mídia. Consulte a seção Especificação de tempo abaixo para valores de string válidos.
repeatCount não 1 Um número real que especifica quantas vezes é preciso inserir a mídia. Repetições fracionárias não são aceitas. Portanto, o valor será arredondado para o número inteiro mais próximo. Zero não é um valor válido e, portanto, é tratado como não especificado e tem o valor padrão nesse caso.
repeatDur não nenhum valor Uma TimeDesignation que é um limite na duração da mídia inserida. Se a duração da mídia for menor que esse valor, a reprodução será finalizada nesse momento.
soundLevel não +0 dB Ajusta o nível de som do áudio em soundLevel decibéis. O intervalo máximo é de +/- 40 dB, mas o real talvez seja efetivamente menor, e a qualidade de saída pode não produzir bons resultados em todo o intervalo.
fadeInDur não 0s Uma TimeDesignation em que o som da mídia aparecerá gradualmente, do modo silencioso para o modo soundLevel especificado. Se a duração da mídia for menor que esse valor, a exibição gradual será interrompida ao final da reprodução, e o nível de som não atingirá o nível especificado.
fadeOutDur não 0s Uma TimeDesignation em que o som da mídia será reduzido gradualmente, do modo soundLevel especificado até desaparecer por completo. Se a duração da mídia for menor que esse valor, o nível de som será definido como um valor mais baixo para garantir que o silêncio seja atingido ao final da reprodução.

Especificação de tempo

Uma especificação de tempo, usada para o valor dos atributos "begin" e "end" de elementos <media> e contêineres de mídia (elementos <par> e <seq>), é um valor de ajuste (por exemplo, +2.5s) ou um valor de syncbase (por exemplo, foo_id.end-250ms).

  • Valor de ajuste: o valor de ajuste de tempo é um valor de contagem de tempo SMIL que permite valores correspondentes à expressão regular: "\s\*(+|-)?\s\*(\d+)(\.\d+)?(h|min|s|ms)?\s\*"

    A primeira string de dígitos é a parte inteira do número decimal, e a segunda é a parte fracionária. O sinal padrão (ou seja, "(+|-)?") é "+". Os valores unitários correspondem a horas, minutos, segundos e milissegundos, respectivamente. O padrão para as unidades é "s" (segundos).

  • Valor da syncbase: é um valor de syncbase SMIL que permite valores correspondentes à expressão regular: "([-_#]|\p{L}|\p{D})+\.(begin|end)\s\*(+|-)\s\*(\d+)(\.\d+)?(h|min|s|ms)?\s\*"

    Os dígitos e as unidades são interpretados da mesma forma que um valor de ajuste.

<phoneme>

É possível usar a tag <phoneme> para produzir pronúncias personalizadas de palavras in-line. O Text-to-Speech aceita os alfabetos fonéticos IPA e X-SAMPA. Consulte a página fonemas para ver uma lista de idiomas e fonemas compatíveis.

Cada aplicação da tag <phoneme> direciona a pronúncia de uma única palavra:

  <phoneme alphabet="ipa" ph="ˌmænɪˈtoʊbə">manitoba</phoneme>
  <phoneme alphabet="x-sampa" ph='m@"hA:g@%ni:'>mahogany</phoneme>

Marcadores de acento

Há até três níveis de acento que podem ser colocados em uma transcrição:

  1. Acento principal: indicado com /ˈ/ em IPA e /"/ em X-SAMPA.
  2. Acento secundário: indicado com /ˌ/ em IPA e /%/ em X-SAMPA.
  3. Não acentuado: não é indicado com um símbolo (em uma das notação).

Alguns idiomas podem ter menos de três níveis ou não indicar colocação de acento.. Consulte a página de fonemas para ver os níveis de acentos disponíveis para seu idioma. Os marcadores de acento são colocados no início de cada sílaba acentuado. Por exemplo, no inglês dos EUA:

Example word IPA X-SAMPA
water ˈwɑːtɚ "wA:t@`
underwater ˌʌndɚˈwɑːtɚ %Vnd@"wA:t@

Transcrições amplas e limitadas

Como regra geral, mantenha a transcrição mais abrangente e fonética. Por exemplo, no inglês dos EUA, transcreva /t/ intervocal (em vez de usar um toque):

Example word IPA X-SAMPA
manteiga ˈbʌtɚ instead of ˈbʌɾɚ "bVt@` instead of "bV4@`

Há alguns casos em que o uso da representação fonética torna os resultados do TTS não artificiais, por exemplo, se a sequência de fonemas é anatomicamente difícil de pronunciar.

Um exemplo disso é a assimilação de voz para /s/ em inglês. Nesse caso, a assimilação deve ser refletida na transcrição:

Example word IPA X-SAMPA
gatos ˈkæts "k{ts
cães ˈdɑːgz instead of ˈdɑːgs "dA:gz instead of "dA:gs

Redução

Cada sílaba precisa conter uma (e apenas uma) vogal. Isso significa que você precisa evitar consonâncias silábicas e, em vez disso, transcrevê-las com uma vogal reduzida. Exemplo:

Example word IPA X-SAMPA
kitten ˈkɪtən instead of ˈkɪtn "kIt@n instead of "kitn
kettle ˈkɛtəl instead of ˈkɛtl "kEt@l instead of "kEtl

Silabação

Também é possível especificar limites silábicos usando /./. Cada sílaba precisa conter uma (e apenas uma) vogal. Exemplo:

Example word IPA X-SAMPA
readability ˌɹiː.də.ˈbɪ.lə.tiː %r\i:.d@."bI.l@.ti:

Dicionário de pronúncia personalizado

Como alternativa para fornecer pronúncias inline com a tag phoneme, forneça um dicionário de pronúncias personalizadas no RPC de síntese de voz. Quando o dicionário de pronúncia personalizado está na solicitação, o texto de entrada é transformado automaticamente com a tag phoneme do SSML.

Por exemplo, a solicitação a seguir com entrada de texto e pronúncia personalizada será transformada e será equivalente ao SSML abaixo.

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

Durações

O Text-to-Speech é compatível com o <say-as interpret-as="duration"> para ler as durações corretamente. Por exemplo, o exemplo a seguir seria verbalizado como "cinco horas e trinta minutos":

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

A string de formato suporta os seguintes valores:

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

<voice>

A tag <voice> permite usar mais de uma voz em uma única solicitação SSML. No exemplo a seguir, a voz padrão é uma voz masculina em inglês. Todas as palavras serão sintetizadas nessa voz, exceto "qu'est-ce qui t'amène ici", que será verbalizada em francês usando uma voz feminina em vez do idioma padrão (inglês) e gênero (masculino).

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

Como alternativa, é possível usar uma tag <voice> para especificar uma voz individual (o nome da voz na página de vozes compatíveis) em vez de especificar uma language e/ou 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>

Quando você usa a tag <voice>, a conversão de texto em voz espera receber o name (o nome da voz que você quer usar)ou uma combinação dos seguintes atributos. Os três atributos são opcionais, mas você precisa fornecer pelo menos um atributo, caso não forneça umname ,

  • gender: um dos valores "masculino", "feminino" ou "neutro".
  • variant: usado como desempatador nos casos em que há várias possibilidades de usar a voz com base na configuração.
  • language: o idioma pretendido. Somente um idioma pode ser especificado em uma tag <voice>. Especifique seu idioma no formato BCP-47. Você pode encontrar o código BCP-47 para seu idioma na coluna código de idioma na página Vozes e idiomas compatíveis.

Também é possível controlar a prioridade relativa de cada um dos atributos gender, variant e language usando duas tags extras: required e ordering.

  • required: se um atributo for designado como required e não estiver configurado corretamente, a solicitação falhará.
  • ordering: todos os atributos listados após uma tag ordering são considerados preferidos, e não obrigatórios. A API Text-to-Speech considera os atributos preferidos da melhor maneira possível, na ordem em que são listados após a tag ordering. Se algum atributo preferencial estiver configurado incorretamente, a conversão de texto em voz ainda poderá retornar uma voz válida, mas com a configuração incorreta descartada.

Exemplos de configurações usando as tags required e 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>

É possível usar <lang> para incluir texto em vários idiomas na mesma solicitação SSML. Todos os idiomas serão sintetizados na mesma voz, a menos que você use a tag <voice> para mudar a voz explicitamente. A string xml:lang precisa conter o idioma de destino no formato BCP-47 (esse valor é listado como "código de idioma" na tabela vozes compatíveis). No exemplo a seguir, "chat" será verbalizado em francês, em vez do idioma padrão (inglês):

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

O Text-to-Speech é compatível com a tag <lang> da melhor maneira possível. Nem todas as combinações de idiomas produzem os mesmos resultados de qualidade se especificadas na mesma solicitação SSML. Em alguns casos, uma combinação de linguagem pode produzir um efeito que seja detectável, mas sutil ou percebido como negativo. Problemas conhecidos:

  • O japonês com caracteres Kanji não é compatível com a tag <lang>. A entrada é transliterada e lida como caracteres chinês.
  • Idiomas semitas, como árabe, hebraico e persa, não são compatíveis com a tag <lang> e resultarão em silêncio. Se você quiser usar qualquer um desses idiomas, recomendamos usar a tag <voice> para alternar para uma voz que fala o idioma desejado (se disponível).

Pontos de tempo de SSML

A API Text-to-Speech é compatível com o uso de pontos de tempo nos dados de áudio criados. Um tempo é um carimbo de data/hora (em segundos, medido a partir do início do áudio gerado) que corresponde a um ponto designado no script. É possível definir um ponto de tempo no script usando a tag <mark>. Quando o áudio é gerado, a API retorna a diferença de horário entre o início do áudio e o ponto do tempo.

Há duas etapas para definir um ponto de tempo:

  1. Adicione uma tag SSML <mark> ao ponto do script para o qual você quer um carimbo de data/hora.
  2. Defina TimepointType como SSML_MARK. Se esse campo não for definido, os pontos de tempo não serão retornados por padrão.

O exemplo a seguir retorna dois pontos de tempo:

  • timepoint_1: indica o tempo (em segundos) em que a palavra "Mark" aparece no áudio gerado.
  • timepoint_2: indica o tempo (em segundos) em que a palavra "ver" aparece no áudio gerado.
<speak>Hello <mark name="timepoint_1"/> Mark. Good to <mark
name="timepoint_2"/> see you.</speak>

Estilos

As seguintes vozes podem falar em vários estilos:

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

Use a tag <google:style> para controlar qual estilo usar. Use a tag apenas com frases completas.

Exemplo:

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

O campo name dá suporte aos seguintes valores:

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