Événements et structure de document SSML

Le langage SSML (Speech Synthesis Markup Language) avec texte d’entrée détermine la structure, le contenu et d’autres caractéristiques de la sortie de synthèse vocale. Par exemple, vous pouvez utiliser SSML pour définir un paragraphe, une phrase, une pause ou un silence. Vous pouvez entourer du texte à l’aide de balises d’événement, comme un signet ou un visème, qui peuvent être traitées ultérieurement par votre application.

Reportez-vous aux sections ci-dessous pour plus d’informations sur la manière de structurer des éléments dans le document SSML.

Structure du document

L’implémentation en SSML du service Speech est basée sur le langage SSML (Speech Synthesis Markup Language) version 1.0 du World Wide Web Consortium. Les éléments pris en charge par Speech peuvent différer de la norme W3C.

Chaque document SSML est créé avec des éléments ou balises SSML. Ces éléments sont utilisés pour ajuster la voix, le style, la tonalité, la prosodie, le volume, etc.

Voici un sous-ensemble de la structure et de la syntaxe de base d’un document SSML :

<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xmlns:mstts="https://www.w3.org/2001/mstts" xml:lang="string">
    <mstts:backgroundaudio src="string" volume="string" fadein="string" fadeout="string"/>
    <voice name="string" effect="string">
        <audio src="string"></audio>
        <bookmark mark="string"/>
        <break strength="string" time="string" />
        <emphasis level="value"></emphasis>
        <lang xml:lang="string"></lang>
        <lexicon uri="string"/>
        <math xmlns="http://www.w3.org/1998/Math/MathML"></math>
        <mstts:audioduration value="string"/>
        <mstts:ttsembedding speakerProfileId="string"></mstts:ttsembedding>
        <mstts:express-as style="string" styledegree="value" role="string"></mstts:express-as>
        <mstts:silence type="string" value="string"/>
        <mstts:viseme type="string"/>
        <p></p>
        <phoneme alphabet="string" ph="string"></phoneme>
        <prosody pitch="value" contour="value" range="value" rate="value" volume="value"></prosody>
        <s></s>
        <say-as interpret-as="string" format="string" detail="string"></say-as>
        <sub alias="string"></sub>
    </voice>
</speak>

Quelques exemples de contenu autorisé dans chaque élément sont décrits dans la liste suivante :

  • audio : Le corps de l’élément audio peut contenir du texte brut ou un balisage SSML qui est prononcé si le fichier audio n’est pas disponible ou ne peut pas être lu. L’élément audio peut également contenir du texte et les éléments suivants : audio, break, p, s, phoneme, prosody, say-as et sub.
  • bookmark : Cet élément ne peut pas contenir de texte ni d’autres éléments.
  • break : Cet élément ne peut pas contenir de texte ni d’autres éléments.
  • emphasis : Cet élément peut contenir du texte et les éléments suivants : audio, break, emphasis, lang, phoneme, prosody, say-as et sub.
  • lang : Cet élément peut contenir tous les autres éléments à l’exception de mstts:backgroundaudio, voice et speak.
  • lexicon : Cet élément ne peut pas contenir de texte ni d’autres éléments.
  • math : Cet élément peut uniquement contenir du texte et des éléments MathML.
  • mstts:audioduration : Cet élément ne peut pas contenir de texte ni d’autres éléments.
  • mstts:backgroundaudio : Cet élément ne peut pas contenir de texte ni d’autres éléments.
  • mstts:embedding : Cet élément peut contenir du texte et les éléments suivants : audio, break, emphasis, lang, phoneme, prosody, say-as et sub.
  • mstts:express-as : Cet élément peut contenir du texte et les éléments suivants : audio, break, emphasis, lang, phoneme, prosody, say-as et sub.
  • mstts:silence : Cet élément ne peut pas contenir de texte ni d’autres éléments.
  • mstts:viseme : Cet élément ne peut pas contenir de texte ni d’autres éléments.
  • p : Cet élément peut contenir du texte et les éléments suivants : audio, break, phoneme, prosody, say-as, sub, mstts:express-as et s.
  • phoneme : Cet élément peut uniquement contenir du texte et aucun autre élément.
  • prosody : Cet élément peut contenir du texte et les éléments suivants : audio, break, p, phoneme, prosody, say-as, sub et s.
  • s : Cet élément peut contenir du texte et les éléments suivants : audio, break, phoneme, prosody, say-as, mstts:express-as, et sub.
  • say-as : Cet élément peut uniquement contenir du texte et aucun autre élément.
  • sub : Cet élément peut uniquement contenir du texte et aucun autre élément.
  • speak : Élément racine d’un document SSML. Cet élément peut contenir les éléments suivants : mstts:backgroundaudio et voice.
  • voice : Cet élément peut contenir tous les autres éléments à l’exception de mstts:backgroundaudio et speak.

