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.
Nota
Além das vozes neurais (não HD) do Azure AI Speech, você também pode usar vozes de alta definição (HD) do Azure AI Speech e vozes neurais do Azure OpenAI (HD e não HD). As vozes HD proporcionam uma qualidade superior para cenários mais versáteis.
Algumas vozes não suportam todas as tags SSML (Speech Synthesis Markup Language). Isso inclui texto neural para fala vozes HD, vozes pessoais e vozes incorporadas.
- Para vozes de alta definição (HD) do Azure AI Speech, verifique o suporte do SSML aqui.
- Para voz pessoal, você pode encontrar o suporte SSML aqui.
- Para vozes incorporadas, verifique o suporte a SSML aqui.
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 deaudio
áudio não estiver disponível ou não puder ser reproduzido. Oaudio
elemento também pode conter texto e os seguintes elementos:audio
,break
,p
,s
,phoneme
,prosody
,say-as
esub
.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-as
esub
.lang
: Este elemento pode conter todos os outros elementos, excetomstts:backgroundaudio
,voice
espeak
.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-as
esub
.mstts:express-as
: Este elemento pode conter texto e os seguintes elementos:audio
,break
,emphasis
,lang
,phoneme
,prosody
,say-as
esub
.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-as
es
.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
,sub
es
.s
: Este elemento pode conter texto e os seguintes elementos:audio
,break
,phoneme
,prosody
,say-as
,mstts:express-as
esub
.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
evoice
.voice
: Este elemento pode conter todos os outros elementos, excetomstts:backgroundaudio
espeak
.
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 &
no lugar de &
, usar <
no lugar de <
, e usar >
no lugar de >
. Caso contrário, o SSML não será analisado corretamente.
Por exemplo, especifique green & 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 & 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:
|
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:
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-exact ou 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.
|
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>