Prononciation avec SSML

Vous pouvez utiliser le langage SSML (Speech Synthesis Markup Language) avec la synthèse vocale pour spécifier le mode de prononciation. Par exemple, vous pouvez utiliser SSML avec des phonèmes et un lexique personnalisé pour améliorer la prononciation. Vous pouvez aussi utiliser SSML pour définir la façon dont un mot ou une expression mathématique sont prononcés.

Les sections suivantes expliquent comment utiliser les éléments SSML pour améliorer la prononciation. Pour plus d’informations sur la syntaxe SSML, consultez Événements et structure de document SSML.

Élément de phonème

L’élément phoneme est utilisé pour la prononciation phonétique dans les documents SSML. Fournissez toujours un discours contrôlable de visu comme solution de secours.

Les alphabets phonétiques sont constitués de phonèmes composés de lettres, de chiffres ou de caractères parfois combinés. Chaque phonème décrit un son vocal unique. L’alphabet phonétique s’oppose à l’alphabet latin, où chaque lettre peut représenter plusieurs sons. Considérez les différentes prononciations en-US de la lettre « c » dans les mots « candy » et « cease », ou bien les différentes prononciations de la combinaison de lettres « th » dans les mots « thing » et « those ».

Notes

Pour obtenir la liste des paramètres régionaux qui prennent en charge les phonèmes, consultez les notes de bas de page du tableau de prise en charge linguistique.

L’utilisation des attributs de l’élément phoneme est décrite dans le tableau suivant.

Attribut Description Obligatoire ou facultatif
alphabet Alphabet phonétique à utiliser quand vous synthétisez la prononciation de la chaîne dans l’attribut ph. La chaîne qui spécifie l’alphabet doit être spécifiée en lettres minuscules. Les options suivantes sont les alphabets que vous pouvez spécifier :
L’alphabet s’applique uniquement au phoneme dans l’élément.
Facultatif
ph Chaîne contenant des phonèmes spécifiant la prononciation du mot figurant dans l’élément phoneme. Si la chaîne spécifiée contient des phones non reconnus, la synthèse vocale rejette la totalité du document SSML et ne produit aucune des sorties vocales spécifiées dans le document.

Pour ipa, pour mettre en évidence une syllabe en plaçant le symbole de mise en évidence avant cette syllabe, vous devez marquer toutes les syllabes pour le mot. Autrement, la syllabe précédant ce symbole de mise en évidence est marquée. Pour sapi, si vous voulez mettre en évidence une syllabe, vous devez placer le symbole de mise en évidence après cette syllabe, que toutes les syllabes du mot soient marquées ou non.
Obligatoire

Exemples de phonèmes

Les valeurs prises en charge pour les attributs de l’élément phoneme ont été décrites précédemment. Dans les deux premiers exemples, les valeurs de ph="tə.ˈmeɪ.toʊ" ou ph="təmeɪˈtoʊ" sont spécifiées pour mettre en évidence la syllabe 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>

Lexique personnalisé

Vous pouvez définir la façon dont les entités uniques (comme l’entreprise, un terme médical ou un emoji) sont lues dans SSML à l’aide des éléments phoneme et sub. Pour définir la façon dont plusieurs entités sont lues, créez un fichier XML de lexique personnalisé structuré. Ensuite, vous chargez le fichier XML du lexique personnalisé et vous le référencez avec l’élément lexicon SSML.

Notes

Pour obtenir la liste des paramètres régionaux qui prennent en charge un lexique personnalisé, consultez les notes de bas de page du tableau de prise en charge linguistique.

L’élément lexicon n’est pas pris en charge par l’API Audio Long. Pour la conversion de texte long par synthèse vocale, utilisez plutôt l’API de synthèse par lots (préversion).

L’utilisation des attributs de l’élément lexicon est décrite dans le tableau suivant.

Attribut Description Obligatoire ou facultatif
uri URI du fichier XML du lexique personnalisé accessible publiquement portant l’extension de fichier .xml ou .pls. L’utilisation de Stockage Blob Azure est recommandée, mais pas obligatoire. Pour plus d’informations sur le fichier de lexique personnalisé, consultez Pronunciation Lexicon Specification (PLS) Version 1.0. Obligatoire

Exemples de lexiques personnalisés

