Pronúncia com SSML

Você pode usar a SSML (Speech Synthesis Markup Language) com conversão de texto em fala para especificar como a fala é pronunciada. Por exemplo, você pode usar SSML com fonemas e um léxico personalizado para melhorar a pronúncia. Você também pode usar SSML para definir como uma palavra ou expressão matemática é pronunciada.

Consulte as seções a seguir para obter detalhes sobre como usar elementos SSML para melhorar a pronúncia. Para obter mais informações sobre a sintaxe SSML, consulte Estrutura e eventos do documento SSML.

elemento fonema

O phoneme elemento é usado para pronúncia fonética em documentos SSML. Forneça sempre uma fala legível por humanos como um fallback.

Os alfabetos fonéticos são compostos por telefones, que são compostos por letras, números ou caracteres, às vezes em combinação. Cada telefone descreve um som de fala único. O alfabeto fonético contrasta com o alfabeto latino, onde qualquer letra pode representar vários sons falados. Considere as diferentes en-US pronúncias da letra "c" nas palavras "doce" e "cessar" ou as diferentes pronúncias da combinação de letras "th" nas palavras "coisa" e "aquelas".

Nota

Para obter uma lista de localidades que suportam fonemas, consulte notas de rodapé na tabela de suporte de idioma.

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

Atributo Description Obrigatório ou opcional
alphabet O alfabeto fonético a ser usado quando você sintetiza a pronúncia da cadeia de caracteres no ph atributo. A cadeia de caracteres que especifica o alfabeto deve ser especificada em letras minúsculas. As opções a seguir são os alfabetos possíveis que você pode especificar:
O alfabeto aplica-se apenas ao phoneme elemento in.
Opcional
ph Uma cadeia de caracteres que contém telefones que especificam a pronúncia da palavra no phoneme elemento . 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 das saídas de fala especificadas no documento.

Para ipa, para acentuar uma sílaba colocando o símbolo de tensão antes desta sílaba, você precisa marcar todas as sílabas para a palavra. Ou então, a sílaba antes deste símbolo de tónica é sublinhada. Para sapi, se você quiser acentuar uma sílaba, você precisa colocar o símbolo de ênfase após essa sílaba, quer todas as sílabas da palavra estejam marcadas ou não.
Necessário

Exemplos de fonemas

Os valores suportados para atributos do phoneme elemento foram descritos anteriormente. Nos dois primeiros exemplos, os valores de ph="tə.ˈmeɪ.toʊ" ou ph="təmeɪˈtoʊ" são especificados para acentuar meɪa sílaba.

<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 o fonema e os subelementos. Para definir como várias entidades são lidas, crie um arquivo de léxico personalizado estruturado XML. Em seguida, carregue o arquivo XML do léxico personalizado e faça referência a ele com o elemento SSML lexicon .

Nota

Para obter uma lista de localidades que oferecem suporte ao léxico personalizado, consulte as notas de rodapé na tabela de suporte a idiomas.

O lexicon elemento não é suportado pela API Long Audio. Para conversão de texto em fala de forma longa, use a API de síntese em lote (Visualização).

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

Atributo Description Obrigatório ou opcional
uri O URI do arquivo XML de léxico personalizado acessível publicamente com a .xml extensão ou .pls arquivo. 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, consulte Pronunciation Lexicon Specification (PLS) Version 1.0. Necessário

Exemplos de léxicos personalizados

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

Depois de publicar seu léxico personalizado, você pode consultá-lo a partir do SSML. O exemplo SSML a seguir faz referência a um léxico personalizado que foi carregado para o https://www.example.com/customlexicon.xml. Suportamos URLs de léxico do Armazenamento de Blobs do Azure, do Armazenamento AMS (Serviços Avançados de Multimédia) e do GitHub. No entanto, observe que outros URLs públicos 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 .xml extensão ou .pls arquivo.

Nota

O arquivo de léxico personalizado é um documento XML válido, mas não pode ser usado como um documento SSML.

Aqui estão algumas limitações do arquivo de léxico personalizado:

  • Tamanho do ficheiro: O tamanho do ficheiro léxico personalizado está limitado a um 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 no texto para fala quando é carregado pela primeira vez. O léxico com o mesmo URI não é recarregado em 15 minutos, portanto, a alteração do léxico personalizado precisa esperar no máximo 15 minutos para entrar em vigor.

