Estrutura e eventos de documentos do SSML

O SSML (Speech Synthesis Markup Language) com texto de entrada determina a estrutura, o conteúdo e outras características da saída da conversão de texto em fala. Por exemplo, você pode usar o SSML para definir um parágrafo, uma frase, uma interrupção ou uma pausa ou um silêncio. Você pode colocar o texto entre marcas de evento, como indicador ou visema, que poderão ser processados depois pelo aplicativo.

Confira as seções abaixo para obter detalhes de como estruturar elementos no documento SSML.

Estrutura do documento

A implementação do serviço de Fala da SSML é baseada na Speech Synthesis Markup Language Versão 1.0, do World Wide Web Consortium. Os elementos compatíveis com a Fala podem ser diferentes do padrão W3C.

Cada documento SSML é criado com elementos ou marcas SSML. Esses elementos são usados para ajustar a voz, o estilo, o tom, o volume e outros aspectos.

Veja um subconjunto da estrutura e da sintaxe básicas de um 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>

Alguns exemplos de conteúdo que são permitidos em cada elemento estão descritos nesta lista:

  • audio: o corpo do elemento audio pode conter uma marcação SSML ou um texto sem formatação que será falado se o arquivo de áudio não estiver disponível ou não puder ser reproduzido. O elemento audio também pode conter um texto e os seguintes elementos: audio, break, p, s, phoneme, prosody, say-as e sub.
  • bookmark: esse elemento não pode conter texto ou outros elementos.
  • break: esse elemento não pode conter texto ou outros elementos.
  • emphasis: esse elemento pode conter texto e os seguintes elementos: audio, break, emphasis, lang, phoneme, prosody, say-as e sub.
  • lang: esse elemento pode conter todos os outros elementos, exceto mstts:backgroundaudio, voice e speak.
  • lexicon: esse elemento não pode conter texto ou outros elementos.
  • math: esse elemento não pode conter texto ou elementos MathML.
  • mstts:audioduration: esse elemento não pode conter texto ou outros elementos.
  • mstts:backgroundaudio: esse elemento não pode conter texto ou outros elementos.
  • mstts:embedding: esse elemento pode conter texto e os seguintes elementos: audio, break, emphasis, lang, phoneme, prosody, say-as e sub.
  • mstts:express-as: esse elemento pode conter texto e os seguintes elementos: audio, break, emphasis, lang, phoneme, prosody, say-as e sub.
  • mstts:silence: esse elemento não pode conter texto ou outros elementos.
  • mstts:viseme: esse elemento não pode conter texto ou outros elementos.
  • p: esse elemento pode conter texto e os seguintes elementos: audio, break, phoneme, prosody, say-as, sub, mstts:express-as e s.
  • phoneme: esse elemento só pode conter texto e nenhum outro elemento.
  • prosody: esse elemento pode conter texto e os seguintes elementos: audio, break, p, phoneme, prosody, say-as, sub e s.
  • s: esse elemento pode conter texto e os seguintes elementos: audio, break, phoneme, prosody, say-as, mstts:express-as e sub.
  • say-as: esse elemento só pode conter texto e nenhum outro elemento.
  • sub: esse elemento só pode conter texto e nenhum outro elemento.
  • speak: o elemento raiz de um documento SSML. Esse elemento pode conter os seguintes elementos: mstts:backgroundaudio e voice.
  • voice: esse elemento pode conter todos os outros elementos, exceto mstts:backgroundaudio e speak.

O serviço de Fala processa a pontuação automaticamente da forma correta, como uma pausa após um ponto final ou o uso da entonação correta quando a frase termina com um ponto de interrogação.

Caracteres especiais

Para usar os caracteres &, < e > no valor ou texto do elemento SSML, use o formato de entidade. Especificamente, você deve usar &amp; no lugar de &, usar &lt; no lugar de < e usar &gt; no lugar de >. Caso contrário, o SSML não é analisado corretamente.

Por exemplo, especifique green &amp; yellow em vez de green & yellow. O seguinte SSML é analisado conforme o esperado:

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

Caracteres especiais, como aspas, apóstrofos e colchetes, precisam ter um caractere de escape. Para obter mais informações, confira Linguagem XML 1.0: Apêndice D.