Les valeurs prises en charge pour les attributs de l’élément lexicon ont été décrites précédemment.

Après avoir publié votre lexique personnalisé, vous pouvez le référencer à partir de votre SSML. L’exemple SSML suivant fait référence à un lexique personnalisé qui a été chargé sur https://www.example.com/customlexicon.xml. Nous prenons en charge les URL de lexique depuis le Stockage Blob Azure, depuis le stockage AMS (Advanced Media Services) et depuis GitHub. Toutefois, notez que d’autres URL publiques ne seront peut-être pas être compatibles.

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

Fichier de lexique personnalisé

Pour définir la façon dont plusieurs entités sont lues, vous pouvez les définir dans un fichier XML de lexique personnalisé portant l’extension de fichier .xml ou .pls.

Notes

Le fichier de lexique personnalisé est un document XML valide, mais il ne peut pas être utilisé en tant que document SSML.

Voici certaines limitations d’un fichier de lexique personnalisé :

  • Taille du fichier : La taille du fichier de lexique personnalisé est limitée à un maximum de 100 Ko. Si la taille du fichier dépasse la limite des 100 Ko, la demande de synthèse échoue. Vous pouvez fractionner votre lexique en plusieurs lexiques, puis les inclure dans SSML si la taille de fichier dépasse 100 ko.
  • Actualisation du cache du lexique : le lexique personnalisé est mis en cache avec l’URI en tant que clé de la synthèse vocale quand il est chargé pour la première fois. Dans la mesure où le lexique ayant le même URI n'est pas rechargé avant 15 minutes, le changement de lexique personnalisé doit attendre 15 minutes tout au plus pour prendre effet.

Les éléments et attributs pris en charge d’un fichier XML de lexique personnalisé sont décrits dans Pronunciation Lexicon Specification (PLS) Version 1.0. Voici quelques exemples des éléments et attributs pris en charge :

  • L’élément lexicon contient au moins un élément lexeme. Le lexique contient l’attribut xml:lang nécessaire afin d’indiquer les paramètres régionaux pour lesquels il doit être appliqué. Un lexique personnalisé est limité à un seul paramètre régional pour des raisons de conception. Il ne fonctionne donc pas si vous l'appliquez à un autre paramètre régional. L’élément lexicon a également un attribut alphabet pour indiquer l’alphabet utilisé dans le lexique. Les valeurs possibles sont ipa et x-microsoft-sapi.
  • Chaque élément lexeme contient au moins un élément grapheme et un ou plusieurs éléments grapheme, alias et phoneme. L’élément lexeme respecte la casse dans le lexique personnalisé. Par exemple, si vous ne fournissez qu’un phonème pour lexeme « Hello », cela ne fonctionne pas pour lexeme « hello ».
  • L’élément grapheme contient du texte qui décrit l’orthographe.
  • Les éléments alias sont utilisés pour indiquer la prononciation d’un acronyme ou d’un terme abrégé.
  • L’élément phoneme fournit du texte qui décrit la façon dont lexeme est prononcé. La limite de la syllabe est « . » dans l’alphabet phonétique international (API). L’élément phoneme ne peut pas contenir d’espaces blancs quand vous utilisez l’alphabet phonétique international (API).
  • Quand les éléments alias et phoneme sont fournis avec le même élément grapheme, alias a une priorité plus élevée.

Microsoft fournit un outil de validation pour le lexique personnalisé qui vous aide à rechercher les erreurs (avec des messages d’erreur détaillés) dans le fichier de lexique personnalisé. L’utilisation de l’outil est recommandée avant d’utiliser le fichier XML de lexique personnalisé en production avec le service Speech.

Exemples de fichiers de lexique personnalisé

L’exemple XML suivant (et non SSML) est contenu dans un fichier .xml de lexique personnalisé. Quand vous utilisez ce lexique personnalisé, « BTW » est lu « By the way ». « Benigni » est lu avec l’alphabet phonétique international (API) fourni « 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>

Vous ne pouvez pas définir directement la prononciation d’une expression à l’aide du lexique personnalisé. Si vous devez définir la prononciation d’un acronyme ou d’un terme abrégé, indiquez d’abord un alias, puis associez le phoneme à cet alias. Par exemple :

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