Os elementos e atributos suportados de um arquivo XML de léxico personalizado são descritos na Especificação de Léxico de Pronúncia (PLS) Versão 1.0. Aqui estão alguns exemplos dos elementos e atributos suportados:

  • O lexicon elemento contém pelo menos um lexeme elemento . O léxico contém o atributo necessário xml:lang para indicar para qual localidade ele deve ser solicitado. Um léxico personalizado é limitado a uma localidade por design, portanto, se você aplicá-lo para uma localidade diferente, ele não funcionará. O lexicon elemento também tem um alphabet atributo para indicar o alfabeto usado no léxico. Os valores possíveis são ipa e x-microsoft-sapi.
  • Cada lexeme elemento contém pelo menos um grapheme elemento e um ou mais graphemeelementos , aliase phoneme . O lexeme elemento diferencia maiúsculas de minúsculas no léxico personalizado. Por exemplo, se você fornecer apenas um fonema para o lexeme "Olá", ele não funcionará para o lexeme "Olá".
  • O grapheme elemento contém texto que descreve a ortografia.
  • Os alias elementos são utilizados para indicar a pronúncia de um acrónimo ou de um termo abreviado.
  • O phoneme elemento fornece texto que descreve como o lexeme é pronunciado. O limite da sílaba é '.' no alfabeto IPA. O phoneme elemento não pode conter espaço em branco quando você usa o alfabeto IPA.
  • Quando os alias elementos e phoneme são fornecidos com o mesmo grapheme elemento, alias tem maior prioridade.

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. Recomenda-se o uso da ferramenta antes de usar o arquivo XML do léxico personalizado em produção com o serviço de fala.

Exemplos de ficheiros de léxicos personalizados

O exemplo XML a seguir (não SSML) estaria contido em um arquivo de léxico .xml personalizado. 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. Se você precisar definir a pronúncia para um acrônimo ou um termo abreviado, primeiro forneça um aliase, em seguida, associe o phoneme com 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 que espera alias para a sigla ou 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 conjunto de telefones IPA. Sugerimos que você use o IPA porque é o padrão internacional. Para alguns caracteres IPA, eles são a versão "pré-composta" e "decomposta" quando estão sendo representados com Unicode. O léxico personalizado suporta apenas o Unicode decomposto.

O serviço de Fala define um conjunto fonético para estas localidades: en-US, fr-FR, de-DE, es-ES, ja-JP, zh-CN, zh-HKe zh-TW. Para obter mais informações sobre o alfabeto fonético detalhado do serviço de fala, consulte os conjuntos fonéticos do serviço de fala.

Você pode usar o como o valor para o alphabet atributo com léxicos personalizados, x-microsoft-sapi 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 say-as elemento indica o tipo de conteúdo, como número ou data, do texto do elemento. Este elemento fornece orientação para o mecanismo de síntese de fala sobre como pronunciar o texto.

O uso dos atributos do say-as elemento é descrito na tabela a seguir.

Atributo Description Obrigatório ou opcional
interpret-as Indica o tipo de conteúdo do texto de um elemento. Para obter uma lista de tipos, consulte a tabela a seguir. Necessário
format Fornece informações adicionais sobre a formatação precisa do texto do elemento para tipos de conteúdo que podem ter formatos ambíguos. O SSML define formatos para tipos de conteúdo que os utilizam. Consulte a seguinte tabela. Opcional
detail Indica o nível de detalhe a ser falado. Por exemplo, esse atributo pode solicitar que o mecanismo de síntese de fala pronuncie sinais de pontuação. Não existem valores padrão definidos para detail. Opcional

Os seguintes tipos de conteúdo são suportados para os interpret-as atributos e format . Inclua o atributo somente se format a format coluna não estiver vazia nesta tabela.

Nota

Os characters valores e spell-out para o atributo são suportados interpret-as para todas as localidades de texto para fala. Outros interpret-as valores de atributo 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.

interpretar-como format Interpretação
characters, spell-out O texto é falado como letras individuais (soletradas). O motor de síntese de fala pronuncia:

<say-as interpret-as="characters">test</say-as>

Como "T E S T."
cardinal, number Nenhuma O texto é falado como um número cardinal. O motor de síntese de fala pronuncia:

There are <say-as interpret-as="cardinal">10</say-as> options

Como "Há dez opções".
ordinal Nenhuma O texto é falado como um número ordinal. O motor de síntese de fala pronuncia:

Select the <say-as interpret-as="ordinal">3rd</say-as> option

Como "Selecione a terceira opção".
number_digit Nenhuma O texto é falado como uma sequência de dígitos individuais. O motor de síntese de fala pronuncia:

