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.
Observação
Além das vozes neurais do Fala de IA do Azure (não HD), você também pode usar vozes em alta definição (HD) do Fala de IA do Azure e vozes neurais (HD e não HD) do OpenAI do Azure. As vozes HD fornecem uma qualidade mais alta para cenários mais versáteis.
Algumas vozes não dão suporte a todas as tags de Linguagem de Marcação de Síntese de Fala (SSML). Isso inclui vozes neurais HD de conversão de texto em fala, vozes pessoais e vozes incorporadas.
- Para as vozes em alta definição (HD) do Fala de IA do Azure, confira o suporte a SSML aqui.
- Para a voz pessoal, você pode encontrar o suporte a SSML aqui.
- Para as vozes incorporadas, confira o suporte a SSML aqui.
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 elementoaudio
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 elementoaudio
também pode conter um texto e os seguintes elementos:audio
,break
,p
,s
,phoneme
,prosody
,say-as
esub
.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
esub
.lang
: esse elemento pode conter todos os outros elementos, excetomstts:backgroundaudio
,voice
espeak
.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
esub
.mstts:express-as
: esse elemento pode conter texto e os seguintes elementos:audio
,break
,emphasis
,lang
,phoneme
,prosody
,say-as
esub
.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
es
.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
es
.s
: esse elemento pode conter texto e os seguintes elementos:audio
,break
,phoneme
,prosody
,say-as
,mstts:express-as
esub
.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
evoice
.voice
: esse elemento pode conter todos os outros elementos, excetomstts:backgroundaudio
espeak
.
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 &
no lugar de &
, usar <
no lugar de <
e usar >
no lugar de >
. Caso contrário, o SSML não é analisado corretamente.
Por exemplo, especifique green & 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 & 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 speak
já 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:
|
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 20.000 milissegundos. Se você definir um valor maior que o máximo com suporte, o serviço usa 20000ms . 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 break
já 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:
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 20.000 milissegundos. Se você definir um valor maior que o máximo com suporte, o serviço usa 20000ms . |
Obrigatório |
Exemplos de mstts silence
Os valores com suporte para atributos do elemento mstts:silence
já 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 bookmark
já 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.
|
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 viseme
já 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>