Le service Speech gère automatiquement la ponctuation de la manière appropriée, notamment en marquant une pause après un point ou en utilisant l’intonation correcte quand une phrase se termine par un point d’interrogation.

Caractères spéciaux

Vous devez vous servir du format d’entité pour utiliser les caractères &, <et > dans la valeur ou le texte de l’élément SSML. Plus précisément, vous devez utiliser &amp; à la place de &, &lt; à la place de < et &gt; à la place de >. Sinon, le SSML n’est pas analysé correctement.

Par exemple, spécifiez green &amp; yellow plutôt que green & yellow. Le SSML suivant est analysé comme prévu :

<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="en-US">
    <voice name="en-US-AvaNeural">
        My favorite colors are green &amp; yellow.
    </voice>
</speak>

Les caractères spéciaux, comme les guillemets, les apostrophes et les crochets, doivent être placés dans une séquence d’échappement. Pour plus d’informations, consultez la page Extensible Markup Language (XML) 1.0 : Annexe D.

Les valeurs des attributs doivent être encadrées par des guillemets doubles ou simples. Par exemple, <prosody volume="90"> et <prosody volume='90'> sont des éléments valides et bien formés, mais <prosody volume=90> ne sera pas reconnu.

Élément racine speak

L’élément speak contient des informations comme la version, la langue et la définition de vocabulaire de balisage. L’élément speak est l’élément racine obligatoire dans tous les documents SSML. Vous devez définir la langue par défaut dans l’élément speak, que la langue soit ou non ajustée ailleurs, comme dans l’élément lang.

Voici la syntaxe de l’élément speak :

<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="string"></speak>
Attribut Description Obligatoire ou facultatif
version Indique la version de la spécification SSML utilisée pour interpréter le balisage de document. La version actuelle est 1.0. Obligatoire
xml:lang Langue du document racine. La valeur peut contenir un code de langue comme en (Anglais) ou des paramètres régionaux comme en-US (Anglais – États-Unis). Obligatoire
xmlns URI du document qui définit le vocabulaire de balisage (types d’éléments et noms d’attributs) du document SSML. L’URI actuel est "http://www.w3.org/2001/10/synthesis". Obligatoire

L’élément speak doit contenir au moins un élément voice.

Exemples speak

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

Exemple de voix unique

Cet exemple utilise la voix en-US-AvaNeural. Pour obtenir d’autres exemples, consultez les exemples voice.

<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="en-US">
    <voice name="en-US-AvaNeural">
        This is the text that is spoken.
    </voice>
</speak>

Ajouter une pause

Utilisez l’élément break pour remplacer le comportement par défaut des interruptions ou pauses entre les mots. Sinon, le service Speech insère automatiquement des pauses.

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

Attribut Description Obligatoire ou facultatif
strength Durée relative d’une pause à l’aide de l’une des valeurs suivantes :
  • x-weak
  • weak
  • medium (par défaut)
  • strong
  • x-strong
