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émentlexeme
. Le lexique contient l’attributxml: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émentlexicon
a également un attributalphabet
pour indiquer l’alphabet utilisé dans le lexique. Les valeurs possibles sontipa
etx-microsoft-sapi
. - Chaque élément
lexeme
contient au moins un élémentgrapheme
et un ou plusieurs élémentsgrapheme
,alias
etphoneme
. L’élémentlexeme
respecte la casse dans le lexique personnalisé. Par exemple, si vous ne fournissez qu’un phonème pourlexeme
« Hello », cela ne fonctionne pas pourlexeme
« 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 dontlexeme
est prononcé. La limite de la syllabe est « . » dans l’alphabet phonétique international (API). L’élémentphoneme
ne peut pas contenir d’espaces blancs quand vous utilisez l’alphabet phonétique international (API). - Quand les éléments
alias
etphoneme
sont fournis avec le même élémentgrapheme
,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
etannotation-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é ©
doit être représentée par ses caractères unicode ©
, 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>