É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.
Remarque
En plus des voix neuronales (non-HD) Azure AI Speech, vous pouvez également utiliser des voix Azure AI Speech haute définition (HD) et des voix neuronales Azure OpenAI (HD et non-HD). Les voix HD offrent une meilleure qualité pour des scénarios plus polyvalents.
Certaines voix ne prennent pas en charge toutes les balises SSML (Speech Synthesis Markup Language). Ceci inclut le texte neuronal pour les voix HD de synthèse vocale, les voix personnelles et les voix incorporées.
- Pour les voix haute définition (HD) d’Azure AI Speech, vérifiez la prise en charge de SSML ici.
- Pour une voix personnelle, vous pouvez trouver les informations sur la prise en charge de SSML ici.
- Pour les voix incorporées, vérifiez la prise en charge de SSML ici.
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émentaudio
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émentaudio
peut également contenir du texte et les éléments suivants :audio
,break
,p
,s
,phoneme
,prosody
,say-as
etsub
.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
etsub
.lang
: Cet élément peut contenir tous les autres éléments à l’exception demstts:backgroundaudio
,voice
etspeak
.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
etsub
.mstts:express-as
: Cet élément peut contenir du texte et les éléments suivants :audio
,break
,emphasis
,lang
,phoneme
,prosody
,say-as
etsub
.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
ets
.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
ets
.s
: Cet élément peut contenir du texte et les éléments suivants :audio
,break
,phoneme
,prosody
,say-as
,mstts:express-as
, etsub
.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
etvoice
.voice
: Cet élément peut contenir tous les autres éléments à l’exception demstts:backgroundaudio
etspeak
.
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 &
à la place de &
, <
à la place de <
et >
à la place de >
. Sinon, le SSML n’est pas analysé correctement.
Par exemple, spécifiez green & 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 & 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 :
|
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 20 000 millisecondes. Si vous définissez une valeur supérieure à la valeur maximale prise en charge, le service utilise 20000ms . 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 :
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-exact ou 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 20 000 millisecondes. Si vous définissez une valeur supérieure à la valeur maximale prise en charge, le service utilise 20000ms . |
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.
|
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>