Facultatif
time Durée absolue d’une pause en secondes (comme 2s) ou en millisecondes (comme 500ms). La plage des valeurs valides est comprise entre 0 et 5 000 millisecondes. Si vous définissez une valeur supérieure à la valeur maximale prise en charge, le service utilise 5000ms. Si l’attribut time est défini, l’attribut strength est ignoré. Facultatif

Voici plus d’informations sur l’attribut strength.

Puissance Durée relative
X-weak 250 ms
Weak 500 ms
Moyenne 750 ms
Remarque 1 000 ms
X-strong 1 250 ms

Exemples break

Les valeurs prises en charge pour les attributs de l’élément break ont été décrites précédemment. Les trois méthodes suivantes ajoutent toutes des pauses de 750 ms.

<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="en-US">
    <voice name="en-US-AvaNeural">
        Welcome <break /> to text to speech.
        Welcome <break strength="medium" /> to text to speech.
        Welcome <break time="750ms" /> to text to speech.
    </voice>
</speak>

Ajouter un silence

Utilisez l’élément mstts:silence pour insérer des pauses avant ou après le texte, ou entre deux phrases adjacentes.

L’une des différences entre mstts:silence et break est qu’un élément break peut être inséré n’importe où dans le texte. Le silence fonctionne uniquement au début ou à la fin du texte entré, ou à la limite de deux phrases adjacentes.

Le paramètre de silence est appliqué à tout le texte d’entrée dans l’élément voice englobant. Pour réinitialiser ou remodifier le paramètre de silence, vous devez utiliser un nouvel élément voice avec la même voix ou une autre voix.

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

Attribut Description Obligatoire ou facultatif
type Spécifie où et comment ajouter un silence. Seuls les types de silences suivants sont pris en charge :
  • Leading – Silence supplémentaire au début du texte. La valeur que vous définissez est ajoutée au silence naturel avant le début du texte.
  • Leading-exact : silence au début du texte. La valeur est une durée de silence absolue.
  • Tailing – Silence supplémentaire à la fin du texte. La valeur que vous définissez est ajoutée au silence naturel après le dernier mot.
  • Tailing-exact : silence à la fin du texte. La valeur est une durée de silence absolue.
  • Sentenceboundary – Silence supplémentaire entre les phrases adjacentes. La durée réelle du silence pour ce type inclut le silence naturel après le dernier mot de la phrase précédente, la valeur que vous avez définie pour ce type et le silence naturel avant le premier mot de la phrase suivante.
  • Sentenceboundary-exact : silence entre des phrases adjacentes. La valeur est une durée de silence absolue.
  • Comma-exact – Silence à la virgule au format demi-chasse ou pleine chasse. La valeur est une durée de silence absolue.
  • Semicolon-exact – Silence au point-virgule au format demi-chasse ou pleine chasse. La valeur est une durée de silence absolue.
  • Enumerationcomma-exact – Silence à la virgule d’énumération au format pleine chasse. La valeur est une durée de silence absolue.

Un type de silence absolu (avec le suffixe -exact) remplace tout silence naturel de début ou de fin. Les types de silences absolus sont prioritaires sur le type non absolu correspondant. Par exemple, si vous définissez les types Leading et Leading-exact, le type Leading-exact sera appliqué. L’événement WordBoundary est prioritaire sur les paramètres de silence liés à la ponctuation, notamment Comma-exact, Semicolon-exactou Enumerationcomma-exact. Lorsque vous utilisez à la fois l’événement WordBoundary et les paramètres de silence liés à la ponctuation, les paramètres de silence liés à la ponctuation ne sont pas pris en compte.
Requis
Value Durée d’une pause en secondes (comme 2s) ou en millisecondes (comme 500ms). La plage des valeurs valides est comprise entre 0 et 5 000 millisecondes. Si vous définissez une valeur supérieure à la valeur maximale prise en charge, le service utilise 5000ms. Requis

Exemples mstts silence

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

Dans cet exemple, mstts:silence est utilisé pour ajouter 200 ms de silence entre deux phrases.

