Estrutura e eventos do documento SSML

A SSML (Speech Synthesis Markup Language) com texto de entrada determina a estrutura, o conteúdo e outras características da saída de texto para fala. Por exemplo, você pode usar SSML para definir um parágrafo, uma frase, uma pausa ou silêncio. Você pode quebrar o texto com tags de evento, como marcador ou viseme, que podem ser processadas posteriormente pelo seu aplicativo.

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

Estrutura dos documentos

A implementação do serviço de fala do SSML é baseada na Speech Synthesis Markup Language Versão 1.0 do World Wide Web Consortium. Os elementos suportados pelo Speech podem diferir do padrão W3C.

Cada documento SSML é criado com elementos ou tags SSML. Esses elementos são usados para ajustar a voz, estilo, tom, prosódia, volume e muito mais.

Aqui está um subconjunto da estrutura básica e sintaxe 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údos permitidos em cada elemento são descritos na lista a seguir:

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

O serviço de Fala lida automaticamente com a pontuação conforme apropriado, como pausar após um período ou usar a entonação correta quando uma frase termina com um ponto de interrogação.

Carateres especiais

Para usar os caracteres &, <e > dentro do valor ou texto do elemento SSML, você deve usar 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 será analisado corretamente.

Por exemplo, especifique green &amp; yellow em vez de green & yellow. O SSML a seguir é 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, devem ser escapados. Para obter mais informações, consulte Extensible Markup Language (XML) 1.0: Apêndice D.

As aspas duplas ou simples devem incluir os valores dos atributos. Por exemplo, <prosody volume="90"> e são elementos bem formados e <prosody volume='90'> válidos, mas <prosody volume=90> não são reconhecidos.

Falar elemento raiz

O speak elemento contém informações como versão, idioma e definição de vocabulário de marcação. O speak elemento é o elemento raiz necessário para todos os documentos SSML. Você deve especificar o idioma padrão dentro do speak elemento , quer o idioma seja ou não ajustado em outro lugar, como dentro do lang elemento .

Aqui está a sintaxe do speak elemento :

<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="string"></speak>
Atributo Description 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". Necessá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). Necessário
xmlns O URI para o documento que define o vocabulário de marcação (os tipos de elementos e nomes de atributos) do documento SSML. O URI atual é "http://www.w3.org/2001/10/synthesis". Necessário

O speak elemento deve conter pelo menos um elemento voice.

falar exemplos

Os valores suportados para atributos do speak elemento foram descritos anteriormente.

Exemplo de voz única

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

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

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

Atributo Description Obrigatório ou opcional
strength A duração relativa de uma pausa usando um dos seguintes valores:
  • x-fraco
  • fraco
  • médio (padrão)
  • forte
  • x-forte
Opcional
time A duração absoluta de uma pausa em segundos (como 2s) ou milissegundos (como 500ms). Os valores válidos variam de 0 a 20000 milissegundos. Se você definir um valor maior do que o máximo suportado, o serviço usará 20000ms. Se o time atributo estiver definido, ele strength será ignorado. Opcional

Aqui estão mais detalhes sobre o strength atributo.

Ponto Forte Duração relativa
X-fraco 250 ms
Semana 500 ms
Médio 750 ms
Forte 1.000 ms
X-forte 1.250 ms

Exemplos de quebra

Os valores suportados para atributos do break elemento foram descritos anteriormente. As três maneiras a seguir adicionam intervalos 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 para inserir pausas antes ou depois do mstts:silence texto, ou entre duas frases adjacentes.

Uma das diferenças entre mstts:silence e break é que um break elemento pode ser inserido em qualquer lugar do texto. O silêncio só funciona no início ou no fim 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 de seu elemento de delimitação voice . Para redefinir ou alterar a configuração de silêncio novamente, você deve usar um novo voice elemento com a mesma voz ou uma voz diferente.

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

Atributo Description Obrigatório ou opcional
type Especifica onde e como adicionar silêncio. Os seguintes tipos de silêncio são suportados:
  • 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 de silêncio absoluto.
  • Tailing – Silêncio extra no final do texto. O valor que você define é adicionado ao silêncio natural após a última palavra.
  • Tailing-exact – Silêncio no final do texto. O valor é um comprimento de silêncio absoluto.
  • Sentenceboundary – Silêncio extra entre frases adjacentes. A duração real do silêncio para este tipo inclui o silêncio natural após a última palavra na frase anterior, o valor definido para este tipo e o silêncio natural antes da palavra inicial na frase seguinte.
  • Sentenceboundary-exact – Silêncio entre frases adjacentes. O valor é um comprimento de silêncio absoluto.
  • Comma-exact – Silêncio na vírgula em formato de meia largura ou largura total. O valor é um comprimento de silêncio absoluto.
  • Semicolon-exact – Silêncio no ponto e vírgula em formato de meia largura ou largura total. O valor é um comprimento de silêncio absoluto.
  • Enumerationcomma-exact – Silêncio na vírgula de enumeração em formato de largura total. O valor é um comprimento de silêncio absoluto.

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

Exemplos de silêncio do MSTTS

Os valores suportados para atributos do mstts:silence elemento foram descritos anteriormente.

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 p elementos e s são usados para denotar 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ágrafos e frases

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 das frases, uma vez que elas não estão definidas 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

Você pode usar o bookmark elemento no SSML para fazer referência a um local específico na sequência de texto ou marca. Em seguida, use o SDK de fala e inscreva-se no BookmarkReached evento para obter o deslocamento de cada marcador no fluxo de áudio. O bookmark elemento não é falado. Para obter mais informações, consulte Inscrever-se em eventos de sintetizador.

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

Atributo Description Obrigatório ou opcional
mark O texto de referência do bookmark elemento. Necessário

Exemplos de marcadores

Os valores suportados para atributos do bookmark elemento foram descritos anteriormente.

Como exemplo, você pode querer saber o deslocamento de tempo de cada palavra de flor no seguinte trecho:

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

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

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

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

Atributo Description Obrigatório ou opcional
type O tipo de saída de viseme.
  • redlips_front – lip-sync com viseme ID e saída de compensação de áudio
  • FacialExpression – saída de formas de mistura
Necessário

Nota

Atualmente, redlips_front suporta apenas vozes neurais em en-US localidade e FacialExpression suporta vozes neurais em en-US e zh-CN localidades.

Exemplos de Viseme

Os valores suportados para atributos do viseme elemento foram descritos anteriormente.

Este trecho SSML ilustra como solicitar formas de mesclagem com sua 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óximos passos