Vous pouvez également fournir directement l’alias attendu pour l’acronyme ou le terme abrégé. Par exemple :

  <lexeme>
    <grapheme>Scotland MV</grapheme>
    <alias>Scotland Media Wave</alias>
  </lexeme>

Les exemples de fichiers XML de lexique personnalisé précédents utilisent l’alphabet phonétique international, également appelé API. Nous vous suggérons d’utiliser l’alphabet phonétique international (API), car il s’agit d’une norme internationale. Pour certains caractères de l’alphabet phonétique international (API), il existe une version « précomposée » et une version « décomposée » quand ils sont représentés dans la norme Unicode. Le lexique personnalisé prend uniquement en charge l’Unicode décomposé.

Le service Speech définit un jeu phonétique pour les paramètres régionaux suivants : en-US, fr-FR, de-DE, es-ES, ja-JP, zh-CN, zh-HK et zh-TW. Pour plus d’informations sur l’alphabet phonétique détaillé du service Speech, reportez-vous aux jeux de phonèmes du service Speech.

Vous pouvez utiliser x-microsoft-sapi en tant que valeur de l’attribut alphabet avec des lexiques personnalisés, comme indiqué ici :

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

élément say-as

L’élément say-as indique le type de contenu, par exemple un nombre ou une date, du texte de l’élément. Cet élément fournit l’aide nécessaire au moteur de synthèse vocale pour prononcer le texte.

L’utilisation des attributs de l’élément say-as est décrite dans le tableau suivant.

Attribut Description Obligatoire ou facultatif
interpret-as Indique le type de contenu du texte d’un élément. Pour connaître la liste des types, consultez le tableau suivant. Obligatoire
format Fournit des informations supplémentaires sur la mise en forme précise du texte de l’élément pour les types de contenu susceptibles de présenter des formats ambigus. Le SSML définit des formats pour les types de contenu qui les utilisent. Consultez le tableau suivant. Facultatif
detail Indique le niveau de détail à prononcer. Par exemple, cet attribut peut demander à ce que le moteur de synthèse vocale prononce les signes de ponctuation. Aucune valeur standard n’est définie pour detail. Facultatif

Les types de contenu suivants sont pris en charge pour les attributs interpret-as et format. N'incluez l'attribut format que si la colonne format n'est pas vide dans ce tableau.

Remarque

Les valeurs characters et spell-out de l’attribut interpret-as sont prises en charge pour tous les paramètres régionaux de synthèse vocale. D’autres valeurs d’attribut interpret-as sont prises en charge pour tous les paramètres régionaux des langues suivantes : allemand, anglais, arabe, catalan, chinois, coréen, danois, espagnol, français, finnois, hindi, italien, japonais, néerlandais, norvégien, polonais, portugais, russe et suédois.

interpret-as format Interprétation
characters, spell-out Le texte est prononcé sous forme de lettres individuelles (épelées). Le moteur de synthèse vocale prononce :

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

Par exemple, « T E S T ».
cardinal, number Aucun Le texte est prononcé sous forme de nombre cardinal. Le moteur de synthèse vocale prononce :

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

« Il y a dix options ».
ordinal Aucun Le texte est prononcé sous forme de nombre ordinal. Le moteur de synthèse vocale prononce :

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

Sous la forme « Sélectionnez la troisième option ».
number_digit Aucun Le texte est prononcé sous forme de séquence de chiffres individuels. Le moteur de synthèse vocale prononce :

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

Par exemple, « 1 2 3 4 5 6 7 8 9 ».
fraction Aucun Le texte est prononcé sous forme de nombre fractionnaire. Le moteur de synthèse vocale prononce :

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

Par exemple, « Trois huitièmes de pouce ».
date dmy, mdy, ymd, ydm, ym, my, md, dm, d, m, y Le texte est prononcé sous forme de date. L’attribut format spécifie le format de la date (j=day (jour), m=month (mois) et y=year (année) ). Le moteur de synthèse vocale prononce :

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

Par exemple, « Nous sommes le douze octobre deux mille seize ».
Prononce :

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

Par exemple, « Nous sommes le dix décembre deux mille seize ».
time hms12, hms24 Le texte est prononcé sous forme d'heure. L’attribut format spécifie si l’heure correspond à l’horloge au format 12 heures (hms12) ou 24 heures (hms24). Utilisez deux points pour séparer les nombres représentant les heures, les minutes et les secondes. Voici quelques exemples d’heure valides : 12:35, 1:14:32, 08:15 et 02:50:45. Le moteur de synthèse vocale prononce :

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