Aspas duplas ou simples devem incluir os valores de atributo. Por exemplo, <prosody volume="90"> e <prosody volume='90'> são elementos válidos e bem formados, mas <prosody volume=90> não é reconhecido.

Elemento raiz da fala

O elemento speak contém informações como versão, idioma e definição de vocabulário de marcação. speak é o elemento raiz e é obrigatório em todos os documentos SSML. Você deve especificar o idioma padrão no elemento speak, independentemente de o idioma ser ou não ajustado em outro lugar, como no elemento lang.

Esta é a sintaxe do elemento speak:

<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="string"></speak>
Atributo Descrição Obrigatório ou opcional
version Indica a versão da especificação SSML usada para interpretar a marcação do documento. A versão atual é "1.0". Obrigatório
xml:lang O idioma do documento raiz. O valor pode conter um código de idioma como en (inglês) ou uma localidade como en-US (inglês – Estados Unidos). Obrigatório
xmlns Especifica o URI do documento que define o vocabulário de marcação (os tipos de elementos e os nomes de atributos) do documento SSML. O URI atual é "http://www.w3.org/2001/10/synthesis"". Obrigatório

O elemento speak precisa conter pelo menos um elemento de voz.

Exemplos de speak

Os valores com suporte para atributos do elemento speakjá foram descritos.

Exemplo de voz única

Este exemplo usa a voz en-US-AvaNeural. Para obter mais exemplos, confira os exemplos 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>

Adicionar uma quebra

Use o elemento break para substituir o comportamento padrão de interrupções ou pausas entre palavras. Caso contrário, o serviço de Fala insere pausas automaticamente.

O uso dos atributos do elemento break está descrito na tabela a seguir.

Atributo Descrição Obrigatório ou opcional
strength A duração relativa de uma pausa usando um dos seguintes valores:
  • x-weak
  • weak
  • medium (padrão)
  • forte
  • x-strong
Opcional
time A duração absoluta de uma pausa em segundos (como 2s) ou em milissegundos (como 500ms). Os valores válidos variam de 0 a 5000 milissegundos. Se você definir um valor maior que o máximo com suporte, o serviço usa 5000ms. Se o atributo time estiver definido, o atributo strength será ignorado. Opcional

Aqui estão mais detalhes sobre o atributo strength.

Intensidade Duração relativa
Extra fraco 250 ms
Fraco 500 ms
Médio 750 ms
Forte 1\.000 ms
Extra forte 1.250 ms

Exemplos de break

Os valores com suporte para atributos do elemento breakjá foram descritos. Todas as três maneiras a seguir adicionam quebras 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>

Adicionar silêncio

Use o elemento mstts:silence para inserir pausas antes ou depois do texto ou entre duas frases adjacentes.

Uma das diferenças entre mstts:silence e break é que o elemento break pode ser inserido em qualquer lugar no texto. O silêncio só funciona no início ou no final do texto de entrada ou no limite de duas frases adjacentes.

A configuração de silêncio é aplicada a todo o texto de entrada dentro do elemento delimitador voice. Para redefinir ou alterar a configuração de silêncio novamente, você precisa usar um novo elemento voice com a mesma voz ou uma voz diferente.

O uso dos atributos do elemento mstts:silence está descrito na tabela a seguir.

Atributo Descrição Obrigatório ou opcional
type Especifica onde e como adicionar silêncio. Há suporte para os seguintes tipos de silêncio:
  • Leading – Silêncio extra no início do texto. O valor definido é adicionado ao silêncio natural antes do início do texto.
  • Leading-exact – Silêncio no início do texto. O valor é um comprimento absoluto de silêncio.
  • Tailing – Silêncio extra no final do texto. O valor definido é adicionado ao silêncio natural após a última palavra.
  • Tailing-exact – Silêncio no final do texto. O valor é um comprimento absoluto de silêncio.
  • Sentenceboundary – Silêncio extra entre frases adjacentes. O comprimento real do silêncio para esse tipo inclui o silêncio natural após a última palavra na frase anterior, o valor definido para esse tipo e o silêncio natural antes da palavra inicial na próxima frase.
  • Sentenceboundary-exact – Silêncio entre frases adjacentes. O valor é um comprimento absoluto de silêncio.
  • Comma-exact – Silêncio na vírgula no formato de meia largura ou largura total. O valor é um comprimento absoluto de silêncio.
  • Semicolon-exact – Silêncio no ponto e vírgula em formato de meia largura ou largura total. O valor é um comprimento absoluto de silêncio.
  • Enumerationcomma-exact – Silêncio na vírgula de enumeração no formato de largura total. O valor é um comprimento absoluto de silêncio.

