Lisez-moi S.V.P. 

W3C

Le langage de balisage de synthèse vocale (SSML) version 1.0

Recommandation du W3C du 7 septembre 2004

Cette version :
http://www.w3.org/TR/2004/REC-speech-synthesis-20040907/
Dernière version :
http://www.w3.org/TR/speech-synthesis/
Version précédente :
http://www.w3.org/TR/2004/PR-speech-synthesis-20040715/

Rédacteurs :
Daniel C. Burnett, Nuance Communications
Mark R. Walker, Intel
Andrew Hunt, ScanSoft

Veuillez consulter l'errata de ce document, lequel peut contenir des corrections normatives.

Cf. également d'éventuelles traductions.


Résumé

Le groupe de travail Voice Browser a tenté de développer des normes permettant un accès au Web au travers d'une interaction verbale. La spécification du langage de balisage de synthèse vocale qui est l'une de ces normes, décrit un langage de balisage riche fondé sur XML pour assister la génération d'une voix synthétisée dans le cadre du Web et dans d'autres applications. Le rôle essentiel du langage de balisage est d'offrir aux créateurs de contenus synthétisables une méthode normalisée pour contrôler les aspects de la voix tels que la prononciation, le volume sonore, la hauteur tonale, le rythme, etc. entre différentes plateformes capables de synthèse vocale.

Statut de ce document

Cette section décrit le statut du document au moment de sa publication. D'autres documents peuvent venir le remplacer. On peut trouver la liste des publications actuelles du W3C et la dernière révision de ce rapport technique dans l'index des rapports techniques du W3C à http://www.w3.org/TR/.

Ce document constitue la spécification du langage de balisage de synthèse vocale (SSML) 1.0 qui est une recommandation du W3C. Il a été produit dans le cadre de l'activité Voice Browser. Les auteurs du document participent au groupe de travail Voice Browser (accès réservé au membres du W3C). Pour plus de renseignements, consultez la FAQ Voice Browser. Ce document est stable, et il a été approuvé par les membres du W3C et les participants du groupe de travail Voice Browser.

La conception de SSML 1.0 a été largement examinée (cf. la mise à disposition des commentaires) et elle satisfait aux exigences techniques du groupe de travail. Une liste de mises en œuvre est incluse dans le rapport de mise en œuvre SSML 1.0, avec la suite de tests associée.

Les commentaires sont les bienvenus sur la liste de diffusion www-voice@w3.org (archives). Cf. les conditions d'utilisation des listes de diffusion et des archives du W3C.

On peut trouver les divulgations de brevets concernant cette spécification sur la page de divulgation de brevets du groupe de travail. La publication de ce document a lieu selon la politique de brevets courante du 24 janvier 2002 amendée par la procédure de transition de la politique de brevets du W3C. Quiconque aurait connaissance de l'existence d'un brevet censé contenir une ou plusieurs revendications essentielles à propos de cette spécification devrait en faire la divulgation conformément au chapitre 6 de la politique de brevets du W3C.

0. Table des matières

1. Introduction

La spécification du W3C, connue sous l'appellation langage de balisage de synthèse vocale (SSML), est fondée sur les spécifications JSGF et/ou JSML, propriétés de Sun Microsystems, Inc., California, U.S.A. On peut consulter la spécification JSML à [JSML].

Le langage SSML fait partie d'un ensemble plus vaste de spécifications de balisage pour navigateurs vocaux développées au travers des processus ouverts du W3C. Il constitue un langage de balisage riche fondé sur XML pour assister la génération d'une voix synthétisée dans le cadre du Web et dans d'autres applications. Le rôle essentiel du langage de balisage est de fournir aux créateurs de contenus synthétisables une méthode normalisée pour contrôler les aspects de la voix tels que la prononciation, le volume sonore, la hauteur tonale, le rythme, etc. entre différentes plateformes capables de synthèse vocale. Le projet SABLE [SABLE] est une initiative apparentée pour établir un système de balisage normalisé du texte d'entrée, qui essayait d'intégrer plusieurs balisages de synthèse de la parole différents fondés sur XML. L'activité du projet SABLE a également servi de point de départ principal pour définir Les besoins du balisage de synthèse vocale des langages de balisage de la voix [REQS]. Le projet SABLE même n'a pas connu d'autres développements depuis.

Le langage SSML est conçu pour améliorer la qualité du contenu synthétisé. Divers éléments de balisage agissent à des stades différents du processus de synthèse (cf. la section 1.2). Le balisage peut être produit automatiquement, par exemple, via les feuilles de style XSLT ou CSS3 d'un document XHTML, ou bien être une création humaine. Il peut être présent dans un document SSML complet (cf. la section 2.2.2) ou faire partie d'un fragment (cf. la section 2.2.1) incorporé dans un autre langage, quoique la spécification SSML ne définisse aucune interaction avec d'autres langages. La plupart des balises que contient SSML peut être utilisée par la majorité des développeurs de contenus, toutefois certaines caractéristiques évoluées comme celles des éléments phoneme et prosody (par exemple, pour créer un profil vocal) nécessiteront peut-être des connaissances spécialisées.

1.1 Les concepts du modèle

Le processus de conception et de normalisation s'ensuit de Les besoins du balisage de synthèse vocale des langages de balisage de la voix [REQS].

Les éléments suivants ont constitué les critères de conception clés :

1.2 Les étapes du processus de synthèse vocale

Le synthétiseur texte-parole (ou synthétiseur) gérant le langage SSML est responsable de la restitution d'un document en sortie vocale et de l'utilisation des informations contenues dans le balisage pour restituer le document selon l'intention de l'auteur.

La création du document : Le document textuel fourni en entrée au synthétiseur peut être produit automatiquement, créé par un humain, ou une combinaison de ces deux formes. Le langage SSML définit la forme du document.