Par exemple, « Le train part à 4 heures ».
duration hms, hm, ms Le texte est prononcé sous forme de durée. L’attribut format spécifie le format de la durée (h=heure, m=minute et s=seconde). Le moteur de synthèse vocale prononce :

<say-as interpret-as="duration">01:18:30</say-as>

Comme « une heure dix-huit minutes et trente secondes ».
Prononce :

<say-as interpret-as="duration" format="ms">01:18</say-as>

Comme « une minute et dix-huit secondes ».
Cette étiquette est prise en charge uniquement sur l’anglais et l’espagnol.
telephone Aucun Le texte est prononcé sous forme de numéro de téléphone. Le moteur de synthèse vocale prononce :

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

Par exemple, « Mon numéro avec indicatif régional est huit huit huit cinq cinq cinq un deux un deux ».
currency Aucun Le texte est dit sous forme de devise. Le moteur de synthèse vocale prononce :

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

« 99 dollars américains et 90 cents ».
address Aucun Le texte est prononcé sous forme d'adresse. Le moteur de synthèse vocale prononce :

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

Sous la forme « Je suis à la 150e de Court Northeast Redmond Washington ».
name Aucun Le texte est dit sous la forme d’un nom de personne. Le moteur de synthèse vocale prononce :

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

Sous la forme [æd].
Dans les noms chinois, certains caractères se prononcent différemment quand ils apparaissent dans un nom de famille. Par exemple, le moteur de synthèse vocale prononce 仇 dans

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

Sous la forme [qiú] et non [chóu].

Exemples say-as

Les valeurs prises en charge pour les attributs de l’élément say-as ont été décrites précédemment.

Le moteur de synthèse vocale prononce l’exemple ci-dessous comme suit : « Votre première requête portait sur une chambre le dix-neuf octobre deux mille dix, avec une arrivée à douze heure trente-cinq. »

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

Élément sub

Utilisez l’élément sub pour indiquer que la valeur de texte de l’attribut alias doit être prononcée au lieu du texte joint de l’élément. Ainsi, le SSML contient à la fois une forme parlée et une forme écrite.

L’utilisation des attributs de l’élément sub est décrite dans le tableau suivant.

Attribut Description Obligatoire ou facultatif
alias Valeur de texte qui doit être prononcée au lieu du texte joint de l’élément. Obligatoire

Exemples sub

Les valeurs prises en charge pour les attributs de l’élément sub ont été décrites précédemment.

Le moteur de synthèse vocale prononce l’exemple suivant « 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>

Prononciation avec MathML

Le langage de balisage mathématique MathML (Mathematical Markup Language) est compatible XML. Il décrit le contenu et la structure mathématiques. Le service Speech peut utiliser MathML en texte d’entrée pour prononcer correctement les notations mathématiques dans l’audio de sortie.

Remarque

Les éléments MathML (balises) sont actuellement pris en charge dans les paramètres régionaux suivants : de-DE, en-AU, en-GB, en-US, es-ES, es-MX, fr-CA, fr-FR, it-IT, ja-JP, ko-KR, pt-BR et zh-CN.

Tous les éléments des spécifications MathML 2.0 et MathML 3.0 sont prises en charge, à l’exception des éléments de Mathématique élémentaire de MathML 3.0.

Notez ces éléments et attributs MathML :

  • L’attribut xmlns dans <math xmlns="http://www.w3.org/1998/Math/MathML"> est facultatif.
  • Les éléments semantics, annotation et annotation-xml ne génèrent pas de contenu vocal. Ils sont donc ignorés.
  • Si un élément n'est pas reconnu, il est ignoré et les éléments enfants qu'il contient sont toujours traités.

La syntaxe XML ne prend pas en charge les entités MathML, vous devez donc utiliser les caractères unicode correspondants pour représenter les entités, par exemple, l'entité &copy; doit être représentée par ses caractères unicode &#x00A9;, sinon une erreur se produit.

Exemples MathML

La sortie de synthèse vocale pour cet exemple est « a squared plus b squared equals c squared » (a carré plus b carré égale c carré).

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

Étapes suivantes