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 elemento lexeme. O léxico contém o atributo xml: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 elemento lexicon também tem um atributo alphabet para indicar o alfabeto usado no léxico. Os valores possíveis são ipa e x-microsoft-sapi.
  • Cada elemento lexeme contém, pelo menos, um elemento grapheme e um ou mais elementos grapheme, alias e phoneme. O elemento lexeme diferencia maiúsculas de minúsculas no léxico personalizado. Por exemplo, caso forneça um fonema apenas para o lexeme “Hello”, ele não funcionará para o lexeme “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 o lexeme é pronunciado. O limite de sílaba é '.' no alfabeto IPA. O elemento phoneme não pode conter espaços em branco quando o alfabeto IPA é usado.
  • Quando os elementos alias e phoneme são fornecidos com o mesmo elemento grapheme, o alias 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-asjá 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 subjá 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 e annotation-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 &copy; deve ser representada por seus caracteres unicode &#x00A9;, 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>

Próximas etapas