Le traitement du document : Les six étapes principales du traitement entrepris par le synthétiseur pour convertir un texte d'entrée balisé en une sortie vocale générée automatiquement sont les suivantes. Le langage de balisage est suffisamment riche pour contrôler chaque étape décrite ci-dessous, de sorte que l'auteur du document (homme ou machine) peut maîtriser la sortie vocale finale. Bien que chaque étape se divise en une interprétation du balisage et en comportement hors balisage, le comportement réel est habituellement un mélange des deux, et il varie selon la balise. Il revient au processeur de s'assurer que ce qu'il produit est prononçable (et idéalement intelligible). Le balisage représente en général le moyen dont dispose l'auteur pour fournir des informations prosodiques ou autres au processeur, habituellement des informations que le processeur ne saurait obtenir seul. Le processeur détermine alors s'il va utiliser ces informations et de quelle façon.

  1. L'analyse XML : Un analyseur XML extrait l'arbre du document et son contenu du document textuel entrant. La structure, les balises et les attributs obtenus au cours de cette étape influencent chacune des suivantes. Les atomes (mots) dans SSML ne peuvent pas s'étendre sur les éléments de balisage. L'exemple simple en français car<break/>table sera traité par le synthétiseur comme les deux mots car et table, et non comme un seul mot avec une pause au milieu. Ce découpage d'un atome en plusieurs affectera vraisemblablement la façon dont le processeur le traitera.

  2. L'analyse de structure : La structure du document influence la façon dont il devrait être lu. Par exemple, il existe des formes oratoires communes associées aux paragraphes et aux phrases.

  3. La normalisation du texte : Toutes les langues écrites possèdent des structures particulières qui nécessitent une conversion de la forme écrite (forme orthographique) vers la forme parlée. La normalisation du texte est un processus automatisé du synthétiseur réalisant cette conversion. Par exemple, en anglais, si la chaîne $200 apparaît dans un document, elle peut se dire deux cents dollars. De même, la chaîne 1/2 peut se dire un demi, le premier février, un sur deux, et ainsi de suite. À la fin de cette étape, le texte à dire aura été entièrement converti en atomes. La constitution exacte d'un atome est propre à la langue. En français, les atomes sont habituellement séparés par des blancs et forment typiquement des mots. Pour les langues avec un comportement d'atomisation différent, le terme mot dans cette spécification signifie une unité comparable appropriée.

  4. La conversion texte-phonème : Une fois que le synthétiseur a déterminé l'ensemble des mots à dire, il doit déduire les prononciations de chaque mot. Les prononciations des mots peuvent être décrites en pratique comme des séquences de phonèmes, lesquels sont les unités de son dans une langue servant à distinguer un mot d'un autre. Chaque langue (et parfois, chaque variante nationale ou dialecte de langue) possède un ensemble de phonèmes spécifique ; par exemple, la plupart des dialectes anglo-américains ont environ 45 phonèmes, le hawaïen en a entre 12 et 18 (selon l'interlocuteur), et d'autres en ont plus de 100 ! Cette conversion est rendue complexe par un certain nombre de facteurs. Un premier facteur est celui selon lequel les formes écrites et parlées d'une langue peuvent être différentes, et cette différence peut amener une indétermination ou une ambiguïté dans la prononciation des mots écrits. Par exemple, comparés à leurs formes parlées, les mots hébreux et arabes s'écrivent sans voyelle ou seulement avec quelques voyelles définies. Dans beaucoup de langues, le même mot écrit peut avoir plusieurs formes parlées. Par exemple, en anglais, le mot read peut se prononcer ride (I will read the book) ou raide (I have read the book). Les locuteurs humains et les synthétiseurs peuvent prononcer correctement ces mots selon le contexte mais avoir des difficultés à le faire en absence de contexte (cf. Comportement hors balisage ci-dessous). Un autre facteur est celui de la gestion des mots avec des orthographes ou des prononciations irrégulières. Ainsi, un synthétiseur anglais aura souvent des difficultés à déterminer comment dire certains noms d'origine étrangère, par exemple, Caius College (prononcé kîz collidje), President Tito (prononcé çeuto, Republic of Kiribati (prononcé kiribass), etc.

  5. Analyse de la prosodie : La prosodie est l'ensemble des caractéristiques de sortie vocale, comprenant la hauteur tonale (aussi appelée intonation ou mélodie), la synchronisation, les pauses, le rythme de parole, l'emphase des mots, et beaucoup d'autres. La production d'une prosodie pareille à celle d'un humain est importante pour que la parole sonne naturellement et pour que la communication du sens de la parole soit correcte.

    Bien qu'on puisse considérer la plupart des éléments de SSML être de niveau supérieur, dans la mesure où ils fournissent soit un contenu à dire, soit des descriptions logiques du style, les éléments break et prosody, vu précédemment, interviennent plus tard dans le processus, ce qui les fait coexister à la fois avec les éléments emphasis et les propres déterminations prosodiques du synthétiseur. Sauf indication contraire dans les sections concernées, les interactions entre les déterminations du synthétiseur et celles fournies par l'auteur à ce niveau dépendent du processeur. Les auteurs sont encouragés à ne pas mélanger ces deux niveaux de contrôle, que ce soit occasionnellement ou bien arbitrairement.

  6. Production de la forme d'onde : Les phonèmes et les informations prosodiques sont utilisés par le synthétiseur pour produire la forme d'onde acoustique. Cette étape du traitement peut être approchée de plusieurs façons et il peut donc y avoir des variations considérables selon les processeurs.

1.3 La génération du document, les applications et les contextes d'utilisation

Il y a plusieurs types de créateurs de documents susceptibles de produire des documents balisés à dire par un synthétiseur. Les créateurs de documents (humains ou mécaniques) n'ont pas tous accès à des informations utilisables dans tous les éléments ou à chaque étape du traitement décrite dans la section précédente. Voici quelques cas courants :

Voici des points importants concernant les architectures ou les constructions d'après lesquelles seront générés les documents de synthèse balisés. La conception du langage est prévue afin de faciliter chacune de ces approches :

1.4 Le comportement de sortie du contenu SSML dépendant de la plateforme

Le langage SSML offre une méthode normalisée pour définir les propriétés globales de la production d'une voix synthétisée tels que la prononciation, le volume, la hauteur tonale, le rythme, etc. Par contre, la définition précise du comportement en sortie d'une voix synthétisée entre des processeurs disparates n'est pas traitée dans ce document.

Sauf indication contraire, les valeurs de balisage sont simplement des indications plutôt que des absolus. Par exemple, un auteur peut indiquer explicitement la durée d'un segment de texte et aussi la durée explicite d'un sous-ensemble de ce segment. Si les deux durées combinées font que le synthétiseur ne peut pas raisonnablement restituer le segment, alors il peut modifier au besoin ces durées pour la restitution.

1.5 La terminologie

Terminologie des besoins
Les mots-clés DOI(VEN)T, NE DOI(VEN)T PAS, OBLIGATOIRE, DEVRA(ONT), NE DEVRA(ONT) PAS, DEVRAI(EN)T, NE DEVRAI(EN)T PAS, RECOMMANDÉ, PEU(VEN)T et OPTIONNEL sont à interpréter selon le document [RFC2119]. Toutefois, pour la lisibilité, ces mots n'apparaissent pas en majuscules dans cette spécification.
Adresse URI
Une adresse URI est une syntaxe d'unification pour exprimer des noms et adresses d'objets sur le réseau comme utilisée sur le Web. On définit une adresse URI être toute primitive légale de type anyURI tel que défini dans la spécification XML Schema tome 2 : les types de données [SCHEMA2 §3.2.17]. Pour information seulement, les documents [RFC2396] et [RFC2732] seront peut-être utiles pour comprendre la structure, le format et l'utilisation des adresses URI. Tout appel d'adresse URI relative doit se résoudre d'après les règles données dans la section 3.1.3.1. Dans cette spécification, les adresses URI apparaissent comme attributs d'éléments, par exemple, dans les éléments audio et lexicon.
Au gré de l'utilisateur
Un synthétiseur conforme peut ou doit (selon le verbe modal dans la phrase) se comporter comme décrit ; si c'est le cas, il doit alors proposer à l'utilisateur un moyen d'activer ou de désactiver le comportement en question.
Condition d'erreur
Le résultat n'est pas défini. Un synthétiseur conforme peut détecter et signaler une erreur, et reprendre sur cette erreur.
Navigateur vocal
Un appareil interprétant un langage de balisage (vocal) et capable de générer une sortie vocale et/ou d'interpréter une entrée vocale, et éventuellement d'autres modalités d'entrée/sortie.
Synthèse texte-parole
Le processus de génération automatique d'une sortie vocale à partir d'un texte d'entrée, annoté ou non.
Synthèse vocale
Le processus de génération automatique d'une sortie vocale à partir de données d'entrée composées de texte brut, de texte balisé ou d'objets binaires.
Synthétiseur
Un système de synthèse texte-parole acceptant des documents SSML en entrée et les restituant au travers d'une sortie parlée.
Type de média
Un type de média (décrit dans [RFC2045] et [RFC2046]) définit la nature d'une ressource reliée. Les types de média sont insensibles à la casse. On peut télécharger une liste des types de média enregistrés [TYPES]. Cf. l'annexe C pour des renseignements sur les types de média pour SSML.

2. Les documents SSML

2.1 La forme du document

Un document SSML autonome légal doit avoir un prologue XML légal [XML §2.8]. La déclaration de type de document (DOCTYPE) optionnelle, si présente, doit être la suivante :

<!DOCTYPE speak PUBLIC "-//W3C//DTD SYNTHESIS 1.0//EN"
  "http://www.w3.org/TR/speech-synthesis/synthesis.dtd"> 

Le prologue XML est suivi de l'élément racine speak. Cf. la section 3.1.1 pour des précisions à propos de cet élément.

L'élément speak doit indiquer l'espace de nommage SSML. Pour ce faire, on déclare un attribut xmlns, ou un attribut avec le préfixe xmlns. Cf. [XMLNS §2] pour des précisions. Remarquez que l'attribut xmlns est utilisé seul, il établit l'espace de nommage par défaut de l'élément sur lequel il apparaît et pour tous ses sous-éléments. La définition de l'espace de nommage SSML se trouve à : http://www.w3.org/2001/10/synthesis.

Il est également recommandé que l'élément speak indique l'emplacement du schéma SSML (cf. l'annexe D) via l'attribut xsi:schemaLocation défini dans [SCHEMA1 §2.6.3]. Bien que cette indication ne soit pas obligatoire, le présent document l'utilise dans tous les exemples pour en encourager l'utilisation.

Voici deux exemples d'en-tête SSML légales :

<?xml version="1.0"?>
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://www.w3.org/2001/10/synthesis
                   http://www.w3.org/TR/speech-synthesis/synthesis.xsd"
         xml:lang="en-US">
<?xml version="1.0"?>
<!DOCTYPE speak PUBLIC "-//W3C//DTD SYNTHESIS 1.0//EN"
                  "http://www.w3.org/TR/speech-synthesis/synthesis.dtd">
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis"
         xml:lang="en-US">

Les éléments meta, metadata et lexicon doivent apparaître avant tous les autres éléments et le texte contenu dans l'élément racine speak. Cette spécification n'impose pas d'autres contraintes d'ordre d'apparition des éléments.

2.2. La conformité

2.2.1 Les fragments SSML conformes

Un fragment de document est un fragment SSML conforme si :

2.2.2 Les documents SSML autonomes conformes

Un document est un document SSML autonome conforme s'il satisfait aux deux conditions suivantes :

La spécification SSML et ces critères de conformité n'instaurent aucune limitation de taille concernant un aspect quelconque des documents SSML. Il n'y a pas de valeur maximale du nombre d'éléments, de la quantité de données textuelles ou du nombre de caractères des valeurs d'attributs.

2.2.3 L'utilisation de SSML avec d'autres espaces de nommage

L'espace de nommage SSML peut être utilisé en même temps que d'autres espaces de nommage XML, comme défini dans la recommandation des espaces de nommage XML [XMLNS]. Il est prévu que des développements futurs du W3C établissent des méthodes permettant de définir la conformité de documents avec plusieurs espaces de nommage.

2.2.4 Les processeurs SSML conformes

Un processeur SSML est un programme capable d'analyser et de traiter un document SSML autonome conforme.

L'analyseur XML du processeur SSML conforme doit être capable d'analyser et de traiter toutes les structures XML définies dans la recommandation XML 1.0 [XML] et dans celle des espaces de nommage dans XML [XMLNS]. L'analyseur XML n'est pas tenu de réaliser une validation du document SSML contre son schéma ou sa définition DTD ; il découle que, pendant le traitement d'un document SSML, l'application ou la résolution d'appels d'entités décrites dans une définition DTD externe sont optionnels.

Un processeur SSML conforme doit interpréter et appliquer correctement la sémantique de chaque élément de balisage, comme décrit dans ce document.

Un processeur SSML conforme doit remplir les conditions suivantes pour manipuler des langues naturelles (humaines) :

Lorsqu'un processeur SSML conforme rencontre des éléments ou attributs, hormis les attributs xml:lang et xml:base, dans un espace de nommage non-SSML, il peut :

Par contre, il n'y a aucune condition de conformité pour les caractéristiques de fonctionnement du processeur SSML. Par exemple, aucune déclaration n'est nécessaire concernant l'exactitude, la vitesse ou les autres caractéristique de la parole produite par le processeur. Aucune mention n'est faite de la taille admissible de l'entrée d'un processeur SSML.

2.2.5 Les agents utilisateurs conformes

Un agent utilisateur conforme est un processeur SSML conforme apte à recevoir un document SSML en entrée et à produire une sortie vocale en utilisant les informations contenues dans le balisage afin de restituer le document selon l'intention de l'auteur. Un agent utilisateur conforme doit gérer au moins une langue naturelle.

Puisqu'on ne peut pas garantir une représentation exacte en sortie de tout le balisage contenu dans l'entrée, aucune obligation de conformité ne s'applique donc en ce qui concerne l'exactitude de la restitution. Toutefois, un test de conformité peut imposer quelques exemples de synthèse correcte d'un document de référence pour déterminer une conformité.

2.3 L'intégration à d'autres langages de balisage

2.3.1 SMIL

Le langage d'intégration multimédia synchronisé (SMIL, prononcé smaïle) [SMIL] permet de créer simplement des présentations audiovisuelles interactives. On l'utilise habituellement pour les présentations média riche/multimédia contenant un flux audio et vidéo avec des images, du texte ou tout autre type de média. SMIL est un langage comme HTML, d'apprentissage facile, et beaucoup de présentations SMIL sont écrites avec un éditeur de texte simple. Cf. les exemples d'intégration SMIL/SSML dans l'annexe F.

2.3.2 ACSS

Les feuilles de style audio (ACSS) [CSS2 §19] servent à augmenter les formes visuelles normales des documents (par exemple, un document HTML) par d'autres éléments assistant la synthèse sonore du texte. Comparés à SSML, les documents générés avec ACSS sont capables de définitions plus complexes de la séquence audio, dont la position spatiale de la source sonore. Beaucoup d'autres éléments ACSS recouvrent des fonctionnalités SSML, notamment pour la définition du type et de la qualité de la voix. On peut assimiler SSML à un surensemble des possibilités ACSS, la spatialisation du son mise à part.

2.3.3 VoiceXML

Le langage de balisage extensible vocal (VoiceXML) [VXML] permet le développement et le transport de contenu par le Web pour des applications à réponse vocale interactives (cf. l'entrée navigateur vocal ). Le langage VoiceXML gère la synthèse vocale, l'enregistrement et la lecture de sons numériques, la reconnaissance vocale, les tonalités DTMF en entrée, le contrôle des appels en téléphonie et les dialogues à initiative mixte dirigés par formulaire. Le langage VoiceXML 2.0 complète SSML pour le balisage du texte à synthétiser. Cf. l'annexe F pour un exemple d'intégration entre VoiceXML et SSML.

2.4 La récupération des documents SSML

La récupération et le comportement de mise en cache des documents SSML est défini par l'environnement dans lequel le synthétiseur opère. Par exemple, dans un contexte d'interprétation VoiceXML, la politique de mise en cache est déterminée par l'interpréteur VoiceXML.

3. Les éléments et attributs

Cette spécification définit les éléments et attributs suivants :

3.1 La structure du document, le traitement du texte et la prononciation

3.1.1 L'élément racine speak

Le langage SSML est une application XML. L'élément racine est l'élément speak. L'attribut obligatoire xml:lang définit la langue du document racine. L'attribut optionnel xml:base définit l'adresse URI de base du document racine. L'attribut obligatoire version indique la version de la spécification à utiliser pour le document, et il doit valoir "1.0".

<?xml version="1.0"?>
<speak version="1.0"
         xmlns="http://www.w3.org/2001/10/synthesis"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://www.w3.org/2001/10/synthesis
                   http://www.w3.org/TR/speech-synthesis/synthesis.xsd"
         xml:lang="fr">
  ... le corps ...
</speak>

L'élément speak peut seulement contenir du texte à restituer et/ou les éléments suivants : audio, break, emphasis, lexicon, mark, meta, metadata, p, phoneme, prosody, say-as, sub, s, voice.

3.1.2 La langue : l'attribut xml:lang

L'attribut xml:lang, comme défini dans la spécification XML 1.0 [XML §2.12], peut servir à indiquer dans SSML la langue de l'élément englobant et ses attributs ainsi que de ses sous-éléments. Le document RFC 3066 [RFC3066] peut se révéler utile pour comprendre l'utilisation de cet attribut.

L'information de langue est héritée en descendant la hiérarchie du document, c'est-à-dire qu'il suffit de le donner une seule fois si la totalité du document est dans une seule langue, et elle peut être imbriquée, c'est-à-dire que les attributs intérieurs écrasent les extérieurs.

L'attribut xml:lang s'applique aux éléments voice, speak, p et s. Dans la restitution vocale, un changement de langue peut affecter divers autres paramètres (dont le genre, la vitesse, l'âge, la hauteur tonale, etc.), ce qui peut perturber l'auditeur. Des interruptions non naturelles peuvent même avoir lieu entre les glissements de langue. Pour ces raisons, les auteurs sont invités à utiliser l'élément voice pour changer de langue. L'attribut xml:lang est admis sur les éléments p et s seulement parce que les changements de langues sont courants à ces niveaux.

Bien que l'attribut soit également permis sur l'élément desc, aucun des comportements de changements de voix décrits dans cette section ne s'applique quand il est utilisé avec cet élément.

<?xml version="1.0"?>
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://www.w3.org/2001/10/synthesis
                   http://www.w3.org/TR/speech-synthesis/synthesis.xsd"
         xml:lang="fr">
  <p>Je ne parle pas japonais.</p>
  <p xml:lang="ja">日本語が分かりません。</p>
</speak>

Si un document demande une sortie vocale dans une langue non gérée par le processeur, le comportement sera largement déterminé par le synthétiseur. Une définition d'attribut xml:lang n'implique pas un changement de voix, quoique cela puisse effectivement arriver. Lorsqu'une voix donnée n'est pas apte à dire un contenu dans la langue indiquée, le processeur peut en sélectionner une nouvelle. Aucun changement ne devrait intervenir dans la voix ou la prosodie si la valeur courante de l'attribut xml:lang est identique à celle héritée. On trouvera des informations complémentaires concernant la sélection d'une voix dans la section 3.2.1.

La mise en œuvre des changements de voix avec l'attribut xml:lang peut varier d'un processeur conforme à l'autre pour des éléments de balisage différents (par exemple, les éléments p et s).

Tous les éléments devraient traiter leur contenu en fonction de la langue englobante. Par exemple, les éléments phoneme, emphasis, break, p et s devraient chacun être restitués de façon appropriée pour la langue courante.

La langue courante peut affecter l'étape de traitement de normalisation de texte. C'est le cas pour la gestion du balisage par l'élément say-as et pour le comportement hors balisage. Dans l'exemple suivant, le même texte 2/1/2000 peut se lire February first two thousand dans la première phrase régie par les règles de prononciation anglaises américaines, mais le deux janvier deux mille (en italien) dans la seconde phrase régie par les règles italiennes de prétraitement.

<?xml version="1.0" encoding="ISO-8859-1"?>
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://www.w3.org/2001/10/synthesis
                   http://www.w3.org/TR/speech-synthesis/synthesis.xsd"
         xml:lang="en-US">
  <s>Today, 2/1/2000.</s>
  <!-- Today, February first two thousand -->
  <s xml:lang="it">Un mese fà, 2/1/2000.</s>
  <!-- Un mese fà, il due gennaio duemila -->
  <!-- Il y a un mois, le deux janvier deux mille -->
</speak>

3.1.3 L'adresse URI de base : l'attribut xml:base

Les adresses URI relatives se résolvent par rapport à une adresse URI de base, laquelle peut provenir de plusieurs sources. La déclaration de l'adresse URI de base permet à l'auteur de définir explicitement l'adresse URI de base du document. Cf. la section 3.1.3.1 pour des précisions sur la résolution des adresses URI relatives.

La déclaration d'adresse URI de base est permise mais optionnelle. Les deux éléments qu'elle affecte sont les suivants :

audio
L'attribut optionnel src peut indiquer une adresse URI relative.
lexicon
L'attribut uri peut indiquer une adresse URI relative.

L'attribut xml:base

La déclaration d'adresse URI de base obéit à la recommandation [XML-BASE] ; elle se manifeste au travers d'un attribut xml:base sur l'élément racine speak.

<?xml version="1.0"?>
<speak version="1.0" xml:lang="fr"
         xmlns="http://www.w3.org/2001/10/synthesis"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://www.w3.org/2001/10/synthesis
                   http://www.w3.org/TR/speech-synthesis/synthesis.xsd"
         xml:base="http://www.example.com/chemin-du-fichier-de-base">
<?xml version="1.0"?>
<speak version="1.0" xml:lang="fr"
         xmlns="http://www.w3.org/2001/10/synthesis"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://www.w3.org/2001/10/synthesis
                   http://www.w3.org/TR/speech-synthesis/synthesis.xsd"
         xml:base="http://www.example.com/autre-chemin-du-fichier-de-base">

3.1.3.1 La résolution des adresses URI relatives

Les agents utilisateurs doivent calculer l'adresse URI de base pour résoudre les adresses URI relatives conformément au document [RFC2396]. Voici comment l'appliquer aux documents de synthèse vocale.

Les agents utilisateurs doivent entreprendre le calcul de l'adresse URI de base dans l'ordre de priorité suivant (du plus au moins prioritaire) :

  1. L'adresse URI de base est fixée par l'attribut xml:base sur l'élément speak (cf. section 3.1.3) ;
  2. L'adresse URI de base est fournie par les métadonnées découvertes au cours d'un échange protocolaire, telle qu'une en-tête HTTP (cf. [RFC2616]) ;
  3. Par défaut, l'adresse URI de base est celle du document courant. Les documents de synthèse vocale n'ont pas tous une adresse URI de base (par exemple, un document de synthèse vocal peut apparaître dans un courrier électronique sans être désigné par une adresse URI). Une condition d'erreur apparaît lorsque de tels documents contiennent des adresses URI relatives.

3.1.4 Le lexique de prononciation : l'élément lexicon

Un document SSML peut appeler un ou plusieurs lexiques de prononciation externes. On identifie un document de lexique par une adresse URI et un type de média optionnel. Il n'a pas encore été défini de type de média normalisé par défaut pour les lexiques pour cette spécification.

Le groupe de travail Voice Browser du W3C poursuit le développement de la spécification du langage de balisage des lexiques de prononciation [LEX]. Elle doit régler les questions concernant le processus de correspondance entre les atomes et les entrées de lexique, et le mécanisme par lequel le synthétiseur gérera plusieurs prononciations d'après les lexiques internes et ceux définis par la synthèse. La gestion des prononciations au travers de formats de lexiques propriétaires sera forcément spécifique au synthétiseur en question.

Un document de lexique contient des données de prononciation pour les atomes apparaissant dans le texte à dire. Ces informations dans le lexique servent pour les atomes contenus dans le document appelant.

Les lexiques de prononciation sont forcément spécifiques à une langue. La consultation dans un lexique et l'inférence de la prononciation d'un atome peuvent utiliser un algorithme spécifique à la langue. Comme indiqué dans la section 1.2, la définition même de la nature d'atome peut être spécifique à la langue.

Lorsque plusieurs lexiques sont appelés, leur priorité augmente en avançant dans le document. Il s'agit ici de l'atome à rechercher en priorité dans le lexique. S'il ne s'y trouve pas, le lexique suivant est exploré, et ainsi de suite, jusqu'à la première correspondance ou jusqu'à épuisement de tous les lexiques utilisés pour la recherche.

L'élément lexicon

L'élément speak admet un nombre quelconque de sous-éléments lexicon immédiats. L'élément lexicon doit avoir un attribut uri pour indiquer l'adresse URI où trouver le document de lexique de prononciation.

L'élément lexicon peut avoir un attribut type indiquant le type de média du document de lexique de prononciation.

<?xml version="1.0"?>
<!DOCTYPE speak PUBLIC "-//W3C//DTD SYNTHESIS 1.0//EN"
                  "http://www.w3.org/TR/speech-synthesis/synthesis.dtd">
<speak version="1.0"
       xmlns="http://www.w3.org/2001/10/synthesis"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.w3.org/2001/10/synthesis
                 http://www.w3.org/TR/speech-synthesis/synthesis.xsd"
       xml:lang="fr">

  <lexicon uri="http://www.example.com/lexique.fichier"/>
  <lexicon uri="http://www.example.com/mots-curieux.fichier"
           type="type-de-média"/>
  ...
</speak>

Précisions sur l'attribut type

Remarque : La description et le tableau suivants utilisent le type de lexique d'un vendeur imaginaire x-vnd.example.lexique. Ceci pour représenter si besoin tout format renvoyé/disponible.

Une ressource de lexique, désignée par un appel d'adresse URI, peut être disponible dans plusieurs types de média. L'auteur SSML peut indiquer le type de média préféré via l'attribut type. Lorsque le contenu représenté par une adresse URI est disponible en plusieurs formats de données, le synthétiseur peut utiliser le type préféré afin d'influencer le choix du format à utiliser. Par exemple, sur un serveur capable d'une négociation de contenu HTTP, le processeur peut utiliser le type pour déterminer des préférences pendant ladite négociation.

À réception, la ressource désignée par un appel d'adresse URI peut être classée en deux types : le type de média déclaré, qui est la valeur d'allégation de la ressource, et le type de média réel, qui est le format véritable de son contenu. Le type réel devrait être identique au type déclaré, mais ce n'est pas toujours le cas (par exemple, un serveur HTTP mal configuré pourrait renvoyer le type text/plain pour un document au lieu du type du format spécifique du vendeur x-vnd.example.lexique). Un système d'addressage URI particulier peut, selon les cas, imposer au propriétaire de la ressource de toujours renvoyer un type de média, ou bien parfois, ou bien jamais. Dès lors qu'un type de média est renvoyé, il fait autorité. Le type de média déclaré est déterminé d'après la valeur renvoyée par le propriétaire de la ressource ou, si rien n'est renvoyé, par le type de média préféré fourni dans le document SSML.

Trois cas particuliers peuvent se présenter : le type déclaré n'est pas géré par le processeur et il y a condition d'erreur ; le type déclaré est géré mais le type réel ne correspond pas, et il y a aussi condition d'erreur ; enfin aucun type de média n'est déclaré et le comportement dépend alors du système d'adressage URI particulier et des capacités du synthétiseur. Par exemple, le protocole HTTP 1.1 permet une introspection du document (cf. [RFC2616 §7.2.1]), ou encore le schéma de données se replie sur un type de média par défaut, ou encore la méthode d'accès local ne définit aucune solution. Le tableau suivant fournit quelques exemples informatifs :

Exemples pour le type de média
Requête HTTP 1.1 Méthode d'accès local
Type de média renvoyé par le propriétaire de la ressource text/plain x-vnd.example.lexique <aucun> <aucun>
Type de média préféré dans le document SSML Ne s'applique pas ; le type renvoyé fait autorité. x-vnd.example.lexique <aucun>
Type de média déclaré text/plain x-vnd.example.lexique x-vnd.example.lexique <aucun>
Comportement pour le type réel x-vnd.example.lexique Le document doit être traité comme étant de type "text/plain". Si le type "text/plain" n'est pas géré, ou si le document ne respecte pas le format attendu, il y a alors condition d'erreur. Le type déclaré et le type réel correspondent ; succès si x-vnd.example.lexique est géré par le synthétiseur, sinon il y a condition d'erreur. Propre au système ; le synthétiseur peut examiner le contenu du document pour en déterminer le type.

L'élément lexicon est un élément vide.

3.1.5 L'élément meta

Les éléments metadata et meta sont des conteneurs où l'on peut placer des informations à propos du document. L'élément metadata permet un traitement plus général et plus puissant des métadonnées que l'élément meta car il utilise un schéma de métadonnées.

Une déclaration meta associe une chaîne à un attribut meta déclaré, ou bien déclare un contenu http-equiv. L'un ou l'autre attribut name ou http-equiv est obligatoire. Il y a condition d'erreur si les deux attributs name et http-equiv sont présents. L'attribut content est obligatoire. La propriété seeAlso est le seul nom de propriété défini pour l'élément meta. Cette propriété sert à désigner une ressource susceptible d'apporter des métadonnées supplémentaires à propos du contenu. Elle s'inspire de la propriété seeAlso du schéma du cadre de description de ressources (RDF 1.0) [RDF-SCHEMA §5.4.1]. L'attribut http-equiv prend une importance spéciale pour les documents récupérés via le protocole HTTP. Quoique les champs d'en-têtes HTTP constituent la méthode préférée pour fournir des informations d'en-têtes HTTP, l'auteur du document SSML peut mettre à profit le contenu de l'attribut http-equiv s'il n'a pas la possibilité de configurer les champs d'en-tête HTTP associés à ses documents sur le serveur origine, par exemple, les instructions de mise en cache. Remarquez que les serveurs et caches HTTP ne sont pas obligés d'examiner le contenu des éléments meta dans les documents SSML et d'écraser en conséquence les valeurs d'en-têtes qu'ils auraient sinon envoyées.

Pour information : Voici un exemple d'inclusion d'éléments meta dans un document SSML afin d'y indiquer une ressource offrant des métadonnée supplémentaires et que le document ne doit pas être mis en cache :

<?xml version="1.0"?>
<!DOCTYPE speak PUBLIC "-//W3C//DTD SYNTHESIS 1.0//EN"
                  "http://www.w3.org/TR/speech-synthesis/synthesis.dtd">
<speak version="1.0"
       xmlns="http://www.w3.org/2001/10/synthesis"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.w3.org/2001/10/synthesis
                 http://www.w3.org/TR/speech-synthesis/synthesis.xsd"
       xml:lang="fr">

       <meta name="seeAlso" content="http://example.com/mes-metadonnees-ssml.xml"/>
       <meta http-equiv="Cache-Control" content="no-cache"/>

</speak>

L'élément meta est un élément vide.

3.1.6 L'élément metadata

L'élément metadata est un élément dans lequel on peut placer des informations à propos du document en utilisant un schéma de métadonnée. Bien que n'importe quel schéma de métadonnée puisse être employé avec l'élément metadata, on recommande d'utiliser conjointement la syntaxe XML du cadre de description de ressources (RDF) [RDF-XMLSYNTAX] et les propriétés de métadonnées générales définies par l'initiative Dublin Core [DC].

Le cadre de description de ressources [RDF] est un langage déclaratif fournissant une méthode normalisée XML pour représenter les métadonnées sous forme de déclarations sur les propriétés et relations des éléments sur le Web. Les créateurs de contenus devraient consulter les recommandations du W3C sur les métadonnées ([RDF-XMLSYNTAX] et [RDF-SCHEMA]) pour décider quel schéma RDF de métadonnées employer dans leurs documents. Il devraient également consulter l'initiative Dublin Core [DC], qui établit un ensemble de propriétés de métadonnées de base d'utilisation générale (par exemple, Title, Creator, Subject, Description, Rights, etc.).

Les propriétés du document déclarées par l'élément metadata peuvent utiliser n'importe quel schéma de métadonnées.

Pour information : Voici un exemple d'inclusion d'un élément metadata dans un document SSML, en utilisant le schéma RDF de l'initiative Dublin Core version 1.0 [DC] pour décrire des informations générales à propos du document, tels que le titre, la description, la date, et ainsi de suite :

<?xml version="1.0"?>
<!DOCTYPE speak PUBLIC "-//W3C//DTD SYNTHESIS 1.0//EN"
                  "http://www.w3.org/TR/speech-synthesis/synthesis.dtd">
<speak version="1.0"
       xmlns="http://www.w3.org/2001/10/synthesis"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.w3.org/2001/10/synthesis
                 http://www.w3.org/TR/speech-synthesis/synthesis.xsd"
       xml:lang="fr">
    
  <metadata>
   <rdf:RDF
       xmlns:rdf = "http://www.w3.org/1999/02/22-rdf-syntax-ns#"
       xmlns:rdfs = "http://www.w3.org/2000/01/rdf-schema#"
       xmlns:dc = "http://purl.org/dc/elements/1.1/">

   <!-- Métadonnées sur le document de synthèse vocale -->
   <rdf:Description rdf:about="http://www.example.com/meta.ssml"
       dc:Title="Soliloque à la Hamlet"
       dc:Description="Le soliloque d'Aldine dans le style de Hamlet"
       dc:Publisher="W3C"
       dc:Language="fr"
       dc:Date="2002-11-29"
       dc:Rights="Copyright 2002 Aldine Turnbet"
       dc:Format="application/ssml+xml" >                
       <dc:Creator>
          <rdf:Seq ID="NomCreateursOrdreAlphabetique">
             <rdf:li>William Shakespeare</rdf:li>
             <rdf:li>Aldine Turnbet</rdf:li>
          </rdf:Seq>
       </dc:Creator>
   </rdf:Description>
  </rdf:RDF>
 </metadata>

</speak>

Le contenu de l'élément metadata peut être arbitraire, toutefois le synthétiseur n'en restituera aucune partie.

3.1.7 La structure du texte : les éléments p et s

L'élément p représente un paragraphe et l'élément s une phrase.

L'atttribut xml:lang est défini pour les éléments p et s.

<?xml version="1.0"?>
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://www.w3.org/2001/10/synthesis
                   http://www.w3.org/TR/speech-synthesis/synthesis.xsd"
         xml:lang="fr">
  <p>
    <s>Voici la première phrase du paragraphe.</s>
    <s>Et une autre.</s>
  </p>
</speak>

Les éléments p et s sont optionnels. Lorsque du texte se présente sans élément p (ou s) englobant, le synthétiseur devrait essayer d'en déterminer la structure, en utilisant une connaissance spécifique à la langue du format du texte ordinaire.

L'élément p peut seulement contenir du texte à restituer et/ou les éléments suivants : audio, break, emphasis, mark, phoneme, prosody, say-as, sub, s et voice.

L'élément s peut seulement contenir du texte à restituer et/ou les éléments suivants : audio, break, emphasis, mark, phoneme, prosody, say-as, sub et voice.

3.1.8 L'élément say-as

L'élément say-as permet à l'auteur de fournir des informations à propos du type de la structure textuelle qu'il contient et d'aider à la définition du niveau de détails de la restitution du texte contenu.

Il est difficile de définir un ensemble complet des types de formats de texte à cause de la diversité des langues à considérer et de la flexibilité innée des langues écrites. Le langage SSML définit uniquement l'élément say-as, ses attributs et leurs buts. Il n'énumère pas les valeurs possibles des attributs. Le groupe de travail prévoit de produire un document séparé afin de définir des valeurs normalisées ainsi que le comportement associé à ces valeurs. Les exemples donnés ici ne font qu'illustrer l'utilisation de l'élément et ses attributs.

L'élément say-as a trois attributs : interpret-as, format et detail ; l'attribut interpret-as est obligatoire, les deux autres sont optionnels. Les valeurs légales de l'attribut format dépendent de la valeur de l'attribut interpret-as.

L'élément say-as peut uniquement contenir du texte à restituer.

Les attributs interpret-as et format

L'attribut interpret-as indique le type de contenu de la structure textuelle contenue. La définition du type de contenu aide le synthétiseur à distinguer et interpréter les structures textuelles qui peuvent être restituées de différentes façons selon le type d'information prévu. En outre, l'attribut optionnel format peut fournir d'autres indications sur le formatage précis du texte contenu des types de contenu dont les formats peuvent être ambigus.

Le synthétiseur doit interpréter les valeurs des attributs interpret-as et format, s'ils sont définis, comme des indications de l'auteur du document balisé afin de guider la normalisation de texte et la prononciation.

Dans tous les cas, le texte englobé par un élément say-as est censé être une forme orthographique normalisée dans la langue du contexte courant. Un synthétiseur devrait être capable de prendre en charge les formes orthographiques communes de la langue indiquée pour chaque type de contenu géré.

Si le processeur ne reconnaît pas la valeur de l'attribut interpret-as ou ne la gère pas, il doit restituer le texte contenu comme si l'attribut interpret-as n'avait pas reçu de valeur.

Si le processeur ne reconnaît pas la valeur de l'attribut format ou ne la gère pas, il doit restituer le texte contenu comme si l'attribut format n'avait pas reçu de valeur, en utilisant la valeur indiquée par l'attribut interpret-as.

Si le contenu de l'élément say-as comprend un autre texte, parallèlement au contenu dans le type indiqué par les attributs format et interpret-as, alors cet autre texte doit être restitué. Le processeur peut restituer l'autre texte dans le type indiqué par l'attribut interpret-as de l'élément où il apparaît.
Si le contenu de l'élément say-as ne comprend aucune partie dans le type indiqué par l'attribut interpret-as (ou format), le processeur doit restituer le contenu comme si l'attribut format n'était pas présent, ou bien comme si l'attribut interpret-as n'était pas présent, ou bien comme si ni les attributs format ni interpret-as n'étaient présents. Le processeur devrait également informer l'environnement de cette inadaptation.

L'indication du type de contenu ou du format n'affecte pas forcément la façon dont l'information est prononcée. Un synthétiseur devrait prononcer le texte contenu de la façon dont un tel contenu est normalement produit pour la langue.

L'attribut detail

L'attribut optionnel detail indique le niveau de détails à dire ou à restituer. Chaque valeur de l'attribut detail doit restituer tout le contenu informationnel du texte contenu ; toutefois, on peut utiliser des valeurs particulières de l'attribut detail pour restituer un contenu habituellement non informationnel dans la composition courante mais dont la restitution peut être importante pour certaines raisons. Par exemple, un synthétiseur restituera habituellement les signes de ponctuation par des changements appropriés dans la prosodie. On peut fixer un niveau de détails supérieur pour que les signes de ponctuation soient dit explicitement, par exemple, pour lire des codes de pièces de rechange ou des morceaux de programme.

L'attribut detail peut servir avec tous les types indiqués par l'attribut interpret-as.

Si l'attribut detail n'est pas indiqué, le niveau de détails produit par le synthétiseur dépendra du contenu textuel et de la langue.

Si le processeur ne reconnaît pas la valeur de l'attribut detail ou ne la gère pas, alors il doit restituer le texte contenu comme si l'attribut detail n'avait pas reçu de valeur.

3.1.9 L'élément phoneme

L'élément phoneme donne une prononciation phonémique/phonétique du texte contenu. L'élément phoneme peut être vide. Toutefois, on recommande qu'il contienne du texte lisible par un humain pouvant être utilisé pour une restitution non sonore du document. Par exemple, le contenu peut être présenté visuellement à des utilisateurs sourds.

L'attribut obligatoire ph indique la chaîne de phonème/phone.

Cet élément est conçu strictement pour les notations phonémiques et phonétiques ; il indique la prononciation d'un mot ou d'une très petite phrase. La chaîne phonémique/phonétique ne subit aucune normalisation de texte ni n'est traitée comme un atome à rechercher dans le lexique (cf. section 3.1.4), au contraire des valeurs dans les éléments say-as et sub qui peuvent passer par les deux. En bref, les chaînes phonémiques se composent de phonèmes, c'est-à-dire d'unités de parole, dépendantes de la langue, et qui caractérisent en linguistique des différences significatives dans la langue ; grosso modo, les phonèmes représentent tous les sons nécessaires pour distinguer un mot d'un autre dans une langue donnée. Les chaînes phonétiques se composent de phones, c'est-à-dire d'unités de parole qui caractérisent la façon (souffle, claquement, vocalisation, etc.) et le lieu de l'articulation (en avant, au milieu, en arrière, etc.) dans le tractus de la voix humaine, etc., et qui sont donc indépendantes de la langue ; les phones représentent des distinctions réalisées pour la production de la parole humaine.

L'attribut optionnel alphabet désigne l'alphabet phonémique/phonétique. Dans ce contexte, un alphabet se rapporte à un ensemble de symboles représentant les sons d'une ou de plusieurs langues. Les seules valeurs valides de cet attribut sont "ipa" (cf. le paragraphe suivant) et des chaînes définies par les vendeurs de la forme x-organisation ou x-organisation-alphabet. Par exemple, l'Association des industries électroniques et des technologies de l'information du Japon (JEITA) [JEITA] pourrait encourager l'utilisation d'un alphabet de phonèmes identifié par x-JEITA ou x-JEITA-2000 [JEIDAALPHABET].

Les synthétiseurs devraient gérer la valeur "ipa" de l'attribut alphabet, laquelle correspond aux représentations Unicode des caractères phonétiques développés par l'Association phonétique internationale (API) [IPA]. Outre un ensemble complet de symboles pour les voyelles et les consonnes, ce jeu de caractères comprend un délimiteur de syllabes, de nombreux diacritiques, des symboles d'accentuation, des symboles de tons lexicaux, des signes d'intonation et plus. Pour cet alphabet, les valeurs légales de l'attribut ph sont les chaînes de valeurs définies dans l'annexe 2 du manuel [IPAHNDBK]. On peut trouver des tableaux informatifs des correspondances API vers Unicode dans [IPAUNICODE1] et [IPAUNICODE2]. Remarquez que les caractères API ne sont pas tous disponibles dans Unicode. Pour un processeur prenant en charge cet alphabet :

<?xml version="1.0"?>
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://www.w3.org/2001/10/synthesis
                   http://www.w3.org/TR/speech-synthesis/synthesis.xsd"
         xml:lang="en-US">
  <phoneme alphabet="ipa" ph="t&#x259;mei&#x325;&#x27E;ou&#x325;"> tomato </phoneme>
  <!-- Voici un exemple de code API avec des entités de caractère -->
  <!-- Puisque beaucoup de combinaisons plateforme/navigateur/éditeur de texte
       n'effectuent pas un copier-coller correct du texte Unicode,
       cet exemple utilise les versions d'entités masquées des caractères API.
       Normalement, on utiliserait directement la représentation UTF-8
       de ces symboles : "təmei̥ɾou̥". -->
</speak>

Il y a condition d'erreur si la valeur indiquée par l'attribut alphabet est inconnue, ou si elle n'est pas applicable par le synthétiseur. Si l'attribut alphabet n'est pas défini, le comportement dépend du processeur.

L'élément phoneme peut uniquement contenir du texte (aucun élément).

3.1.10 L'élément sub

L'élément sub sert à indiquer que le texte dans l'attribut alias remplace celui qu'il contient pour la prononciation. Un document peut ainsi contenir à la fois une forme parlée et une forme écrite. L'attribut obligatoire alias indique la chaîne à prononcer à la place de la chaîne englobée. Le processeur devrait effectuer une normalisation de texte de la valeur de l'attribut alias.

L'élément sub peut uniquement contenir du texte (aucun élément).

<?xml version="1.0"?>
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://www.w3.org/2001/10/synthesis
                   http://www.w3.org/TR/speech-synthesis/synthesis.xsd"
         xml:lang="en-US">
  <sub alias="World Wide Web Consortium">W3C</sub>
  <!-- World Wide Web Consortium -->
</speak>

3.2 La prosodie et le style

3.2.1 L'élément voice

L'élément voice est utilisé en production pour demander le changement de la voix. Les attributs sont les suivants :

Bien que chaque attribut soit optionnel individuellement, il y a condition d'erreur si aucun attribut n'est défini dans l'utilisation de l'élément voice.

<?xml version="1.0"?>
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://www.w3.org/2001/10/synthesis
                   http://www.w3.org/TR/speech-synthesis/synthesis.xsd"
         xml:lang="fr">   
  <voice gender="female">Marie avait un petit agneau,</voice>
  <!-- on demande maintenant une autre voix féminine -->
  <voice gender="female" variant="2">
  Sa toison était blanche comme neige.
  </voice>
  <!-- une sélection de voix propre au processeur -->
  <voice name="Michel">Je veux être comme Michel.</voice>
</speak>

L'élément voice est couramment utilisé pour changer de langue. S'il n'y a aucune voix disponible correspondant exactement aux attributs définis dans le document, ou si plusieurs voix correspondent aux critères, l'algorithme de sélection de voix suivant doit être utilisé. L'algorithme est parfois incertain, auquel cas la sélection de la voix peut dépendre du processeur. Approximativement, la priorité de l'attribut xml:lang est la plus élevée, et les autres attributs ont une priorité équivalente mais inférieure. Voici l'algorithme complet :

  1. Si une voix est disponible pour la langue indiquée par l'attribut xml:lang, alors le synthétiseur doit l'utiliser. Si plusieurs voix de ce type sont disponibles, alors le processeur devrait utiliser celle qui correspond le mieux aux valeurs indiquées par les attributs name, variant, gender et age ;
  2. Si aucune voix n'est disponible pour la langue indiquée par l'attribut xml:lang, alors le processeur devrait sélectionner celle la plus proche de la langue demandée (par exemple, une variante ou un dialecte de cette même langue). Si plusieurs voix de ce dernier type sont disponibles, alors le processeur devrait utiliser celle qui correspond le mieux aux valeurs indiquées par les attributs name, variant, gender et age ;
  3. Il y a condition d'erreur si le processeur reste indécis, en estimant qu'aucune voix ne suffit aux critères précédents.

Remarquez que l'on peut incorporer du texte dans une langue étrangère dans des cas simples (lorsqu'un changement de voix est superflu ou indésirable). Cf. l'annexe F pour des exemples.

Les attributs de l'élément voice sont hérités en descendant l'arbre hiérarchique du document, y compris par les éléments qui changent de langue.

<?xml version="1.0"?>
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://www.w3.org/2001/10/synthesis
                   http://www.w3.org/TR/speech-synthesis/synthesis.xsd"
         xml:lang="fr">
  <voice gender="female"> 
    Une voix féminine ici.
    <voice age="6"> 
      Une voix de fillette ici.
      <p xml:lang="ja"> 
        <!-- Une voix féminine en japonais. -->
      </p>
    </voice>
  </voice>
</speak>

Les changements relatifs des paramètres prosodiques devraient se reporter d'une voix à l'autre. Par contre, puisqu'elles représentent des personnalités différentes, les diverses voix n'ont pas les mêmes valeurs naturelles par défaut en ce qui concerne la hauteur tonale, le rythme de la parole, etc., de sorte que les valeurs absolues de ces paramètre prosodiques peuvent varier au cours du changement de voix.

La qualité de la sortie sonore ou vocale pourra pâtir d'un changement de voix demandé au cours d'une phrase.

L'élément voice peut seulement contenir du texte à restituer et/ou les éléments suivants : audio, break, emphasis, mark, p, phoneme, prosody, say-as, sub, s et voice.

3.2.2 L'élément emphasis

L'élément emphasis oblige à dire le texte contenu avec emphase (on dit également mettre en exergue ou accentuer). Le synthétiseur détermine comment restituer l'emphase puisque sa nature diffère entre les langues, les dialectes ou même les voix. Les attributs sont les suivants :

<?xml version="1.0"?>
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://www.w3.org/2001/10/synthesis
                   http://www.w3.org/TR/speech-synthesis/synthesis.xsd"
         xml:lang="fr">
  Voici une <emphasis> grosse </emphasis> voiture !
  C'est un compte bancaire <emphasis level="strong"> énorme </emphasis> !
</speak>

L'élément emphasis peut seulement contenir du texte à restituer et/ou les éléments suivants : audio, break, emphasis, mark, phoneme, prosody, say-as, sub, voice.

3.2.3 L'élément break

L'élément vide break contrôle les pauses ou d'autres limites prosodiques entre les mots. L'utilisation de l'élément break entre deux mots est optionnelle. S'il n'est pas présent entre les mots, le synthétiseur devra déterminer automatiquement une interruption d'après le contexte linguistique. En pratique, l'élément break est utilisé le plus souvent pour neutraliser le comportement automatique habituel du synthétiseur. Les attributs de cet élément sont les suivants :

L'attribut strength sert à indiquer la force prosodique de l'interruption. Par exemple, les interruptions entre paragraphes sont habituellement plus fortes que celles entre les mots dans une phrase. Le synthétiseur peut insérer une pause pour interpréter une interruption prosodique. On peut également insérer une pause de longueur définie avec l'attribut time.

Si l'élément break est utilisé sans attribut strength ni attribut time, le processeur produira une interruption de force prosodique supérieure à celle qu'il aurait utilisée en absence d'élément break.

Si les deux attributs strength et time sont présents, le processeur insèrera une interruption dont la durée sera celle indiquée par l'attribut time, plus d'autres changements prosodiques en sortie selon la valeur de l'attribut strength.

<?xml version="1.0"?>
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://www.w3.org/2001/10/synthesis
                   http://www.w3.org/TR/speech-synthesis/synthesis.xsd"
         xml:lang="fr">
  Respirez à fond <break/>
  puis continuez. 
  Tapez 1 ou attendez la tonalité. <break time="3s"/>
  Vous n'avez rien dit ! <break strength="weak"/> Veuillez répéter.
</speak>

3.2.4 L'élément prosody

L'élément prosody permet de maîtriser la hauteur tonale, le rythme et le volume sonore de la sortie vocale. Tous les attributs suivants sont optionnels :

Bien que chaque attribut soit optionnel pris individuellement, il y a condition d'erreur si aucun n'est défini avec l'élément prosody. Les valeurs d'attributs intitulées x-quelque chose sont associées à extra quelque chose. Toutes les unités (Hz, st, etc.) sont sensibles à la casse. Remarquez également que les niveaux de tonalité habituels et les gammes tonales normalisées peuvent varier significativement selon la langue, tout comme les significations des valeurs étiquetées des cibles et gammes de tonalité.

Les nombres

Un nombre est une valeur en virgule flottante positive simple sans exponentielle. Les formats des valeurs légales sont les suivants : n, n., .n et n.n, où n représente une séquence composée d'un ou plusieurs chiffres.

Les valeurs relatives

Pour les attributs précédents, on peut définir les changements relatifs en tant que :

<?xml version="1.0"?>
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://www.w3.org/2001/10/synthesis
                   http://www.w3.org/TR/speech-synthesis/synthesis.xsd"
         xml:lang="fr">
  Le prix de XYZ est de <prosody rate="-10%">45€</prosody>
</speak>

Le profil tonal

Le profil tonal est défini par un ensemble de cibles, séparées par des espaces, repérées chronologiquement dans la sortie vocale. L'algorithme d'interpolation entre les cibles est spécifique au processeur. Dans chaque couple de la forme (repère chronologiquecible), la première valeur correspond à un pourcentage de la durée du texte contenu (un nombre suivi d'un signe pourcentage %), et la seconde à la valeur de l'attribut pitch (un nombre suivi de la chaîne Hz, ou un changement relatif, ou une valeur prédéfinie). Les valeurs de repère chronologique hors de l'intervalle 0% à 100% sont ignorées. Si aucune valeur de tonalité n'est définie pour 0% ou 100%, alors la cible de tonalité la plus proche est copiée. Toutes les valeurs de tonalité relatives le sont par rapport à la valeur de l'attribut pitch juste avant le texte contenu.

<?xml version="1.0"?>
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://www.w3.org/2001/10/synthesis
                   http://www.w3.org/TR/speech-synthesis/synthesis.xsd"
         xml:lang="fr">
  <prosody contour="(0%,+20Hz) (10%,+30%) (40%,+10Hz)">
    bonjour
  </prosody>
</speak>

L'attribut duration est prioritaire sur l'attribut rate, et l'attribut contour est prioritaire sur les attributs pitch et range.

La valeur par défaut de tous les attributs prosodiques ne change pas. Par exemple, un attribut rate omis signifie que le rythme reste le même tant à l'intérieur de l'élément qu'en dehors.

L'élément prosody peut seulement contenir du texte à restituer et/ou les attributs suivants : audio, break, emphasis, mark, p, phoneme, prosody, say-as, sub, s, voice.

Les limitations

Toutes les valeurs des attributs prosodiques sont indicatives. Si un synthétiseur n'est pas capable de restituer exactement le document comme indiqué (par exemple, essayant de fixer la tonalité à 1MHz, ou le rythme de la parole à un million de mots par minute), il doit s'efforcer de poursuivre le traitement en imposant une limite ou un substitut pour la valeur indiquée non gérée, et il peut informer l'environnement hôte du franchissement de ces limites.

Dans certains cas, le synthétiseur peut décider d'ignorer un balisage prosodique donné s'il détermine, par exemple, que la valeur indiquée est redondante, impropre ou erronée. En particulier, les systèmes de synthèse vocale par concaténation utilisant des unités acoustiques de grande dimension peuvent rejeter les éléments de balisage agissant sur la prosodie qui seraient redondants avec la prosodie d'une ou de plusieurs unités acoustique, ou sinon qui dégraderaient la qualité de la parole.

3.3 Les autres éléments

3.3.1 L'élément audio

L'élément audio permet d'insérer des fichiers sons enregistrés (cf. l'annexe A pour les formats obligatoires) et d'autres formats de son en conjonction avec une sortie de synthèse vocale. L'élément audio peut être vide. S'il ne l'est pas, il devrait contenir un texte à dire au cas où le document sonore ne serait pas disponible. Le contenu de remplacement peut comprendre du texte, du balisage de voix, des éléments desc ou d'autres éléments audio. Ce contenu peut également servir pour restituer le document en une sortie non audible et pour l'accessibilité (cf. l'élément desc). L'attribut src qui représente l'adresse URI d'un document avec un type MIME approprié est obligatoire.

<?xml version="1.0"?>
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://www.w3.org/2001/10/synthesis
                   http://www.w3.org/TR/speech-synthesis/synthesis.xsd"
         xml:lang="en-US">
                 
  <!-- Élément vide -->
  Veuillez dire votre nom après le bip.  <audio src="beep.wav"/>

  <!-- Élément conteneur avec un texte de remplacement -->
  <audio src="invite.au">De quelle ville voulez-vous décoller ?</audio>
  <audio src="bienvenue.wav">  
    <emphasis>Bienvenue</emphasis> sur le portail vocal. 
  </audio>

</speak>

La restitution de l'élément audio est réussie :

  1. Si la source audio appelée est lue, ou ;
  2. Si le synthétiseur est incapable de réaliser l'option précédente, mais réussit à restituer le contenu de remplacement, ou ;
  3. Si le processeur peut détecter que seule une sortie texte est nécessaire et que la restitution du contenu de remplacement a réussi.

Les conditions de la restitution du contenu de remplacement dépendent du processeur. Si la restitution de l'élément audio ne réussit pas, alors le synthétiseur devrait poursuivre le traitement et informer l'environnement hôte. Après lecture du début d'une source audio, le processeur peut déterminer que le clip audio ne peut être lu dans son intégralité. Par exemple, il peut se produire des problèmes de codage, des coupures du réseau, etc. Le processeur peut estimer si la restitution a réussi ou non, mais il doit documenter ce comportement.

L'élément audio peut seulement contenir du texte à restituer et/ou les éléments suivants : audio, break, desc, emphasis, mark, p, phoneme, prosody, say-as, sub, s, voice.

3.3.2 L'élément mark

L'élément vide mark place un repère dans la séquence texte/balises. Son seul attribut name, obligatoire, est de type xsd:token [SCHEMA2 §3.3.2]. On peut utiliser l'élément mark pour appeler une position spécifique dans la séquence texte/balises et aussi pour insérer un repère dans un flux de sortie pour une notification asynchrone. Lors du traitement d'un élément mark, le synthétiseur doit entreprendre l'une ou les deux actions suivantes :

L'élément mark n'affecte pas le processus de sortie vocale.

<?xml version="1.0"?>
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://www.w3.org/2001/10/synthesis
                   http://www.w3.org/TR/speech-synthesis/synthesis.xsd"
         xml:lang="en-US">
                 
Allez <mark name="ici"/> d'ici, à <mark name="la-bas"/> là-bas !

</speak>

3.3.3 L'élément desc

L'élément desc peut seulement apparaître contenu dans l'élément audio. Lorsque la source audio appelée dans l'élément audio n'est pas de la parole, par exemple, un fond sonore ou une ponctuation icono-sonique, elle devrait contenir un élément desc dont le contenu textuel est une description de la source audio (par exemple, une porte qui claque). Si le synthétiseur produit une sortie textuelle seule, le contenu de l'élément desc (ou plusieurs) devrait être restitué à la place d'un autre contenu de remplacement dans l'élément audio. L'attribut optionnel xml:lang peut être utilisé pour indiquer que le contenu de l'élément est dans une autre langue que le contenu qui l'entoure. Contrairement à toutes les autres utilisations de l'attribut xml:lang dans ce document, la présence (ou l'absence) de cet attribut n'aura aucun effet sur la sortie, dans le cas normal d'une sortie audio (au lieu d'une sortie textuelle).

<?xml version="1.0"?>
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://www.w3.org/2001/10/synthesis
                   http://www.w3.org/TR/speech-synthesis/synthesis.xsd"
         xml:lang="fr">
                 
  <!-- Utilisation normale de l'élément <desc> -->
  Les chefs d'état font souvent des erreurs lorsqu'ils parlent dans une langue
  étrangère. L'un de exemples le plus connu est celui de John F. Kennedy :
  <audio src="ichbineinberliner.wav">Si vous pouviez l'entendre,
  ce serait un enregistrement du discours de John F. Kennedy à Berlin.
    <desc>La célèbre gaffe en allemand de Kennedy</desc>
  </audio>

  <!-- Suggestion de la langue de l'enregistrement -->
  <!-- Bien qu'un enregistrement ne soit pas forcément dans la langue courante,
       (car peut-être, ce n'est même pas de la parole mais de la musique), l'auteur peut
       vouloir suggérer la langue de cet enregistrement en marquant l'élément <audio>
       entier au moyen d'un élément <voice>. Auquel cas, l'attribut xml:lang sur
       l'élément <desc> peut servir à replacer la description dans la
       langue originale. -->
  La même chose à nouveau mais avec une solution de repli différente :
  <voice xml:lang="de-DE">
    <audio src="ichbineinberliner.wav">Ich bin ein Berliner.
      <desc xml:lang="fr">La célèbre gaffe en allemand de Kennedy</desc>
    </audio>
  </voice>
</speak>

L'élément desc peut seulement contenir un texte descriptif.

4. Références

4.1 Les références normatives

[CSS2]
La spécification des feuilles de style en cascade (CSS) niveau 2, B. Bos, et al., rédacteurs. World Wide Web Consortium, 12 mai 1998. Cette version de la recommandation CSS2 se trouve à http://www.w3.org/TR/1998/REC-CSS2-19980512/. La dernière version de CSS2 est disponible à http://www.w3.org/TR/REC-CSS2/.
[IPAHNDBK]
Handbook of the International Phonetic Association, International Phonetic Association, Editors. Cambridge University Press, juillet 1999. Renseignements à propos du manuel disponibles à http://www.arts.gla.ac.uk/ipa/handbook.html.
[RFC1521]
Les extensions multi-usages du courrier Internet (MIME) première partie : Les mécanismes pour définir et décrire le format du corps des messages Internet, N. Borenstein et N. Freed, rédacteurs. IETF, septembre 1993. Ce document RFC est disponible à http://www.ietf.org/rfc/rfc1521.txt.
[RFC2045]
Les extensions multi-usages du courrier Internet (MIME) première partie : Le format du corps des messages Internet, N. Freed et N. Borenstein, rédacteurs. IETF, novembre 1996. Ce document RFC est disponible à http://www.ietf.org/rfc/rfc2045.txt.
[RFC2046]
Les extensions multi-usages du courrier Internet (MIME) deuxième partie : Les types de médias, N. Freed et N. Borenstein, rédacteurs. IETF, novembre 1996. Ce document RFC est disponible à http://www.ietf.org/rfc/rfc2046.txt.
[RFC2119]
Les mots-clés à utiliser dans les RFC pour indiquer les niveaux d'obligations, S. Bradner, rédacteur. IETF, mars 1997. Ce document RFC est disponible à http://www.ietf.org/rfc/rfc2119.txt.
[RFC2396]
Les identifiants de ressource uniformes (URI) : La syntaxe générique, T. Berners-Lee et al., rédacteurs. IETF, août 1998. Ce document RFC est disponible à http://www.ietf.org/rfc/rfc2396.txt.
[RFC3066]
Les étiquettes d'identification des langues, H. Alvestrand, rédacteur. IETF, janvier 2001. Ce document RFC est disponible à http://www.ietf.org/rfc/rfc3066.txt.
[SCHEMA1]
XML Schema Tome 1 : Les structures, H. S. Thompson, et al., rédacteurs. World Wide Web Consortium, 2 mai 2001. Cette version de la recommandation XML Schema tome 1 se trouve à http://www.w3.org/TR/2001/REC-xmlschema-1-20010502/. La dernière version de XML Schema 1 est disponible à http://www.w3.org/TR/xmlschema-1/.
[SCHEMA2]
XML Scheam Tome 2 : Les types de données, P.V. Biron et A. Malhotra, rédacteurs. World Wide Web Consortium, 2 mai 2001. Cette version de la recommandation XML Schema tome 2 se trouve à http://www.w3.org/TR/2001/REC-xmlschema-2-20010502/. La dernière version de XML Schema 2 est disponible à http://www.w3.org/TR/xmlschema-2/.
[TYPES]
Les types de médias MIME, IANA. Cette liste des types de médias enregistrés auprès de l'IANA, continuellement mise à jour, est disponible à http://www.iana.org/assignments/media-types/index.html.
[XML]
Le langage de balisage extensible (XML) 1.0 (deuxième édition), T. Bray et al., rédacteurs. World Wide Web Consortium, 6 octobre 2000. Cette version de la recommandation XML 1.0 se trouve à http://www.w3.org/TR/2000/REC-xml-20001006. La dernière version de XML 1.0 est disponible à http://www.w3.org/TR/REC-xml.
[XML-BASE]
XML Base, J. Marsh, rédacteur. World Wide Web Consortium, 27 juin 2001. Cette version de la recommandation XML Base se trouve à http://www.w3.org/TR/2001/REC-xmlbase-20010627/. La dernière version de XML Base est disponible à http://www.w3.org/TR/xmlbase/.
[XMLNS]
Les espaces de nommage dans XML, T. Bray et al., rédacteurs. World Wide Web Consortium, 14 janvier 1999. Cette version de la recommandation des espaces de nommage XML se trouve à http://www.w3.org/TR/1999/REC-xml-names-19990114/. La dernière version des espaces de nommage XML est disponible à http://www.w3.org/TR/REC-xml-names/.

4.2 Les références informatives

[DC]
Initiative Dublin Core, cf. http://dublincore.org/
[HTML]
La spécification HTML 4.01, D. Raggett et al., rédacteurs. World Wide Web Consortium, 24 décembre 1999. Cette version de la recommandation HTML 4.01 se trouve à http://www.w3.org/TR/1999/REC-html401-19991224/. La dernière version de HTML 4 est disponible à http://www.w3.org/TR/html4/.
[IPA]
L'association phonétique internationale , cf. le site Web de l'organisation à http://www.arts.gla.ac.uk/ipa/ipa.html.
[IPAUNICODE1]
L'alphabet phonétique international (API), J. Esling. Ce tableau des caractères API dans Unicode est disponible à http://web.uvic.ca/ling/resources/ipa/charts/unicode_ipa-chart.htm.
[IPAUNICODE2]
L'alphabet phonétique international dans Unicode, J. Wells. Ce tableau des valeurs Unicode des caractères API est disponible à http://www.phon.ucl.ac.uk/home/wells/ipa-unicode.htm.
[JEIDAALPHABET]
JEIDA-62-2000 Phoneme Alphabet. JEITA. Un résumé de ce document (en japonais) est disponible à http://it.jeita.or.jp/document/publica/standard/summary/JEIDA-62-2000.pdf.
[JEITA]
Japan Electronics and Information Technology Industries Association. Cf. http://www.jeita.or.jp/.
[JSML]
JSpeech Markup Language, A. Hunt, rédacteur. World Wide Web Consortium, 5 juin 2000. Copyright ©2000 Sun Microsystems, Inc. Cette version de la soumission JSML est disponible à http://www.w3.org/TR/2000/NOTE-jsml-20000605/. La dernière note du W3C sur JSML est disponible à http://www.w3.org/TR/jsml/.
[LEX]
Les besoins pour le balisage des lexiques de prononciation, F. Scahill, rédacteur. World Wide Web Consortium, 12 mars 2001. Cette version du document est un travail en cours. Cette version des besoins pour les lexiques se trouve à http://www.w3.org/TR/2001/WD-lexicon-reqs-20010312/. La dernière version des besoins pour les lexiques est disponible à http://www.w3.org/TR/lexicon-reqs/.
[RDF]
Introduction à RDF, F. Manola et E. Miller, rédacteurs. World Wide Web Consortium, 10 février 2004. Cette version de l'introduction à RDF est disponible à http://www.w3.org/TR/2004/REC-rdf-primer-20040210/. La dernière version de l'introduction à RDF est disponible à http://www.w3.org/TR/rdf-primer/.
[RDF-XMLSYNTAX]
La spécification de la syntaxe RDF/XML, D. Beckett, rédacteur. World Wide Web Consortium, 10 février 2004. Cette version de la recommandation de la syntaxe RDF/XML se trouve à http://www.w3.org/TR/2004/REC-rdf-syntax-grammar-20040210/. La dernière version de la syntaxe RDF/XML est disponible à http://www.w3.org/TR/rdf-syntax-grammar/.
[RDF-SCHEMA]
Le langage de description de vocabulaires RDF 1.0 : Le schéma RDF, D. Brickley et R. Guha, rédacteurs. World Wide Web Consortium, 10 février 2004. Cette version du schéma RDF se trouve à http://www.w3.org/TR/2004/REC-rdf-schema-20040210/. La dernière version du schéma RDF est disponible à http://www.w3.org/TR/rdf-schema/.
[REQS]
Les besoins du balisage de la synthèse vocale des langages de balisage de la voix, A. Hunt, rédacteur. World Wide Web Consortium, 23 décembre 1999. Cette version du document est un travail en cours. Cette version des besoins de la synthèse vocale se trouve à http://www.w3.org/TR/1999/WD-voice-tts-reqs-19991223/. La dernière version des besoins de la synthèse est disponible à http://www.w3.org/TR/voice-tts-reqs/.
[RFC2616]
Le protocole de transfert hypertexte -- HTTP/1.1, R. Fielding, et al., rédacteurs. IETF, juin 1999. Ce document RFC est disponible à http://www.ietf.org/rfc/rfc2616.txt.
[RFC2732]
Le format des adresses IPv6 littérales dans les adresses URL, R. Hinden, et al., rédacteurs. IETF, décembre 1999. Ce document RFC est disponible à http://www.ietf.org/rfc/rfc2732.txt.
[SABLE]
"SABLE: A Standard for TTS Markup", Richard Sproat, et al. Proceedings of the International Conference on Spoken Language Processing, R. Mannell and J. Robert-Ribes, Editors. Causal Productions Pty Ltd (Adelaide), 1998. Vol. 5, pp. 1719-1722. Les comptes rendus sont disponibles chez l'éditeur à http://www.causalproductions.com/.
[SMIL]
Le langage d'intégration multimédias synchronisés (SMIL 2.0), J. Ayars, et al., rédacteurs. World Wide Web Consortium, 7 août 2001. Cette version de la recommandation SMIL 2 se trouve à http://www.w3.org/TR/2001/REC-smil20-20010807/. La dernière version de SMIL2 est disponible à http://www.w3.org/TR/smil20/.
[UNICODE]
Le standard Unicode. The Unicode Consortium. On peut trouver des renseignements concernant le standard Unicode et ses version à http://www.unicode.org/standard/standard.html.
[VXML]
Le langage de balisage extensible de la voix (VoiceXML) version 2.0, S. McGlashan, et al., rédacteurs. World Wide Web Consortium, 16 mars 2004. Cette version de la recommandation VoiceXML 2.0 se trouve à http://www.w3.org/TR/2004/REC-voicexml20-20040316/. La dernière version de VoiceXML 2 est disponible à http://www.w3.org/TR/voicexml20/.

5. Remerciements

Ce document a été rédigé par les participants suivants du groupe de travail Voice Browser du W3C (listés par ordre alphabétique) :

Annexe A : Les formats des fichiers sonores

Cette annexe est normative.

Le langage SSML impose aux plateformes de lire les formats audio définis ci-dessous.

Les formats audio obligatoires
Format audio Type de média
Raw (sans en-tête) 8kHz 8-bit mono mu-law (PCM) monocanal. (G.711) audio/basic (issu de [RFC1521])
Raw (sans en-tête) 8kHz 8 bit mono A-law (PCM) monocanal. (G.711) audio/x-alaw-basic
WAV (en-tête RIFF) 8kHz 8-bit mono mu-law (PCM) monocanal. audio/x-wav
WAV (en-tête RIFF) 8kHz 8-bit mono A-law (PCM) monocanal. audio/x-wav

Le type MIME audio/basic est utilisé couramment avec le format de suffixe au tout comme le format 8-bit 8Khz mu-law sans en-tête. Si ce type MIME est indiqué pour la lecture, alors on doit utiliser le format mu-law. Pour la lecture avec le type MIME audio/basic, les processeurs doivent gérer le format mu-law ; ils peuvent gérer le format au.

Annexe B : L'internationalisation

Cette annexe est normative.

Le langage SSML est une application du langage XML 1.0 [XML] ; de ce fait, il gère la norme [UNICODE] laquelle définit un jeu universel de caractères standard.

SSML offre un mécanisme de contrôle de la langue parlée via l'attribut xml:lang. Les changements de langues peuvent intervenir autant de fois qu'il y a de mots, quoique la fréquence des changements puisse nuire à la qualité de la sortie audio. SSML permet également une plus grande maîtrise des prononciations de sortie au travers des éléments lexicon et phoneme, dont les caractéristiques peuvent aider à contrebalancer les lexiques par défaut de médiocre qualité pour les langues avec un support commercial réduit aujourd'hui.

Annexe C : Les types MIME et le suffixe de fichier

Cette annexe est normative.

Le groupe de travail Voice Browser du W3C a fait une demande de type MIME auprès de l'IETF pour le langage de balisage de synthèse vocale. La proposition actuelle est d'utiliser "application/ssml+xml".

Le groupe de travail Voice Browser du W3C a adopté comme convention d'utiliser le suffixe de nom de fichier .ssml pour les documents SSML dont la racine est l'élément speak.

Annexe D : Le schéma SSML

Cette annexe est normative.

Le schéma SSML se trouve à http://www.w3.org/TR/speech-synthesis/synthesis.xsd.

Remarque : Le schéma SSML inclut un schéma principal sans espace de nommage, disponible à http://www.w3.org/TR/speech-synthesis/synthesis-core.xsd, qui peut servir de point de départ à la définition de fragments SSML (cf. la section 2.2.1) incorporés dans des schémas d'espace de nommage non-SSML.

Annexe E : La définition DTD de SSML

Cette annexe est informative.

La définition DTD de SSML se trouve à http://www.w3.org/TR/speech-synthesis/synthesis.dtd.

À cause des limitations propres aux définitions DTD, la définition DTD de SSML n'exprime pas correctement le fait que l'élément metadata puisse contenir des éléments issus d'autres espaces de nommage XML.

Annexe F : Exemple SSML

Cette annexe est informative.

Voici un exemple de lecture d'en-têtes de messages électroniques. On utilise des éléments p et s pour marquer la structure du texte. Un élément break est placé avant de dire l'heure, ce qui a pour effet d'attirer l'attention de l'auditeur en signalant l'heure comme une information importante. On utilise un élément prosody pour ralentir le rythme de parole pour la lecture des sujets des messages, de sorte que l'auditeur ait plus grande latitude pour écouter et noter les détails.

<?xml version="1.0"?>
<!DOCTYPE speak PUBLIC "-//W3C//DTD SYNTHESIS 1.0//EN"
                  "http://www.w3.org/TR/speech-synthesis/synthesis.dtd">
<speak version="1.0"
       xmlns="http://www.w3.org/2001/10/synthesis"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.w3.org/2001/10/synthesis
                   http://www.w3.org/TR/speech-synthesis/synthesis.xsd"
       xml:lang="fr">
  <p>
    <s>Vous avez 4 nouveaux messages.</s>
    <s>Le premier, de Stéphanie Williams, est arrivé à <break/> 15:45.
    </s>
    <s>
      Le sujet est <prosody rate="-20%">randonnée à ski</prosody>
    </s>

  </p>
</speak>

L'exemple suivant combine des fichiers sons et différentes voix parlées pour donner des renseignements sur une collection de morceaux de musique.

<?xml version="1.0"?>
<!DOCTYPE speak PUBLIC "-//W3C//DTD SYNTHESIS 1.0//EN"
                  "http://www.w3.org/TR/speech-synthesis/synthesis.dtd">
<speak version="1.0"
       xmlns="http://www.w3.org/2001/10/synthesis"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.w3.org/2001/10/synthesis
                   http://www.w3.org/TR/speech-synthesis/synthesis.xsd"
       xml:lang="fr">

  <p>
    <voice gender="male">
      <s>Aujourd'hui, nous écoutons en avant-première le dernier morceau romantique du groupe Exemple.</s>

      <s>Voici ce que dit La revue du soft à propos du dernier hit d'Exemple.</s>
    </voice>
  </p>

  <p>
    <voice gender="female">
      Leurs chansons parlent de choses qui nous touchent tous.
    </voice>
  </p>

  <p>
    <voice gender="male">
      Voici un échantillon.  <audio src="http://www.example.com/music.wav"/>
      Voudriez-vous l'acheter ?
    </voice>
  </p>

</speak>

L'auteur voudra souvent inclure un bout de texte dans une langue étrangère (par exemple, un titre de film) dans une application, sans avoir à changer de langue (par exemple, via l'élément voice). Voici comment y parvenir simplement. Dans cet exemple, le synthétiseur restituerait le nom du film en utilisant les règles de prononciation de la langue englobante (fr dans ce cas), de même qu'un lecteur ignorant la langue étrangère en question essaierait de lire ce nom (et de le prononcer).

<?xml version="1.0" encoding="ISO-8859-1"?>
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://www.w3.org/2001/10/synthesis
                   http://www.w3.org/TR/speech-synthesis/synthesis.xsd"
         xml:lang="fr">
  
  Le titre du film est :
  La vita è bella
  (La vie est belle),
  réalisé par Roberto Benigni.
</speak>

Avec un petit peu plus de travail, on peut améliorer considérablement la qualité de la sortie soit en créant une prononciation personnalisée dans un lexique externe (cf. la section 3.1.4), soit en mettant à profit un élément phoneme comme ici.

Il faut remarquer que la gestion de l'alphabet API est une fonctionnalité optionnelle, et que la restitution des phonèmes d'une langue étrangère pourrait être approximative (cf. la section 3.1.4 pour des précisions). L'exemple suivant utilise uniquement des phonèmes français communs.

<?xml version="1.0" encoding="ISO-8859-1"?>
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://www.w3.org/2001/10/synthesis
                   http://www.w3.org/TR/speech-synthesis/synthesis.xsd"
         xml:lang="fr">
  
  Le titre du film est : 
  <phoneme alphabet="ipa"
    ph="&#x2C8;l&#x251; &#x2C8;vi&#x2D0;&#x27E;&#x259; &#x2C8;&#x294;e&#x26A; &#x2C8;b&#x25B;l&#x259;"> 
  La vita è bella </phoneme>
  <!-- La prononciation API est : ˈlɑ ˈviːɾə ˈʔeɪ ˈbɛlə -->
  (La vie est belle), 
  dirigé par 
  <phoneme alphabet="ipa"
    ph="&#x279;&#x259;&#x2C8;b&#x25B;&#x2D0;&#x279;&#x27E;o&#x28A; b&#x25B;&#x2C8;ni&#x2D0;nji"> 
  Roberto Benigni </phoneme>
  <!-- La prononciation API est : ɹəˈbɛːɹɾoʊ bɛˈniːnji -->

  <!-- Remarquez que, dans la réalité, l'auteur pourrait changer le codage
     pour UTF-8 et utiliser directement les caractères Unicode dans le document
     au lieu de faire appel à des valeurs masquées comme ici.
     On montre ces valeurs masquées pour faciliter la copie. -->
</speak>

Exemple d'intégration avec SMIL

Le langage SMIL [SMIL] est un langage de commande multimédia basé sur XML. Il convient très bien à la description d'applications médias dynamiques incluant une sortie vocale synthétisée.

Le contenu du fichier bienvenue.ssml est le suivant :

<?xml version="1.0"?>
<!DOCTYPE speak PUBLIC "-//W3C//DTD SYNTHESIS 1.0//EN"
                  "http://www.w3.org/TR/speech-synthesis/synthesis.dtd">

<speak version="1.0"
       xmlns="http://www.w3.org/2001/10/synthesis"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.w3.org/2001/10/synthesis
                   http://www.w3.org/TR/speech-synthesis/synthesis.xsd"
       xml:lang="fr">

  <s>
    <mark name="bienvenue"/>
    <emphasis>Bienvenue</emphasis> de la part du <sub alias="World Wide Web Consortium">W3C</sub>!
  </s>
</speak>

Exemple SMIL numéro 1 : L'image du logo du W3C apparaît puis la séquence vocale est restituée une seconde après. Le contenu du fichier bienvenue.smil est le suivant :

<smil xmlns="http://www.w3.org/2001/SMIL20/Language">
  <head>
    <top-layout width="640" height="320">
      <region id="ensemble" width="640" height="320"/>
    </top-layout>
  </head>
  <body>
    <par>
      <img src="http://www.w3.org/Icons/w3c_home" region="ensemble" begin="0s"/>
      <ref src="bienvenue.ssml" begin="1s"/>
    </par>
  </body>
</smil>

Exemple SMIL numéro 2 : L'image du logo du W3C apparaît ; un clic dessus la fait disparaître et lance la restitution de la séquence vocale. Le contenu du fichier bienvenue.smil est le suivant :

<smil xmlns="http://www.w3.org/2001/SMIL20/Language">
  <head>
    <top-layout width="640" height="320">
      <region id="ensemble" width="640" height="320"/>
    </top-layout>
  </head>
  <body>
    <seq>
      <img id="logo" src="http://www.w3.org/Icons/w3c_home" region="ensemble"
          begin="0s" end="logo.activateEvent"/>
      <ref src="bienvenue.ssml"/>
    </seq>
  </body>
</smil>

Exemple d'intégration avec VoiceXML

Voici un exemple de code SSML dans VoiceXML (cf. la section 2.3.3) pour les applications de navigation vocale. Il faut remarquer que l'espace de nommage VoiceXML inclut les éléments et attributs de l'espace de nommage SSML. Cf. l'annexe O de la spécification [VXML] pour des précisions.

<?xml version="1.0" encoding="UTF-8"?> 
<vxml version="2.0" xmlns="http://www.w3.org/2001/vxml" 
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  xsi:schemaLocation="http://www.w3.org/2001/vxml 
   http://www.w3.org/TR/voicexml20/vxml.xsd">
   <form>
      <block>
         <prompt>
           <emphasis>Bienvenue</emphasis> au Paradis de la graine.
           <audio src="rtsp://www.chantsdepiafs.example.com/grive.wav"/>
           Ce mois-ci, nous avons des barils de 250 kilo de graines de chardon
           au prix de 299,95€ transport en sus.
           <audio src="http://www.chantsdepiafs.example.com/colombe.wav"/>
         </prompt>
      </block>
   </form>
</vxml>

Annexe G : Résumé des changements depuis la recommandation candidate

Cette annexe est informative.

Voici une liste des principaux changements apportés à la spécification depuis le statut de recommandation candidate :

Valid XHTML 1.0!

Valid CSS!