Um tipo de silêncio absoluto (com o sufixo -exact) substitui qualquer silêncio natural à esquerda ou à direita. Os tipos de silêncio absoluto têm precedência sobre o tipo não absoluto correspondente. Por exemplo, se você definir os tipos Leading e Leading-exact, o tipo Leading-exact entra em vigor. O evento WordBoundary tem precedência sobre as configurações de silêncio relacionadas à pontuação, incluindo Comma-exact, Semicolon-exact ou Enumerationcomma-exact. Quando você usa as configurações de silêncio relacionadas ao evento WordBoundary e à pontuação, as configurações de silêncio relacionadas à pontuação não têm efeito.
Obrigatório
Value A duração de uma pausa em segundos (como 2s) ou em milissegundos (como 500ms). Os valores válidos variam de 0 a 5000 milissegundos. Se você definir um valor maior que o máximo com suporte, o serviço usa 5000ms. Obrigatório

Exemplos de mstts silence

Os valores com suporte para atributos do elemento mstts:silencejá foram descritos.

Neste exemplo, mstts:silence é usado para adicionar 200 ms de silêncio entre duas 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>

Neste exemplo, mstts:silence é usado para adicionar 50 ms de silêncio na vírgula, 100 ms de silêncio no ponto e vírgula e 150 ms de silêncio na vírgula de enumeração.

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

Especificar parágrafos e frases

Os elementos p e s são usados para indicar parágrafos e frases, respectivamente. Na ausência desses elementos, o serviço de Fala determina automaticamente a estrutura do documento SSML.

Exemplos de parágrafo e frase

O exemplo a seguir define dois parágrafos que contêm frases. No segundo parágrafo, o serviço de Fala determina automaticamente a estrutura da frase, pois ela não é definida no 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 bookmark

Como "estou na 150ª corte nordeste de Redmond Washington."| | bookmark | Nenhum | O texto é falado como o nome de uma pessoa. Depois, você usa o SDK de Fala e assina o evento BookmarkReached para obter o deslocamento de cada marcador no fluxo de áudio. O elemento bookmark não é falado. Para obter mais informações, consulte Inscrever-se em eventos do sintetizador.

O uso dos atributos do elemento bookmark está descrito na tabela a seguir.

Atributo Descrição Obrigatório ou opcional
mark O texto de referência do elemento bookmark. Obrigatório

Exemplos de indicadores

Os valores com suporte para atributos do elemento bookmarkjá foram descritos.

Por exemplo, talvez você queira saber a diferença de tempo de cada palavra indicando uma flor no seguinte snippet:

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

Visema é a descrição visual de um fonema na linguagem falada. Ele define a posição do rosto e da boca enquanto uma pessoa está falando. Você pode usar o elemento mstts:viseme no SSML para solicitar a saída de visema. Para obter mais informações, confira Obter posição facial com o visema.

A configuração de viseme é aplicada a todo o texto de entrada dentro do elemento delimitador voice. Para redefinir ou alterar a configuração de visema novamente, você precisa usar um novo elemento voice com a mesma voz ou uma voz diferente.

O uso dos atributos do elemento viseme está descrito na tabela a seguir.

Atributo Descrição Obrigatório ou opcional
type O tipo de saída do visema.
  • redlips_front – sincronização de LIP com a ID do visema e a saída de deslocamento de áudio
  • FacialExpression – saída das formas de blend
Obrigatório

Observação

No momento, o redlips_front só dá suporte a vozes neurais na localidade en-US e FacialExpression dá suporte a vozes neurais nas localidades en-US e zh-CN.

Exemplos de viseme

Os valores com suporte para atributos do elemento visemejá foram descritos.

Este snippet SSML ilustra como solicitar as formas de blend com a fala 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>

Próximas etapas