<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">
<mstts:silence  type="Sentenceboundary" value="200ms"/>
If we're home schooling, the best we can do is roll with what each day brings and try to have fun along the way.
A good place to start is by trying out the slew of educational apps that are helping children stay happy and smash their schooling at the same time.
</voice>
</speak>

Dans cet exemple, mstts:silence est utilisé pour ajouter un silence de 50 ms à la virgule, un silence de 100 ms au point-virgule et un silence de 150 ms à la virgule d’énumération.

<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xmlns:mstts="http://www.w3.org/2001/mstts" xml:lang="zh-CN">
<voice name="zh-CN-YunxiNeural">
<mstts:silence type="comma-exact" value="50ms"/><mstts:silence type="semicolon-exact" value="100ms"/><mstts:silence type="enumerationcomma-exact" value="150ms"/>你好呀,云希、晓晓;你好呀。
</voice>
</speak>

Spécifier des paragraphes et des phrases

Les éléments p et s sont utilisés pour désigner respectivement les paragraphes et les phrases. En l’absence de ces éléments, le service Speech détermine automatiquement la structure du document SSML.

Exemples de paragraphes et de phrases

L’exemple suivant définit deux paragraphes qui contiennent chacun des phrases. Dans le second paragraphe, le service Speech détermine automatiquement la structure des phrases, car elles ne sont pas définies dans le document SSML.

<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="en-US">
    <voice name="en-US-AvaNeural">
        <p>
            <s>Introducing the sentence element.</s>
            <s>Used to mark individual sentences.</s>
        </p>
        <p>
            Another simple paragraph.
            Sentence structure in this paragraph is not explicitly marked.
        </p>
    </voice>
</speak>

Élément bookmark

Vous pouvez utiliser l’élément bookmark pour référencer un emplacement spécifique dans le texte ou la séquence de balises. Ensuite, vous utilisez le Kit de développement logiciel (SDK) Speech et vous abonnez à l’événement BookmarkReached pour obtenir le décalage de chaque marqueur dans le flux audio. L’élément bookmark n’est pas parlé. Pour plus d’informations, consultez S’abonner aux événements de synthétiseur.

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

Attribut Description Obligatoire ou facultatif
mark Texte de référence de l’élément bookmark. Obligatoire

Exemples de signets

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

Par exemple, vous pouvez souhaiter connaître le décalage temporel de chaque nom de fleur dans l’extrait suivant :

<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="en-US">
    <voice name="en-US-AvaNeural">
        We are selling <bookmark mark='flower_1'/>roses and <bookmark mark='flower_2'/>daisies.
    </voice>
</speak>

Élément de visème

Un visème est la description visuelle d’un phonème dans le langage parlé. Il définit la position du visage et de la bouche quand une personne parle. Vous pouvez utiliser l’élément mstts:viseme dans SSML pour demander une sortie de visème. Pour plus d’informations, consultez Obtenir la position faciale avec un visème.

Le paramètre de visème est appliqué à tout le texte d’entrée dans l’élément voice englobant. Pour réinitialiser ou remodifier le paramètre de visème, vous devez utiliser un nouvel élément voice avec la même voix ou une autre voix.

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

Attribut Description Obligatoire ou facultatif
type Type de sortie de visème.
  • redlips_front – synchronisation labiale avec l’ID de visème et la sortie de décalage audio
  • FacialExpression – résultat des formes de fusion
Obligatoire

Notes

Actuellement, seul redlips_front prend en charge les voix neuronales dans les paramètres régionaux en-US, tandis que FacialExpression prend en charge les voix neuronales dans les paramètres régionaux en-US et zh-CN.

Exemples de visème

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

Cet extrait de code SSML montre comment demander des formes de fusion avec votre voix synthétisée.

<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">
    <mstts:viseme type="FacialExpression"/>
    Rainbow has seven colors: Red, orange, yellow, green, blue, indigo, and violet.
  </voice>
</speak>

Étapes suivantes