<say-as interpret-as="number_digit">123456789</say-as>

Como "1 2 3 4 5 6 7 8 9."
fraction Nenhuma O texto é falado como um número fracionário. O motor de síntese de fala pronuncia:

<say-as interpret-as="fraction">3/8</say-as> of an inch

Como "três oitavos de polegada".
date dmy, mdy, ymd, ydm, ym, m, md, dm, d, m, y O texto é falado como uma data. O format atributo especifica o formato da data (d=dia, m=mês e y=ano). O motor de síntese de fala pronuncia:

Today is <say-as interpret-as="date">10-12-2016</say-as>

Como "Hoje é duodécimo 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 dois mil e dezesseis".
time HMS12, HMS24 O texto é falado como um tempo. O format atributo especifica se a hora é especificada usando 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. Aqui estão alguns exemplos de tempo válidos: 12:35, 1:14:32, 08:15 e 02:50:45. O motor de síntese de fala pronuncia:

The train departs at <say-as interpret-as="time" format="hms12">4:00am</say-as>

Como "O comboio parte às quatro A M."
duration HMS, HM, EM O texto é falado como uma duração. O format atributo especifica o formato da duração (h=hora, m=minuto e s=segundo). O motor de síntese de fala 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".
Esta tag só é suportada em inglês e espanhol.
telephone Nenhuma O texto é falado como um número de telefone. O motor de síntese de fala pronuncia:

The number is <say-as interpret-as="telephone">(888) 555-1212</say-as>

Como "Meu número é o código de área oito oito oito cinco cinco cinco um dois um dois."
currency Nenhuma O texto é falado como uma moeda. O motor de síntese de fala pronuncia:

<say-as interpret-as="currency">99.9 USD</say-as>

Como "noventa e nove dólares americanos e noventa centavos".
address Nenhuma O texto é falado como um endereço. O motor de síntese de fala pronuncia:

I'm at <say-as interpret-as="address">150th CT NE, Redmond, WA</say-as>

Como "Estou na 150ª Corte, Nordeste de Redmond, Washington."
name Nenhuma O texto é falado como o nome de uma pessoa. O motor de síntese de fala pronuncia:

<say-as interpret-as="name">ED</say-as>

Como [æd].
Em nomes chineses, alguns caracteres pronunciam de forma diferente quando aparecem em um nome de família. Por exemplo, o motor de síntese de fala diz 仇 em

<say-as interpret-as="name">仇先生</say-as>

Como [qiú] em vez de [chóu].

diga-as como exemplos

Os valores suportados para atributos do say-as elemento foram descritos anteriormente.

O mecanismo de síntese de fala fala o seguinte exemplo: "Seu primeiro pedido foi para uma sala em dezenove de outubro vinte e dez com chegada antecipada às doze e trinta e cinco da tarde."

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

subelemento

Use o sub elemento para indicar que o valor de texto do atributo alias deve ser pronunciado em vez do texto incluído do elemento. Desta forma, o SSML contém uma forma falada e escrita.

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

Atributo Description Obrigatório ou opcional
alias O valor de texto que deve ser pronunciado em vez do texto incluído do elemento. Necessário

sub exemplos

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

O mecanismo de síntese de fala fala o seguinte exemplo 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 MathML

A Mathematical Markup Language (MathML) é uma linguagem de marcação compatível com XML que descreve o conteúdo matemático e a estrutura. O serviço de fala pode usar o MathML como texto de entrada para pronunciar corretamente notações matemáticas no áudio de saída.

Nota

Os elementos MathML (tags) são atualmente suportados nas seguintes localidades: de-DE, en-AU, en-GB, en-US, es-ES, es-MX, ja-JPfr-FRfr-CAit-IT, ko-KR, e . pt-BRzh-CN

Todos os elementos das especificações MathML 2.0 e MathML 3.0 são suportados, exceto os elementos MathML 3.0 Elementary Math .

Tome nota destes elementos e atributos MathML:

  • O xmlns atributo in <math xmlns="http://www.w3.org/1998/Math/MathML"> é opcional.
  • Os semanticselementos , annotatione annotation-xml não produzem discurso, por isso 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 suporta as entidades MathML, então você deve usar os caracteres unicode correspondentes para representar as entidades, por exemplo, a entidade &copy; deve ser representada por seus caracteres &#x00A9;unicode, caso contrário, ocorre um erro.

Exemplos de MathML

A saída de texto para fala para este exemplo é "um quadrado mais b quadrado igual a c 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óximos passos