Pronúncia com o SSML
Você pode usar o SSML (Speech Synthesis Markup Language) com a conversão de texto em fala para especificar como a fala é pronunciada. Por exemplo, você pode o SSML com fonemas e um léxico personalizado para aprimorar a pronúncia. Você também pode usar o SSML para definir como uma palavra ou uma expressão matemática é pronunciada.
Confira as seções a seguir para obter detalhes de como usar os elementos da SSML, para melhorar a pronúncia. Para obter mais informações sobre a sintaxe SSML, confira Estrutura e eventos de documentos SSML.
Elemento phoneme
O elemento phoneme
é usado para a pronúncia fonética em documentos SSML. Sempre forneça uma fala legível por humanos como um fallback.
Os alfabetos fonéticos são compostos por telefones, que são formados por letras, números ou caracteres, às vezes, em combinação. Cada telefone descreve um som exclusivo da fala. O alfabeto fonético é diferente do alfabeto latino, em que qualquer letra pode representar vários sons falados. Considere as diferentes pronúncias de en-US
da letra "c" nas palavras "candy" e "cease" ou as diferentes pronúncias da combinação de letras "th" nas palavras "thing" e "those".
Observação
Para obter uma lista de localidades que suportam fonemas, consulte as notas de rodapé na tabela suporte a idiomas.
O uso dos atributos do elemento phoneme
está descrito na tabela a seguir.
Atributo | Descrição | Obrigatório ou opcional |
---|---|---|
alphabet |
O alfabeto fonético a ser usado na sintetização da pronúncia da cadeia de caracteres no atributo ph . A cadeia de caracteres que especifica o alfabeto precisa ser indicada em letras minúsculas. As seguintes opções são os possíveis alfabetos que você pode especificar:
O alfabeto só se aplica ao phoneme no elemento. |
Opcional |
ph |
Uma cadeia de caracteres que contém telefones que especificam a pronúncia da palavra no elemento phoneme . Se a cadeia de caracteres especificada contiver telefones não reconhecidos, a conversão de texto em fala rejeitará todo o documento SSML e não produzirá nenhuma saída de fala especificada no documento.Para ipa , para enfatizar uma sílaba colocando o símbolo de acento tônico antes dela, você precisa marcar todas as sílabas da palavra. Ou então, a sílaba anterior a esse símbolo de acento tônico será enfatizada. Para sapi , se você desejar enfatizar uma sílaba, precisará colocar o símbolo de acento tônico após a sílaba, independentemente de as sílabas da palavra estarem marcadas ou não. |
Obrigatório |
exemplos de phoneme
Os valores com suporte para atributos do elemento phoneme
já foram descritos. Nos dois primeiros exemplos, os valores de ph="tə.ˈmeɪ.toʊ"
ou ph="təmeɪˈtoʊ"
são especificados para enfatizar a sílaba meɪ
.
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="en-US">
<voice name="en-US-AvaNeural">
<phoneme alphabet="ipa" ph="tə.ˈmeɪ.toʊ"> tomato </phoneme>
</voice>
</speak>
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="en-US">
<voice name="en-US-AvaNeural">
<phoneme alphabet="ipa" ph="təmeɪˈtoʊ"> tomato </phoneme>
</voice>
</speak>
<speak version="1.0" xmlns="https://www.w3.org/2001/10/synthesis" xml:lang="en-US">
<voice name="en-US-AvaNeural">
<phoneme alphabet="sapi" ph="iy eh n y uw eh s"> en-US </phoneme>
</voice>
</speak>
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="en-US">
<voice name="en-US-AvaNeural">
<s>His name is Mike <phoneme alphabet="ups" ph="JH AU"> Zhou </phoneme></s>
</voice>
</speak>
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="en-US">
<voice name="en-US-AvaNeural">
<phoneme alphabet='x-sampa' ph='he."lou'>hello</phoneme>
</voice>
</speak>
Léxico personalizado
Você pode definir como entidades individuais (como empresa, um termo médico ou um emoji) são lidas no SSML usando os elementos phoneme e sub. Para definir como várias entidades são lidas, crie um arquivo léxico personalizado estruturado em XML. Depois, carregue o arquivo XML de léxico personalizado e faça referência a ele com o elemento SSML lexicon
.
Observação
Para obter uma lista de localidades que suportam léxico personalizado, consulte as notas de rodapé na tabela suporte ao idioma.
O elemento lexicon
não tem suporte na API de Áudio Longo. Para conversão de texto longo em fala, use a API de síntese em lotes (Versão prévia).
O uso dos atributos do elemento lexicon
está descrito na tabela a seguir.
Atributo | Descrição | Obrigatório ou opcional |
---|---|---|
uri |
O URI do arquivo XML de léxico personalizado acessível publicamente com a extensão de arquivo .xml ou .pls . O uso do Armazenamento de Blobs do Azure é recomendado, mas não é obrigatório. Para obter mais informações sobre o arquivo de léxico personalizado, confira PLS (Especificação de Léxico de Pronúncia) versão 1.0. |
Obrigatório |
Exemplos de léxico personalizado
Os valores com suporte para atributos do elemento lexicon
já foram descritos.
Depois de publicar o léxico personalizado, você pode referenciá-lo no seu SSML. O exemplo SSML a seguir faz referência a um léxico personalizado que foi carregado em https://www.example.com/customlexicon.xml
. Damos suporte a URLs léxicos do Armazenamento de Blobs do Azure, do Armazenamento de AMS (Serviços de Mídia Avançados) e do GitHub. No entanto, observe que outras URLs públicas podem não ser compatíveis.
<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">
<lexicon uri="https://www.example.com/customlexicon.xml"/>
BTW, we will be there probably at 8:00 tomorrow morning.
Could you help leave a message to Robert Benigni for me?
</voice>
</speak>
Arquivo de léxico personalizado
Para definir como várias entidades são lidas, você pode defini-las em um arquivo XML de léxico personalizado com a extensão de arquivo .xml
ou .pls
.
Observação
O arquivo de léxico personalizado é um documento XML válido, mas não pode ser usado como um documento SSML.
Veja algumas limitações do arquivo de léxico personalizado:
- Tamanho do arquivo: o tamanho do arquivo de léxico personalizado é limitado ao máximo de 100 KB. Se o tamanho do arquivo exceder o limite de 100 KB, a solicitação de síntese falhará. Você pode dividir seu léxico em vários léxicos e incluí-los no SSML se o tamanho do arquivo exceder 100 KB.
- Atualização do cache do léxico: o léxico personalizado é armazenado em cache com o URI como a chave na conversão de texto em fala quando ele é carregado pela primeira vez. O léxico com o mesmo URI não é recarregado dentro de 15 minutos, portanto, a alteração de léxico personalizado precisa aguardar 15 minutos no máximo para entrar em vigor.
Os elementos e os atributos com suporte de um arquivo XML de léxico personalizado estão descritos na PLS (Especificação do Léxico de Pronúncia) versão 1.0. Veja alguns exemplos dos elementos e atributos com suporte:
- O elemento
lexicon
contém, no mínimo, um elementolexeme
. O léxico contém o atributoxml:lang
necessário para indicar a localidade a qual ele deve ser aplicado. Um léxico personalizado é limitado a uma localidade; portanto, se você aplicá-lo a uma localidade diferente, ela não funcionará. O elementolexicon
também tem um atributoalphabet
para indicar o alfabeto usado no léxico. Os valores possíveis sãoipa
ex-microsoft-sapi
. - Cada elemento
lexeme
contém, pelo menos, um elementographeme
e um ou mais elementosgrapheme
,alias
ephoneme
. O elementolexeme
diferencia maiúsculas de minúsculas no léxico personalizado. Por exemplo, caso forneça um fonema apenas para olexeme
“Hello”, ele não funcionará para olexeme
“hello”. - O elemento
grapheme
contém um texto que descreve a ortografia. - Os elementos
alias
são usados para indicar a pronúncia de um acrônimo ou um termo abreviado. - O elemento
phoneme
fornece um texto que descreve como olexeme
é pronunciado. O limite de sílaba é '.' no alfabeto IPA. O elementophoneme
não pode conter espaços em branco quando o alfabeto IPA é usado. - Quando os elementos
alias
ephoneme
são fornecidos com o mesmo elementographeme
, oalias
tem prioridade mais alta.
A Microsoft fornece uma ferramenta de validação para o léxico personalizado que ajuda você a encontrar erros (com mensagens de erro detalhadas) no arquivo de léxico personalizado. O uso da ferramenta é recomendado para usar o arquivo XML de léxico personalizado em produção com o serviço de Fala.
Exemplos de arquivo de léxico personalizado
O exemplo XML a seguir (não SSML) estaria contido em um arquivo de léxico personalizado .xml
. Quando você usa esse léxico personalizado, "BTW" é lido como "By the way". "Benigni" é lido com o IPA fornecido "bɛˈniːnji".
<?xml version="1.0" encoding="UTF-8"?>
<lexicon version="1.0"
xmlns="http://www.w3.org/2005/01/pronunciation-lexicon"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.w3.org/2005/01/pronunciation-lexicon
http://www.w3.org/TR/2007/CR-pronunciation-lexicon-20071212/pls.xsd"
alphabet="ipa" xml:lang="en-US">
<lexeme>
<grapheme>BTW</grapheme>
<alias>By the way</alias>
</lexeme>
<lexeme>
<grapheme>Benigni</grapheme>
<phoneme>bɛˈniːnji</phoneme>
</lexeme>
<lexeme>
<grapheme>😀</grapheme>
<alias>test emoji</alias>
</lexeme>
</lexicon>
Não é possível definir diretamente a pronúncia de uma frase usando o léxico personalizado. Caso precise definir a pronúncia de um acrônimo ou um termo abreviado, primeiro, forneça um alias
e associe o phoneme
a esse alias
. Por exemplo:
<?xml version="1.0" encoding="UTF-8"?>
<lexicon version="1.0"
xmlns="http://www.w3.org/2005/01/pronunciation-lexicon"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.w3.org/2005/01/pronunciation-lexicon
http://www.w3.org/TR/2007/CR-pronunciation-lexicon-20071212/pls.xsd"
alphabet="ipa" xml:lang="en-US">
<lexeme>
<grapheme>Scotland MV</grapheme>
<alias>ScotlandMV</alias>
</lexeme>
<lexeme>
<grapheme>ScotlandMV</grapheme>
<phoneme>ˈskɒtlənd.ˈmiːdiəm.weɪv</phoneme>
</lexeme>
</lexicon>
Você também pode fornecer diretamente o alias
esperado para o acrônimo ou o termo abreviado. Por exemplo:
<lexeme>
<grapheme>Scotland MV</grapheme>
<alias>Scotland Media Wave</alias>
</lexeme>
Os exemplos de arquivo XML de léxico personalizado anteriores usam o alfabeto IPA, que também é conhecido como o conjunto de telefone IPA. Sugerimos que você use o IPA, pois ele é o padrão internacional. Para alguns caracteres do IPA, há a versão "pré-composta" e "decomposta" quando eles são representados com Unicode. O léxico personalizado só dá suporte ao Unicode decomposto.
O serviço de Fala define um conjunto fonético para essas localidades: en-US
, fr-FR
, de-DE
, es-ES
, ja-JP
, zh-CN
, zh-HK
e zh-TW
. Para obter mais informações sobre o alfabeto fonético detalhado do serviço de Fala, confira os Conjuntos fonéticos do serviço de Fala.
Use o x-microsoft-sapi
como o valor para o atributo alphabet
com léxicos personalizados, conforme demonstrado aqui:
<?xml version="1.0" encoding="UTF-8"?>
<lexicon version="1.0"
xmlns="http://www.w3.org/2005/01/pronunciation-lexicon"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.w3.org/2005/01/pronunciation-lexicon
http://www.w3.org/TR/2007/CR-pronunciation-lexicon-20071212/pls.xsd"
alphabet="x-microsoft-sapi" xml:lang="en-US">
<lexeme>
<grapheme>BTW</grapheme>
<alias> By the way </alias>
</lexeme>
<lexeme>
<grapheme> Benigni </grapheme>
<phoneme> b eh 1 - n iy - n y iy </phoneme>
</lexeme>
</lexicon>
Elemento say-as
O elemento say-as
indica o tipo de conteúdo, como número ou data, do texto do elemento. Esse elemento fornece diretrizes ao mecanismo de sintetização de voz de como pronunciar o texto.
O uso dos atributos do elemento say-as
está descrito na tabela a seguir.
Atributo | Descrição | Obrigatório ou opcional |
---|---|---|
interpret-as |
Indica o tipo de conteúdo do texto do elemento. Para ver uma lista de tipos, confira a tabela a seguir. | Obrigatório |
format |
Fornece informações adicionais sobre a formatação exata do texto do elemento para tipos de conteúdo que podem ter formatos ambíguos. A SSML define formatos para tipos de conteúdo que os usam. Confira a tabela a seguir. | Opcional |
detail |
Indica o nível de detalhe a ser falado. Por exemplo, esse atributo pode solicitar ao mecanismo de sintetização de voz que pronuncie sinais de pontuação. Não há valores padrão definidos para detail . |
Opcional |
Os tipos de conteúdo a seguir são compatíveis com os atributos interpret-as
e format
. Inclua o atributo format
somente se a coluna format
não estiver vazia nesta tabela.
Observação
Os valores characters
e spell-out
para o atributo interpret-as
são suportados para todas as localidades de conversão de texto em fala.
Outros valores de atributos interpret-as
são suportados para todas as localidades dos seguintes idiomas: árabe, catalão, chinês, dinamarquês, holandês, inglês, francês, finlandês, alemão, hindi, italiano, japonês, coreano, norueguês, polonês, português, russo, espanhol, e sueco.
interpret-as | format | Interpretação |
---|---|---|
characters , spell-out |
O texto é falado como letras individuais (soletrado). O mecanismo de sintetização de voz pronuncia:<say-as interpret-as="characters">test</say-as> Como "T E S T". |
|
cardinal , number |
Nenhum | O texto é falado como um número cardinal. O mecanismo de sintetização de voz pronuncia:There are <say-as interpret-as="cardinal">10</say-as> options Como "Há dez opções". |
ordinal |
Nenhum | O texto é falado como um número ordinal. O mecanismo de sintetização de voz pronuncia:Select the <say-as interpret-as="ordinal">3rd</say-as> option Como "Selecione a terceira opção". |
number_digit |
Nenhum | O texto é falado como uma sequência de dígitos individuais. O mecanismo de sintetização de voz pronuncia:<say-as interpret-as="number_digit">123456789</say-as> Como "1 2 3 4 5 6 7 8 9". |
fraction |
Nenhum | O texto é falado como um número fracionário. O mecanismo de sintetização de voz pronuncia:<say-as interpret-as="fraction">3/8</say-as> of an inch Como "três oitavos de uma polegada". |
date |
dmy, mdy, ymd, ydm, ym, my, md, dm, d, m, y | O texto é falado como uma data. O atributo format especifica o formato da data (d = dia, m = mês e y = ano). O mecanismo de sintetização de voz pronuncia:Today is <say-as interpret-as="date">10-12-2016</say-as> Como "Hoje é doze de outubro de dois mil e dezesseis." Pronuncia: Today is <say-as interpret-as="date" format="dmy">10-12-2016</say-as> Como "Hoje é dez de dezembro de dois mil e dezesseis." |
time |
hms12, hms24 | O texto é falado como uma hora. O atributo format especifica se a hora é especificada com um relógio de 12 horas (hms12) ou um relógio de 24 horas (hms24). Use dois-pontos para separar números que representam horas, minutos e segundos. Estes são alguns exemplos de horas válidos: 12:35, 1:14:32, 08:15 e 02:50:45. O mecanismo de sintetização de voz pronuncia:The train departs at <say-as interpret-as="time" format="hms12">4:00am</say-as> Como "O trem sairá às quatro da manhã". |
duration |
hms, hm, ms | O texto é falado como uma duração. O atributo format especifica o formato da duração (h=hora, m=minuto e s=segundo). O mecanismo de sintetização de voz pronuncia:<say-as interpret-as="duration">01:18:30</say-as> Como "uma hora, dezoito minutos e trinta segundos". Pronuncia: <say-as interpret-as="duration" format="ms">01:18</say-as> Como "um minuto e dezoito segundos". Essa marca só tem suporte em inglês e espanhol. |
telephone |
Nenhum | O texto é falado como um número de telefone. O mecanismo de sintetização de voz pronuncia:The number is <say-as interpret-as="telephone">(888) 555-1212</say-as> Como "Meu número é código de área oito oito oito cinco cinco cinco um dois um dois". |
currency |
Nenhum | O texto é falado como uma moeda. O mecanismo de sintetização de voz pronuncia:<say-as interpret-as="currency">99.9 USD</say-as> Como "noventa e nove dólares americanos e noventa centavos". |
address |
Nenhum | O texto é falado como um endereço. O mecanismo de sintetização de voz pronuncia:I'm at <say-as interpret-as="address">150th CT NE, Redmond, WA</say-as> Como "Estou em 150th Court Northeast, em Redmond, Washington". |
name |
Nenhum | O texto é falado como um nome de pessoa. O mecanismo de sintetização de voz pronuncia:<say-as interpret-as="name">ED</say-as> Como [æd]. Em nomes chineses, alguns caracteres são pronunciados de forma diferente quando aparecem em um nome de família. Por exemplo, o mecanismo de síntese de fala diz 仇 em <say-as interpret-as="name">仇先生</say-as> Como [qiú] em vez de [chóu]. |
Exemplos de say-as
Os valores com suporte para atributos do elemento say-as
já foram descritos.
O mecanismo de sintetização de voz fala o exemplo a seguir como "Sua primeira solicitação foi de um quarto em dezenove de outubro de dois mil e dez com chegada antecipada às doze e trinta e cinco".
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="en-US">
<voice name="en-US-AvaMultilingualNeural">
<p>
Your <say-as interpret-as="ordinal"> 1st </say-as> request was for <say-as interpret-as="cardinal"> 1 </say-as> room
on <say-as interpret-as="date" format="mdy"> 10/19/2010 </say-as>, with early arrival at <say-as interpret-as="time" format="hms12"> 12:35pm </say-as>.
</p>
</voice>
</speak>
Elemento sub
Use o elemento sub
para indicar que o valor de texto do atributo de alias deve ser pronunciado em vez do texto delimitado do elemento. Assim, o SSML contém um formulário falado e um escrito.
O uso dos atributos do elemento sub
está descrito na tabela a seguir.
Atributo | Descrição | Obrigatório ou opcional |
---|---|---|
alias |
O valor de texto que deve ser pronunciado em vez do texto delimitado do elemento. | Obrigatório |
Exemplos de sub
Os valores com suporte para atributos do elemento sub
já foram descritos.
O mecanismo de síntese de fala pronuncia o exemplo a seguir como "World Wide Web Consortium".
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="en-US">
<voice name="en-US-AvaMultilingualNeural">
<sub alias="World Wide Web Consortium">W3C</sub>
</voice>
</speak>
Pronúncia com o MathML
O MathML (Mathematical Markup Language) é uma linguagem de marcação compatível com XML que descreve o conteúdo e a estrutura matemáticos. O serviço de Fala pode usar o MathML como texto de entrada para pronunciar notações matemáticas corretamente no áudio de saída.
Observação
Atualmente, os elementos MathML (tags) têm suporte nas seguintes localidades: de-DE
, en-AU
, en-GB
, en-US
, es-ES
, es-MX
, fr-CA
, fr-FR
, it-IT
, ja-JP
, ko-KR
, pt-BR
e zh-CN
.
Todos os elementos das especificações MathML 2.0 e MathML 3.0 têm suporte, exceto os elementos de matemática elementar.
Anote estes elementos e atributos MathML:
- O atributo
xmlns
em<math xmlns="http://www.w3.org/1998/Math/MathML">
é opcional. - Os elementos
semantics
,annotation
eannotation-xml
não geram fala, portanto, são ignorados. - Se um elemento não for reconhecido, ele será ignorado e os elementos filho dentro dele ainda serão processados.
A sintaxe XML não dá suporte às entidades MathML; portanto, você deve usar os caracteres unicode correspondentes para representar as entidades, por exemplo, a entidade ©
deve ser representada por seus caracteres unicode ©
, caso contrário, ocorrerá um erro.
Exemplos de MathML
A saída da conversão de texto em fala para este exemplo é "a ao quadrado mais b ao quadrado é igual a c ao quadrado".
<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-JennyNeural'>
<math xmlns='http://www.w3.org/1998/Math/MathML'>
<msup>
<mi>a</mi>
<mn>2</mn>
</msup>
<mo>+</mo>
<msup>
<mi>b</mi>
<mn>2</mn>
</msup>
<mo>=</mo>
<msup>
<mi>c</mi>
<mn>2</mn>
</msup>
</math>
</voice>
</speak>