AVVISO IMPORTANTE
L' unica versione normativa e' l'originale inglese. La
presente traduzione in italiano non puo' essere considerata normativa in alcuna
sua parte. Essa ha scopi puramente informativi per il lettore italiano e non e' un documento ufficiale del W3C. |
Si faccia riferimento all'errata per questo documento, che può includere alcune correzioni normative.
Si vedano anche le traduzioni.
Copyright ©1999 - 2004 W3C ® (MIT , ERCIM , Keio), All Rights Reserved. W3C liability, trademark, document use rules apply.
Il Gruppo di Lavoro sul Voice Browser (il browser vocale) ha cercato di sviluppare degli standard per permettere l'accesso al Web attraverso l'interazione vocale. Lo Speech Synthesis Markup Language è uno di questi standard ed è progettato per fornire un linguaggio di marcatura ricco e basato sull'XML che assista la generazione di discorsi sintetizzati per il Web e per altre applicazioni. Il ruolo essenziale del linguaggio di marcatura è quello di fornire, ai creatori di contenuti di sintesi vocale, un metodo standard di controllare i vari aspetti del discorso come la pronuncia, il volume, il tono, il ritmo ecc. su piattaforme di sintesi diverse.
Questa sezione descrive lo stato di questo documento al momento della sua pubblicazione. Altri documenti possono sostituire questo. Si può trovare una lista delle pubblicazioni odierne del W3C e delle ultime revisioni dei suoi rapporti tecnici sull'indice dei rapporti tecnici del W3C presso http://www.w3.org/TR/.
Questo documento contiene le specifiche dello Speech Synthesis Markup Language (SSML) 1.0 ed è una W3C Recommendation. È stato prodotto come parte della Voice Browser Activity. Gli autori di questo documento partecipano al gruppo di lavoro sul Voice Browser (solo per membri del W3C). Per maggiori informazioni si legga la Voice Browser FAQ. Questo è un documento stabile ed è stato approvato dai membri del W3C e dai partecipanti al gruppo di lavoro sul Voice Browser.
Il design del SSML 1.0 è stato completamente rivisto (si veda la disposition of comments) e soddisfa i requisiti tecnici del gruppo di lavoro. Un elenco delle implementazioni è incluso nel SSML 1.0 Implementation Report, insieme ai test associati.
I commenti sono benvenuti su [email protected] (archivio). Si vedano le linee guida sull'uso dell'archivio e delle mailing list del W3C.
Patent disclosures relevant to this specification may be found on the Working Group's patent disclosure page. This document has been produced under the 24 January 2002 CPP as amended by the W3C Patent Policy Transition Procedure. An individual who has actual knowledge of a patent which the individual believes contains Essential Claim(s) with respect to this specification should disclose the information in accordance with section 6 of the W3C Patent Policy.
Questa specifica del W3C è conosciuta come Speech Synthesis Markup Language (SSML) ed è basata sulle specifiche JSGF e/o JSML, che sono di proprietà di Sun Microsystems, Inc., California, U.S.A. La specifica JSML si trova su [JSML].
L'SSML è parte di un più vasto insieme di specifiche di marcatura per browser vocali sviluppate dal W3C in modo apertp. È progettato per fornire un linguaggio di marcatura ricco e basato sull'XML che assista la generazione di discorsi sintetizzati per il Web e per altre applicazioni. Il ruolo essenziale del linguaggio di marcatura è quello di fornire, ai creatori di contenuti sintetizzati, un modo standard di controllare i vari aspetti del discorso come la pronuncia, il volume, il tono, il ritmo ecc. su piattaforme di sintesi diverse. Un progetto simile di creazione di un sistema standard per la marcatura di testi è SABLE [SABLE], che tenta di integrare diversi linguaggi, basati sull'XML, per la sintesi vocale in uno solo. L'esperienza portata avanti da SABLE è stata usata come principale punto di partenza per la definizione dei Requisiti dello Speech Synthesis Markup per Linguaggi di Marcatura Vocale [REQS]. Ad oggi, SABLE non ha avuti ulteriori sviluppi.
L'uso a cui è destinato l'SSML è quello di migliorare la qualità dei contenuti sintetizzati. Diversi elementi di marcatura influenzano i passaggi del processo di sintesi (si veda la Sezione 1.2). Il sorgente può essere prodotto sia automaticamente, per esempio con XSLT o CSS3 da un documento XHTML, o tramite la scrittura diretta da parte dell'utente. Le marcature devono essere presenti in un documento SSML completo (si veda la Sezione 2.2.2) o come parte di un frammento (si veda la Sezione 2.2.1) contenuto in un'altro linguaggio, sebbene non siano specificate interazioni con altri linguaggi come parte dell'SSML stesso. Molti degli elementi inclusi nell'SSML possono essere utilizzati dalla maggior parte dei creatori di contenuti; tuttavia alcune caratteristiche avanzate come i phoneme e la prosody (per esempio per il raffinamento della pronuncia) possono richiedere conoscenze specifiche.
I processi di design e di standardizzazione hanno seguito gli Speech Synthesis Markup Requirements per Linguaggi di Marcatura Vocale [REQS].
Ecco i criteri chiave seguiti per il design del linguaggio.
Un sistema Text-To-Speech (un sintetizzatore vocale) che supporta SSML deve provvedere a renderizzare un documento in un output vocale ed usare le informazioni contenute nel sorgente per produrre il documento proprio come specificato dall'autore.
Creazione del documento: Un documento di testo da dare in input al sintetizzatore vocale può essere creato automaticamente, tramite scrittura manuale, o attraverso una combinazione di queste forme. L'SSML definisce la forma del documento.
Elaborazione del documento: Vediamo quali sono i sei passi principali fatti dal sintetizzatore vocale per convertire un testo marcato in un output vocale generato automaticamente. Il linguaggio di marcatura è stato progettato per essere sufficientemente ricco e quindi per permettere un controllo su tutti i passaggi descritti qui sotto, in modo che l'autore del documento (umano o macchina) possa controllare l'output vocale finale. Sebbene ogni passo sia diviso in "supporto di marcatura" e "comportamento senza marcatura", il comportamento reale è di solito un mix dei due e varia in dipendenza dei tag usati. Il sintetizzatore ha la responsabilità di assicurare che il prodotto finale sia pronunciabile (e idealmente intelligibile). In generale la marcatura fornisce all'autore un modo per dare informazioni, come la metrica, al sintetizzatore; di solito queste informazioni riguardano quelle caratteristiche che il sintetizzatore non può acquisire da solo. Infine tocca al sintetizzatore determinare se e in che modo usare tali informazioni.
Analisi XML: Un analizzatore (parser) XML viene usato per estrarre l'albero del documento e il suo contenuto dal documento di testo in ingresso. La struttura, i tag e gli attributi ottenuti in questo passaggio influenzano tutti gli step successivi. I token (le parole) nell'SSML non possono essere suddivise dai tag. Un esempio in Inglese è "cup<break/>board"; il sintetizzatore vocale lo tratterà come due parole, "cup" e "board", invece di una sola con una pausa in mezzo. Spezzare un token in diversi token in questo modo influenza il modo in cui il sintetizzatore lo tratterà.
Analisi della Struttura: La struttura di un documento influenza il modo in cui il documento deve essere letto. Per esempio, ci sono modelli vocali associati a paragrafi e a frasi.
Supporto di marcatura: Gli elementi p e s in SSML definiscono esplicitamente la struttura del documento che influenza l'output vocale.
Comportamento senza marcatura: In documenti o parti di documento dove questi elementi non vengono utilizzati, il sintetizzatore vocale deve dedurre la struttura dall'analisi automatica del testo, di solito utilizzando la punteggiatura ed altri dati specifici della particolare lingua.
Normalizzazione del testo: Tutte le lingue scritte hanno costrutti speciali che richiedono una conversione della forma scritta (o forma ortografica) nella forma parlata. La normalizzazione del testo è un processo automatico del sintetizzatore vocale che espleta questa conversione. Per esempio, in Inglese, quando in un documento appare "$200", deve essere letto come "two hundred dollars" (duecento dollari). In modo simile, "1/2" può essere letto come "half", "January second", "February first", "one of two" e così via. Alla fine di questo passaggio il testo da leggere è stato convertito completamente in token. I dettagli esatti su cosa costituisce un token sono specifici della lingua scelta. In Inglese, i token sono di solito separati da spazi bianchi e tipicamente sono parole. Per lingue che si comportano diversamente con i token, il termine "token", in questa specifica, significa una appropriata unità confrontabile.
Supporto di marcatura: L'elemento say-as può essere usato nel documento in input per indicare esplicitamente la presenza e il tipo di questi costrutti e per risolvere le ambiguità. L'insieme di costrutti che possono essere marcati non è ancora stato definito ma può includere date, tempo, numeri, acronimi, somme di denaro ecc. Si noti che molti acronimi ed abbreviazioni possono essere gestiti dall'autore tramite la modifica diretta del testo oppure con l'uso dell'elemento sub, per esermpio "BBC" può essere scritto come "B B C" e "AAA" può essere scritto come "tripla A". Queste forme scritte di sostituzione dovrebbero essere pronunciate come una persona pronuncierebbe gli acronimi originali. In caso di testo in Giapponese, se si ha un sintetizzatore vocale che supporta sia Kanji che kana, si dovrebbe poter usare l'elemento sub per identificare se 今日は debba essere letto come きょうは ("kyou wa" = "oggi") o こんにちは ("konnichiwa" = "ciao").
Comportamento senza marcatura: Per testi non marcati con l'elemento say-as il sintetizzatore vocale dovrà fare un ragionevole sforzo per individuare e convertire automaticamente questi costrutti in una forma leggibile. Per colpa delle ambiguità (come nel suddetto esempio di "1/2") e della vasta gamma di possibili costrutti in tutte le lingue, questo processo può creare errori nell'output vocale e può accadere che diversi sintetizzatori renderizzino lo stesso documento in modi diversi.
Conversione Testo-Fonema: Una volta che il sintetizzatore vocale ha determinato l'insieme delle parole che devono essere lette, deve capire la pronuncia di ciasuna parola. La pronuncia delle parole può essere ben descritta come sequenza di fonemi, che sono unità di suono in una lingua che servono a distinguere una parola dalle altre. Ogni lingua (e a volte ogni variante dialettale o nazionale di una lingua) ha uno specifico insieme di fonemi: per esempio, la maggior parte dei dialetti di Inglese Americano hanno circa 45 fonemi, l'Hawaiano ha tra 12 e 18 fonemi (dipende dall'interlocutore), alcune lingue ne hanno più di 100! Questa conversione è resa ancora più complessa da alcuni aspetti. Il primo riguarda le differenze che esistono tra la forma scritta e parlata di una lingua, e queste differenze possono portare ad indeterminatezza o ambiguità nella pronuncia delle parole scritte. Per esempio, confrontate con le forme scritte, le parole in Ebraico e Arabo vengono spesso scritte senza vocali, oppure vengono specificate poche vocali. In molte lingue la stessa parola scritta può essere letta in modi diversi. Per esempio, in Inglese, "read" può essere letto come "reed" (come nella frase "I will read the book") o "red" (come nella frase "I have read the book"). Sia un lettore umano che un sintetizzatore vocale possono pronunciare queste parole in modo corretto nel contesto, ma hanno difficoltà senza il contesto (si veda "Comportamento senza marcatura" qui sotto). Un'altro aspetto è la gestione delle parole con pronuncia o spelling non standard. Per esempio, un sintetizzatore vocale Inglese avrà spesso problemi nel determinare come pronunciare alcuni nomi di origine non Inglese, per esempio "Caius College" (che si legge "keys college") e President Tito (che si pronuncia "sutto"), il presidente della Repubblica di Kiribati (che si pronuncia "kiribass").
Supporto di marcatura: L'elemento phoneme permette di fornire una sequenza fonematica per ogni parola o sequenza di parole. Questa caratteristica permette ai creatori di contenuti di controllare esplicitamente la pronuncia. L'elemento say-as può essere anche usato per indicare che un certo testo è un nome proprio sul quale il sintetizzatore vocale può applicare particolari regole per determinarne la pronuncia. L'elemento lexicon può essere usato per fare riferimento a definizioni di pronuncia esterne. Questi elementi possono essere particolarmente utili per gli acronimi e le abbreviazioni sui quali il sintetizzatore è incapace di risolvere la pronuncia tramite la normalizzazione del testo e che non sono risolvibili attraverso la sostituzione del testo o con l'elemento sub (si veda il paragrafo 3, qui sopra).
Comportamento senza marcatura: In assenza di un elemento phoneme, il sintetizzatore vocale deve applicare delle procedure automatiche per determinare la pronuncia. Per raggiungere il suo scopo, di solito il sintetizzatore fa uso di un dizionario delle pronunce (dipendente dalla lingua) nel quale ricercare le parole e applicando varie regole per determinare le altre pronunce. I sintetizzatori vocali sono progettati per operare conversioni testo-fonema così che la maggior parte delle parole dei documenti possano essere gestite automaticamente. Come alternativa ad affidarsi al sintetizzatore, gli autori possono scegliere di operare alcune conversioni loro stessi, prima della codifica in SSML. Le parole con pronuncia indeterminata o ambigua possono essere rimpiazzate con parole senza pronuncia ambigua; per esempio, nel caso di "read", potremmo scrivere "I will reed the book". Gli autori devono però stare attenti, comunque, perché il documento SSML può non essere ideale per la visualizzazione.
Analisi della prosodia: La prosodia è l'insieme delle caratteristiche dell'output vocale che include tonalità (detta anche intonazione o melodia), tempo (o ritmo), pause, frequenza vocale, enfasi sulle parole ed altre caratteristiche. Produrre una prosodia simile a quella umana è importante per far sembrare il parlato naturale e per comunicare correttamente il significato del parlato.
Supporto di marcatura: Gli elementi emphasis, break e prosody possono essere usati congiuntamente dagli autori di documenti per guidare il sintetizzatore vocale nella generazione di un discorso con un appropriata prosodia.
Comportamento senza marcatura: In assenza di questi elementi, i sintetizzatori vocali sono maestri (ma non perfetti) nella generazione automatica di un'adeguata prosodia. Ciò viene realizzato tramite l'analisi della struttura del documento, della sintassi delle frasi ed altri informazioni che possono essere dedotte dal testo in input.
Anche se la maggior parte degli elementi in SSML possono essere considerati di alto livello in ciò che fanno sia sul testo che deve essere letto che sulla descrizione dello stile, gli elementi break e prosody appena menzionati lavorano ad un livello successivo del processo e per questo devono coesistere con l'elemento emphasis e con le caratteristiche di determinazione della prosodia proprie del sintetizzatore. A meno che non sia specificato nella specifica sezione, i dettagli sull'interazione tra il processo di determinazione del sintetizzatore e le informazioni fornite dall'autore del documento, a questo livello, sono specifici del sintetizzatore. Gli autori sono incoraggiati a non mischiare arbitrariamente questi due livelli di controllo.
Riproduzione della Waveform: Le informazioni sui fonemi e sulla metrica vengono usate dal sintetizzatore vocale nella renderizzazione della waveform. Ci sono molti approcci per questa operazione che possono essere ritenute variazioni specifiche del sintetizzatore.
Ci sono molti generi di creatori di documenti che producono testi marcati che devono essere letti dal sintetizzatore vocale. Non tutti i creatori di documenti (sia umani che macchine) hanno accesso alle informazioni che vengono usate negli elementi o nelle varie fasi descritte nella sezione precedente. Seguono alcuni dei casi più comuni.
Il creatore del documento non ha accesso alle informazioni per marcare il testo. Tutte le fasi di sintesi del sintetizzatore vocale devono essere svolte completamente in modo automatico sul testo grezzo. Il documento richiede solo l'elemento contenitore speak per indicare il testo che deve essere letto.
Quando il testo marcato è generato via software, il creatore può avere conoscenze specifiche sulla struttura e/o su costrutti di testo speciali, in parte o su tutto il documento. Per esempio, un client di posta può marcare le diciture di ora e data dei messaggi. Questo tipo di applicazioni possono usare elementi che influenzano la struttura, la normalizzazione del testo, la prosodia e magari la conversione testo-fonema.
Alcuni creatori di documenti compiono sforzi considerevoli per marcare più dettagli possibili del documento per assicurare una discreta qualità del parlato su diverse piattaforme e per specificare più precisamente la qualità dell'output. In questi casi, il testo marcato può usare alcuni o tutti gli elementi disponibili per controllare più strettamente l'output vocale. Per esempio, i messaggi generati dai servizi telefonici e i browser vocali possono essere messi a punto per massimizzare l'efficenza di tutto il sistema.
I creatori di documenti più smaliziati possono saltare la marcatura d'alto livello (struttura, normalizzazione del testo, conversione testo-fonema e analisi della prosodia) e produrre una marcatura di sintesi vocale di basso livello per frammenti di documento o per documenti interi. Di solito per fare un'operazione del genere c'è bisogno di strumenti per generare sequenze di fonemi, con informazioni su tonalità e frequenza. Per esempio, le applicazioni che fanno la "sintesi di copia" o la "copiatura della prosodia" provano ad emulare la dialettica umana copiando alcune proprietà dalle registrazioni.
Seguono alcuni esempi di architetture e progetti che possono generare documenti marcati per la sintesi vocali. Lo scopo del linguaggio è quello di facilitare ciascuno di questi approcci.
Linguaggi di Dialogo: È richiesta la possibilità di includere documenti SSML nei documenti di dialogo del Voice Browser Working Group.
Interoperabilità con aural CSS (ACSS): Ogni processore HTML che è compatibile con aural CSS può produrre documenti SSML. L'ACSS viene trattato nella Sezione 19 della Specifica su Cascading Style Sheets, level 2 (CSS2) [CSS2 §19]. Questo uso della sintesi vocale facilita l'accessibilità ai contenuti HTML e XHTML preesistenti.
Elaborazione di fogli di stile specifici per applicazione: Come già accennato, ci sono tipi di applicazione che conoscono il testo che deve essere letto, e che possono essere incorporate nella marcatura di sintesi vocale per migliorare il rendering del documento. In molti casi, ci si può aspettare che l'applicazione usi fogli di stile per operare trasformazioni su documenti XML esistenti in SSML. Ciò equivale ad usare ACSS con HTML ed ancora una volta SSML è la rappresentazione risultante che deve essere passata al sintetizzatore vocale. In questa ottica, l'SSML può essere visto come un contenitore delle capacità dell'ACSS [CSS2§19], ad eccezione dell'audio spaziale.
L'SSML fornisce un metodo standard per specificare a grandi linee le proprietà dei contenuti sintetizzati come la pronuncia, il volume, il tono, la frequenza, ecc. Le specifiche esatte del comportamento dell'output vocale su diversi sintetizzatori, esulano comunque lo scopo di questo documento.
A meno che non sai diversamente specificato, i valori di marcatura sono mere indicazioni lontane dall'essere assolute. Per esempio, è possibile che un autore indichi esplicitamente la durata di un segmento di testo e indichi inoltre la durata per un pezzo di quel segmento. Se le due durate producono un segmento di testo che il sintetizzatore vocale non può ragionevolmente renderizzare, allora il sintetizzatore ha la possibilità di modificare le durate secondo le sue necessità per produrre l'output vocale.
anyURI
come definito nel XML Schema Parte 2: Tipi di Dato [SCHEMA2 §3.2.17]. Per motivi puramente informativi, [RFC2396] e [RFC2732] possono essere utili per capire la struttura, il formato e l'uso degli URI. Ogni riferimento URI relativo deve essere risolto seguendo le regole descritte nella Sezione 3.1.3.1. In questa specifica, gli URI sono forniti come attributi di elementi, per esempio negli elementi audio e lexicon.Un documento in Speech Synthesis Markup Language isolato legittimo deve avere un XML Prolog legittimo [XML §2.8]. Se presente, il DOCTYPE opzionale deve suonare come il seguente:
<!DOCTYPE speak PUBLIC "-//W3C//DTD SYNTHESIS 1.0//EN" "http://www.w3.org/TR/speech-synthesis/synthesis.dtd">
Il prologo XML è seguito dall'elemento radice speak. Si veda la Sezione 3.1.1 per maggiori dettagli su questo elemento.
L'elemento speak indica il namespace SSML. Viene fatto dichiarando un attributo xmlns
o un attributo con il prefisso "xmlns".
Si veda [XMLNS §2] per ulteriori informazioni. Da notare che quando l'attributo xmlns
viene usato da solo, imposta il namespace di default per l'elemento su cui appare e per gli elementi figli. Il namespace per l'SSML deve essere http://www.w3.org/2001/10/synthesis.
È raccomandato che l'elemento speak indichi anche la locazione dello Schema SSML (si veda l'Appendice D) attraverso l'attributo xsi:schemaLocation
da [SCHEMA1 §2.6.3]. Beché non sia richiesta questa indicazione, per incoraggiarne l'uso questo documento la specifica su tutti i suoi esempi.
I seguenti sono due esempi di intestazioni SSML legittime:
<?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">
Gli elementi meta, metadata e lexicon devono trovarsi prima di tutti gli altri elementi e prima del testo, e trovarsi all'interno dell'elemento radice speak. Non ci sono altri vincoli di ordine sugli elementi di questa specifica.
Un frammento di documento è un Frammento di Speech Synthesis Markup Language Conforme se:
xml:lang
e xml:base
, tutti gli elementi e gli attributi con namespace non di sintesi vocale e tutti gli attributi xmlns
che fanno riferimento ad elementi con namespace non di sintesi vocale che verranno rimossi dal documento,xmlns
, allora viene aggiunto all'elemento xmlns="http://www.w3.org/2001/10/synthesis"
.Un documento è un Documento Speech Synthesis Markup Language Conforme se rispetta entrambe le seguenti condizioni:
La specifica SSML e questi criteri di conformità non specificano limiti di dimensione su tutti gli aspetti dei documenti. Non ci sono valori massimi sui numeri di elementi, sul numero di caratteri dati, o sul numero di caratteri per i valori degli attributi.
Il namespace di sintesi vocale può essere usato con altri namespace XML come specificato sulla XML Recommendation riguardo i namespace [XMLNS]. Progetti futuri del W3C creeranno sistemi per specificare la conformità di documenti che fanno uso di diversi namespace.
Un sintetizzatore Speech Synthesis Markup Language è un programma che riesce ad analizzare ed elaborare Documenti Speech Synthesis Markup Language Conformi.
In un Sintetizzatore Speech Synthesis Markup Language Conforme, il parser XML deve essere capace di analizzare ed elaborare tutti i costrutti XML definiti dall'XML 1.0 [XML] e i Namespace dell'XML [XMLNS]. Non è richiesto che il parser XML operi la validazione di un documento SSML con il suo schema o DTD; ciò implica che durante l'elaborazione di un documento SSML è lasciata opzionale la possibilità di applicare o espandere riferimenti ad entità esterne definite in un DTD esterno.
Un Sintetizzatore Speech Synthesis Markup Language Conforme deve conoscere ed applicare correttamente la semantica di ogni elemento di marcatura come descritto da questo documento.
Un Sintetizzatore Speech Synthesis Markup Language Conforme deve rispondere ai seguenti requisiti per gestire i linguaggi naturali (umani):
Quando un Sintetizzatore Speech Synthesis Markup Language Conforme incontra elementi o attributi, eccetto xml:lang
e xml:base
, in un namespace non di sintesi vocale, può:
Non esistono, comunque, dei requisiti di conformità rispetto alle performance del Sintetizzatore Speech Synthesis Markup Language. Per esempio, non sono stati stabiliti parametri riguardo l'accuratezza, la velocità ed altre caratteristiche della voce prodotta dal sintetizzatore. Non esistono regole riguardo la lunghezza dell'input che un Sintetizzatore Speech Synthesis Markup Language deve rispettare.
Uno User Agent Conforme è un Sintetizzatore Speech Synthesis Markup Language Conforme che è capace di accettare un documento SSML in input e produrre un output vocale usando le informazioni contenute nel testo marcato per renderizzare il documento come voleva l'autore. Uno User Agent Conforme deve supportare almeno un linguaggio naturale.
Dal momento che non è garantito che l'output sia una corretta rappresentazione del contenuto del testo marcato in input, non ci sono requisiti di conformità riguardo l'accuratezza. Un test di conformità può, comunque, prevedere alcuni esempi di corretta sintesi di documenti di riferimento per determinarne la conformità.
Il Synchronized Multimedia Integration Language (SMIL, si legge "smile") [SMIL] permette di realizzare semplici presentazioni audiovisive interattive. Lo SMIL viene di solito usato per presentazioni "rich media"/multimediali che uniscono audio in streaming con video, immagini, testo ed altri media. Lo SMIL è un linguaggio simile all'HTML semplice da imparare, e molte presentazioni SMIL vengono scritte usando un semplice editor di testo. Per vedere degli esempi di integrazione SMIL/SSML si veda l'Appendice F.
Gli Aural Cascading Style Sheet [CSS2 §19] vengono impiegati per espandere il formato standard dei documenti (come l'HTML) con elementi addizionali che aiutano nella sintesi del testo in suono. Confrontati con l'SSML, i documenti generati con ACSS sono capaci di fornire informazioni più precise sulla sequenza audio, inclusa la definizione dello spazio 3-dimensionale della sorgente del suono. Molti degli altri elementi dell'ACSS sovrastano le funzionalità dell'SSML, specialmente nelle specifiche riguardo il tipo e la qualità della voce. L'SSML può essere visto come un insieme che contiene le capacità dell'ACSS, eccetto per l'audio spaziale.
Il Voice Extensible Markup Language [VXML] permette lo sviluppo sul Web e la distrubuzione di applicazioni interattive a risposta vocale (si veda browser vocale ). Il VoiceXML supporta la sintesi vocale, la registrazione e la riproduzione di audio digitale, il riconoscimento vocale, l'input DTMF, il controllo delle chiamate telefoniche e i dialoghi basati su form. Il VoiceXML 2.0 estende l'SSML per la marcatura del testo da sintetizzare. Per un'esempio di integrazione tra il VoiceXML e l'SSML si veda l'Appendice F.
Il recupero e le politiche di caching dei documenti SSML sono definite dall'ambiente in cui il sintetizzatore vocale opera. Nel contesto dell'interprete VoiceXML, per esempio, le politiche di caching sono definite dall'interprete VoiceXML.
In questa specifica vengono definiti i seguenti elementi ed attributi.
Lo Speech Synthesis Markup Language è un'applicazione dell'XML. L'elemento radice è speak. xml:lang
è un'attributo necessario che specifica la lingua del documento radice. xml:base
è un'attributo opzionale che specifica l'URI di base del documento radice. L'attributo version
è un'attributo necessario che indica la versione della specifica da usare per il documento e deve avere il valore "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="en-US"> ... corpo del documento ... </speak>
L'elemento speak può contenere solo testo da renderizzare e i seguenti elementi: audio, break, emphasis, lexicon, mark, meta, metadata, p, phoneme, prosody, say-as, sub, s, voice.
xml:lang
L'attributo xml:lang
, come definito dall'XML 1.0 [XML §2.12], può essere usato nell'SSML per indicare il linguaggio naturale degli elementi contenuti e i suoi attributi e sottoelementi. L'RFC 3066 [RFC3066] può essere utile per capire come usare questo attributo.
Le informazioni sulle lingua vengono ereditate nella grarchia del documento, per esempio possono essere date solo una volta se l'intero documento è in una lingua, e possono essere annidate, perciò gli attributi più interni sovrascrivono quelli più esterni.
xml:lang
è un attributo definito per gli elementi voice, speak, p, e s. Per il rendering vocale, un cambio di lingua può avere effetti su vari parametri (compresi genere, velocità, età, tono, ecc.) che possono disturbare l'ascolto. Potrebbero esserci anche delle pause non naturali tra i cambi di lingua.
Per questa ragione, gli autori vengono incoraggiati ad usare l'elemento voice per cambiare la lingua. xml:lang
è consentito su p e s solo perché è comune cambiare lingua a questi livelli.
Sebbene questo attributo sia consentito per l'elemento desc, nessun cambio di voce descritto in questo sezione viene applicato se usato con questo elemento.
<?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"> <p>I don't speak Japanese.</p> <p xml:lang="ja">日本語が分かりません。</p> </speak>
Nel caso in cui un documento richieda un output vocale in una lingua non supportata dal sintetizzatore, il sintetizzatore vocale determina un certo comportamento. Specificando xml:lang
non siamo certi che ci sia un cambio della voce, anche se questo può capitare. Quando una certa voce non riesce a leggere il contenuto nella lingua indicata, il sintetizzatore può scegliere un'altra voce. Non ci sono cambi di voce o di prosodia se il valore di xml:lang
è uguale al valore ereditato. Maggiori informazioni sulla selezione della voce si trovano nella Sezione 3.2.1.
Possono esistere delle variazioni tra sintetizzatori conformi nell'implementazione delle modifiche della lingua con xml:lang
tra diversi elementi di marcatura (per esempio gli elementi p e s).
Ogni elemento dovrebbe elaborare il suo contenuto in relazione alla lingua in cui è inserito. Per esempio, gli elementi phoneme, emphasis, break, p e s dovrebbero essere renderizzati in modo appropriato alla lingua corrente.
I passaggi della normalizzazione del testo possono essere influenzati dalla lingua. Questo è vero sia per il supporto di marcatura per l'elemento say-as che senza marcatura. Nel seguente esempio il testo "2/1/2000" può essere letto come "February first two thousand" nella prima frase, seguendo le regole dell'Inglese Americano, o come "the second of January two thousand" nella seconda, seguendo le regole del preprocessore Italiano.
<?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 --> <!-- One month ago, the second of January two thousand --> </speak>
xml:base
Gli URI relativi vengono risolti secondo un URI di base, che può venire da diverse fonti. La dichiarazione dell'URI di base permette agli autori di specificare esplicitamente un URI di base per il documento. Si veda la Sezione 3.1.3.1 per dettagli sulla risoluzione degli URI relativi.
La dichiarazione dell'URI di base è permessa ma opzionale. I due elementi influenzati da questa sono
- audio
- L'attributo opzionale
src
può specificare un URI relativo.- lexicon
- L'attributo
uri
può specificare un URI relativo.
La dichiarazione dell'URI di base segue [XML-BASE] ed è indicata da un attributo xml:base
sull'elemento radice speak.
<?xml version="1.0"?> <speak version="1.0" xml:lang="en-US" 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/base-file-path">
<?xml version="1.0"?> <speak version="1.0" xml:lang="en-US" 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/another-base-file-path">
Gli User agent devono calcolare l'URI di base per la risoluzione degli URI relativi in base all'[RFC2396]. Segue la descrizione di come l'RFC2396 si applica ai documenti di sintesi.
Gli User agent devono calcolare l'URI di base in base alle seguenti precedenze (dalla più alta alla più bassa):
xml:base
sull'elemento speak (si veda la Sezione 3.1.3).Un documento SSML può fare riferimento ad uno o più documenti di lessico di pronuncia esterni. Un documento di lessico è identificato da un URI con un tipo di media opzionale. Non sono stati ancora definiti tipi di media standard per il lessico come predefiniti per questa specifica.
Il Voice Browser Working Group del W3C sta sviluppando il Linguaggio di Marcatura per il Lessico di Pronuncia [LEX]. La specifica darà indicazioni sul processo di corrispondenza tra i token, il lessico e il modo in cui un sintetizzatore vocale gestisce le pronunce tra lessici interni e specifici della sintesi. La gestione della pronuncia con formati di lessico proprietari deve essere necessariamente specificata al sintetizzatore vocale.
Un documento di lessico contiene le informazioni di pronuncia per i token che possono apparire nel testo da leggere. Le informazioni di pronuncia contenute in un lessico vengono udate per i token che compaiono nel documento di riferimento.
I lessici di pronuncia sono necessariamente specifici di ogni certa lingua. La ricerca della pronuncia nel lessico e la deduzione della pronuncia per ogni token (o unità di testo) può usare un algoritmo che è specifico della lingua. Come riportato nella Sezione 1.2, la definizione di cosa costituisce un "token" può essere anch'essa specifica della lingua.
Quando si fa riferimento a lessici multipli, la loro precedenza va dal più basso al più alto con l'ordine del documento. Precedenza significa che un token viene prima cercato nel lessico con la precedenza maggiore. Solo se non viene trovato in quel lessico, viene analizzato il prossimo lessico e così via fino alla prima occorrenza o fino a che tutti i lessici non sono stati usati per la ricerca.
Può apparire un numero arbitrario di elementi lexicon come figli immediati dell'elemento speak.
L'elemento lexicon deve avere un attributo uri
specificando un URI che identifica la locazione del documento di lessico di pronuncia.
L'elemento lexicon può avere un attributo type
che specifica un tipo di media per il documento di lessico di pronuncia.
<?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="en-US"> <lexicon uri="http://www.example.com/lexicon.file"/> <lexicon uri="http://www.example.com/strange-words.file" type="media-type"/> ... </speak>
Nota: la descrizione e la tabella che seguono, usano il tipo di lessico (immmaginario) di un'ipotetica azienda
x-vnd.example.lexicon
. Questo intende rappresentare un qualunque formato disponibile.
Un risorsa di lessico indicata da un riferimento URI può essere disponibile in uno o più tipi di media. L'autore di SSML può specificare il tipo di media preferito attraverso l'attributo type
. Quando i contenuti rappresentati da un URI sono disponibili in diversi formati, un sintetizzatore vocale può usare il tipo preferito per influenzare la scelta del formato da usare. Per esempio, su un server che implementa la negoziazione dei contenuti via HTTP, il sintetizzatore può usare il tipo per ordinare le preferenze nella negoziazione.
Per quanto concerne la consegna, la risorsa indicata da un riferimento URI può essere consideta in due modi. Il tipo di media dichiarato è il valore allegato alla risorsa e il tipo di media reale è il vero formato del contenuto. Il tipo effettivo dovrebbe essere uguale al tipo dichiarato, ma non succede sempre (ad esempio, un server HTTP malconfigurato potrebbe restituire text/plain
per un documento che appartiene al formato x-vnd.example.lexicon
). Uno specifico schema URI potrebbe richiedere che il proprietario della risorsa restituisca sempre, a volte o mai, un tipo di media. Se viene fornito un tipo, questo viene trattato come autoritativo. Il tipo di media dichiarato viene determinato tramite il valore restituito dal proprietario della risorsa o, se non viene restituito alcun vvalore, dal tipo di media preferito scritto nel documento SSML
Sono previsti tre casi speciali. Il tipo di media dichiarato potrebbe non essere supportato dal sintetizzatore; questo è un errore. Il tipo dichiarato potrebbe essere supportato ma non corrisponde al tipo effettivo; anche questo è un errore. Infine, potrebbe non essere dichiarato alcun tipo di media; il comportamento dipende dallo specifico schema URI e dalle capacità del sintetizzatore vocale. Per esempio, l'HTTP 1.1 prevede l'introspezione nei documenti (si legga [RFC2616 §7.2.1]), lo schema dei dati ricade in un tipo di media predefinito, e l'accesso a file locali non definisce politiche di alcun tipo. La seguente tabella fornisce alcuni esempi esplicativi:
richiesta HTTP 1.1
|
Accesso al file locale
|
|||
---|---|---|---|---|
Tipo di media restituito dal proprietario della risorsa | text/plain | x-vnd.example.lexicon | <niente> | <niente> |
Tipo di media preferito per il documento SSML | Non applicabile; il tipo di media restutuito è autoritativo. | x-vnd.example.lexicon | <niente> | |
Tipo di media dichiarato | text/plain | x-vnd.example.lexicon | x-vnd.example.lexicon | <niente> |
Comportamento per il tipo di media vero x-vnd.example.lexicon | Deve essere elaborato come text/plain. Questo genera un errore se text/plain non è supportato o se il documento non segue il formato atteso. | Il tipo dichiarato e quello reale coincidono; viene elaborato con successo se x-vnd.example.lexicon è supportato dal sintetizzatore vocale; altrimenti c'è un error. | Specifico dello schema; il sintetizzatore deve introspezionare il documento per identificare il tipo. |
L'elemento lexicon è un elemento vuoto.
Gli elementi metadata e meta sono contenitori dove si possono scrivere informazioni sul documento. L'elemento metadata prevede un trattamento più generale e potente delle informazioni metadata contrapposto all'uso di meta con uno schema metadata.
Un dichiarazione meta associa una stringa ad un una proprietà meta dichiarata o dichiara un contenuto "http-equiv". Uno degli attributi name
o http-equiv
è richiesto. È un errore fornire entrambi gli attributi name
e http-equiv
. È richiesto anche l'attributo content
. La proprietà seeAlso
è l'unico nome di proprietà
meta definito. Viene usato per specificare una risorsa che fornisce informazioni aggiuntive sul contenuto. Questa proprietà è modellata sulla proprietà seeAlso
della Resource Description Framework (RDF) Schema Specification 1.0 [RDF-SCHEMA §5.4.1]. L'attributo http-equiv
ha un significato speciale quando i documenti vengono scaricati via HTTP. Sebbene la via preferenziale per fornire informazioni di intestazione HTTP sia quella di usare campi HTTP header, il contenuto di "http-equiv" può essere usato quando l'autore di documenti SSML non può configurare i ccampi di intestazione HTTP associati al suo documento sul server di origine, per esempio, informazioni di controllo sulla cache. Si noti che i server HTTP e le cache non hanno bisogno di introspezionare il contenuto di meta nei documenti SSML e per questo sovrascrive i valori di intestazione che avrebbero spedito altrimenti.
Informazione: Questo è un esempio di come elementi meta possano essere inclusi in un doccumento SSML per specificare una risorsa che fornisce informazioni metadata aggiuntive e che in più indica che il documento non deve essere mantenuto in 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="en-US"> <meta name="seeAlso" content="http://example.com/my-ssml-metadata.xml"/> <meta http-equiv="Cache-Control" content="no-cache"/> </speak>
L'elemento meta è un elemento vuoto..
L'elemento metadata è un contenitore dove possono essere scritte informazioni sul documento usando uno schema metadata. Sebbene ogni schema metadata possa essere usato con metadata, si raccomanda che la sintassi XML del Resource Description Framework (RDF) [RDF-XMLSYNTAX] venga usata insieme alle proprietà metadata generali definite nella Dublin Core Metadata Initiative [DC].
Il Resource Description Format [RDF] è un linguaggio dichiarativo che fornisce un metodo standard per usare l'XML per rappresentare metadata in forma di istruzioni sulle proprietà e relazioni di oggetti sul Web. I creatori di contenuti dovrebbero far riferimento alla W3C metadata Recommendations [RDF-XMLSYNTAX] e [RDF-SCHEMA] nel decidere quale schema RDF metadata usare nei propri documenti. I creatori di contenuti dovrebbe leggere anche la Dublin Core Metadata Initiative [DC], che è un insieme di proprietà metadata applicabili genericamente (per esempio, Title, Creator, Subject, Description, Rights, ecc.).
Le proprietà del documento dichiarate con un elemento metadata possono usare qualunque schema metadata.
Informazione: Questo è un esempio di come i metadata possono essere inclusi in un documento SSML usando lo schema RDF del Dublin Core versione 1.0 [DC] che descrive informazioni generali sul documento, quali titolo, descrizione, data e così via:
<?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="en-US"> <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/"> <!-- Metadata sul documento di sintesi --> <rdf:Description rdf:about="http://www.example.com/meta.ssml" dc:Title="Hamlet-like Soliloquy" dc:Description="Aldine's Soliloquy in the style of Hamlet" dc:Publisher="W3C" dc:Language="en-US" dc:Date="2002-11-29" dc:Rights="Copyright 2002 Aldine Turnbet" dc:Format="application/ssml+xml" > <dc:Creator> <rdf:Seq ID="CreatorsAlphabeticalBySurname"> <rdf:li>William Shakespeare</rdf:li> <rdf:li>Aldine Turnbet</rdf:li> </rdf:Seq> </dc:Creator> </rdf:Description> </rdf:RDF> </metadata> </speak>
L'elemento metadata può avere contenuto arbitrario, visto che il suo contenuto non sarà analizzato dal sintetizzatore vocale.
L'elemento p rappresenta un paragrafo. L'elemento s rappresenta una frase.
xml:lang
è un attributo definito sugli elementi p e 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="en-US"> <p> <s>Questa è la prima frase del paragrafo.</s> <s>Ecco un'altra frase.</s> </p> </speak>
L'uso degli elementi p e s è opzionale. Quando il testo non compare racchiuso tra elementi p o s, il sintetizzatore vocale tenterà di determinare la struttura usando conoscenze specifiche della lingua sul formato del testo semplice.
L'elemento p può contenere solo testo che deve essere sintetizzato e i seguenti elementi: audio, break, emphasis, mark, phoneme, prosody, say-as, sub, s, voice.
L'elemento s può contenere solo testo che deve essere sintetizzato e i seguenti elementi: audio, break, emphasis, mark, phoneme, prosody, say-as, sub, voice.
L'elemento say-as permette all'autore di indicare informazioni sul tipo di costrutto linguistico contenuto nell'elemento e di specificare il livello di dettaglio per la sintesi del testo contenuto.
Definire un insieme esaustivo di tipi di formato di testo è difficile a causa della varietà di lingue che devono essere considerate e dell'innata flessibilità della lingua scritta. L'SSML specifica solo l'elemento say-as, i suoi attributi e il loro scopo. Non enumera tutti i possbili valori degli attributi. Il Gruppo di Lavoro spera di produrre un documento separato che definisca valori standard e i comportamenti associati a questi valori. Gli esempi ivi forniti servono soltanto ad illustrare gli obiettivi dell'elemento e i suoi attributi.
L'elemento say-as ha tre attributi: interpret-as
, format
e detail
. L'attributo interpret-as
è sempre necessario; gli altri due sono opzionali. I volori ammessi per l'attributo format
dipendono dal valore dell'attributo interpret-as
.
L'elemento say-as può contenere esclusivamente testo da sintetizzare.
interpret-as
e format
L'attributo interpret-as
indica il tipo di contenuto del costrutto di testo. Specificare il tipo di contenuto assiste il sintetizzatore vocale a distinguere e interpretare i costrutti di testo che possono essere sintetizzati in modi diversi a seconda del tipo di informazioni che vogliono fornire. Inoltre, l'attributo opzionale format
può dare ulteriori consigli sulla precisa formattazione del testo contenuto per i tipi che potrebbero avere formati ambigui.
Se specificati, i valori di interpret-as
e format
saranno interpretati dal sintetizzatore vocale come consigli forniti dall'autore di documenti di markup per assistere la normalizzazione del testo e la pronuncia.
In ogni caso, il testo racchiuso tra elementi say-as deve essere inteso come una forma ortografica standard della lingua correntemente in uso nel contesto. Il sintetizzatore vocale dovrebbe essere capace di supportare la forma ortografica comune della lingua specificata per ogni contenuto del tipo che supporta.
Quando il valore dell'attributo interpret-as
è sconosciuto o non supportato dal sintetizzatore, il testo contenuto deve essere sintetizzato come se non fosse stato specificato alcun valore interpret-as
.
Quando il valore dell'attributo format
è sconosciuto o non supportato dal sintetizzatore, il testo contenuto deve essere sintetizzato come se non fosse stato specificato alcun valore format
e dovrebbe riprodurlo usando il valore di interpret-as
che è specificato.
Quando l'elemento say-as contiene testo aggiuntivo insieme al contenuto che è indicato nei tipi format
e interpret-as
, questo testo aggiuntivo deve essere renderizzato. Il sintetizzatore dovrebbe procedere alla renderizzazione del testo aggiuntivo in base al tipo interpret-as
dell'elemento nel quale appare.
Quando il contenuto di say-as non ha niente all'interno del tipo interpret-as
o di format
, il sintetizzatore deve renderizzare il contenuto come se l'attributo format
non fosse presente, o come se l'attributo interpret-as
non fosse presente, o come se nessuno degli attributi format
e interpret-as
fossero presenti. Il sintetizzatore deve altresì notificare l'ambiente di esecuzione del fatto.
Indicare il tipo di contenuto o il suo formato non influenza necessariamente il modo in cui le informazionii vengono riprodotte. Il sintetizzatore vocale dovrebbe pronunciare il testo come viene normalmente letto in quella lingua.
detail
L'attributo detail
è un attributo opzionale che indica il livello di dettaglio per la renderizzazione. Ogni valore dell'attributo detail
deve sintetizzare tutto il contenuto informativo del testo; comunque, valori specifici di detail
possono essere usati per sintetizzare il contenuto che rimane informativo nel testo corrente ma che può essere importante per la lettura. Per esempio, un sintetizzatore vocale di solito sintetizza la punteggiatura attraverso cambiamenti nel ritmo di lettura. Impostare un alto livello di dettaglio permette di pronunciare esplicitamente la punteggiatura, per esempio per leggere numeri di pezzi di codice o parti di listati in modo corretto.
L'attributo detail
può essere usato per tutti i tipi interpret-as
.
Se l'attributo detail
non è specificato, il livello di dettaglio della riproduzione del sintetizzatore vocale dipende dal testo e dalla lingua.
Se il valore dell'attributo detail
è sconosciuto o non supportato dal sintetizzatore, deve sintetizzare il testo contenuto come se non fosse stato specificato alcun valore per l'attributo detail
.
L'elemento phoneme fornisce la fonetica per il testo contenuto. L'elemento phoneme deve essere vuoto. Comunque, si raccomanda che l'elemento contenga testo leggibile da persone, che possa essere usato anche per produzioni non vocali del documento. Per esempio, il contenuto potrebbe essere visualizzato per utenti con problemi uditivi..
L'attributo ph
è un attributo necessario che specifica la stringa fonetica.
Questo elemento è progettato specificamente per la notazione fonemica e fonetica e viene usato per descrivere la pronuncia di parole e frasi corte. La stringa fonemica/fonetica non sostituisce la normalizzazione del testo ed non viene trattata come un token nella ricerca nel lessico (si veda la Sezione 3.1.4), anche se entrambi i valori di say-as e sub possono sostituirsi a questa. In breve, le stringhe fonemiche sono formate da fonemi, unità vocali dipendenti dalla lingua che caratterizzano le differenze più significative tra le lingue; a grandi linee, i fonemi rappresentano tutti i suoni necessari per distinguere una parola da un'altra. Dall'altra parte, le stringhe fonetiche sono fatte da suoni, unià vocali che caratterizzano il modo (sussurrato, squillante, cantato, ecc.) e il luogo (davanti, in mezzo, dietro, ecc.) della pronuncia nei tratti vocali umani e sono quindi indipendenti dalla lingua; i suoni rappresentano le varietà della dialogica umana.
L'attributo alphabet
è un attributo opzionale che specifica l'alfabeto fonetico. L'alfabeto, in questo contesto, è una collezione di simboli che rappresentano i suoni di una o più lingue.
Gli unici valori validi per questo attributo sono "ipa" (si veda il prossimo paragrafo) e stringhe specifiche dei produttori nella forma "x-organization" o "x-organization-alphabet". Per esempio, la Japan Electronics and Information Technology Industries Association [JEITA] potrebbe incoraggiare l'uso di un alfabeto del tipo "x-JEITA" o "x-JEITA-2000" per i loro alfabeti fonetici [JEIDAALPHABET].
I sintetizzatori vocali dovrebbero supportare il valore "ipa" dell'attributo alphabet
, che corrisponde alla rappresentazione Unicode dei caratteri fonetici sviluppata dalla International Phonetic Association [IPA]. In aggiunta al completo insieme di vocali e consonanti, questo insieme di caratteri supporta un delimitatore di sillabe, numerosi segni diacritici, simboli di accento, simboli di tono lessicale, marcatori di intonazione ed altro ancora. Per questo alfabeto, o valori ammessi per ph
sono stringhe dei valori specificati nell'Appendice 2 di [IPAHNDBK].
Tabelle informative sulla mappatura IPA-to-Unicode si trovano su [IPAUNICODE1] e [IPAUNICODE2].
Si noti che non tutti i caratteri IPA sono disponibili in Unicode. Per i sintetizzatori che supportano questo alfabeto vale che,
ph
.<?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əmei̥ɾou̥"> tomato </phoneme> <!-- Questo è un esempio di IPA che usa entità carattere --> <!-- Visto che molte combinazioni di piattaforme/browser/editor di testo non copiano e incollano correttamente testo Unicode, questo esempio usa la versione con escape dell'entità del carattere IPA. Di solito si usa direttamente la rappresentazione UTF-8 di questi simboli: "təmei̥ɾou̥". --> </speak>
È un errore se un valore di alphabet
è specificato che non è conosciuto o non può essere applicato dal sintetizzatore vocale.
La scelta del comportamento da tenere quando l'attributo alphabet
non è specificato è lasciata al sintetizzatore.
L'elemento phoneme può contenere solo testo (senza elementi).
L'elemento sub viene impiegato per indicare che il testo nel valore dell'attributo alias
rimpiazza il testo per la pronuncia. Questo permette al documento di avere sia un contenuto per la forma scritta, che uno per la forma orale. L'attributo necessario alias
specifica la stringa che dovrà essere letta al posto del testo racchiuso. Il sintetizzatore dovrebbe applicare una normalizzazione del testo al valore di alias
.
L'elemento sub può contenere solo testo (senza elementi).
<?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>
L'elemento voice è un elemento di produzione che richiede un cambio nella voce parlante. Gli attributi sono:
xml:lang
: attributo opzionale che specifica la lingua.
gender
: attributo opzionale che indica il genere preferito della voce che legge il testo contenuto. I valori possibili sono: "male" (maschio), "female" (femmina), "neutral" (neutro).
age
: attributo opzionale che indica l'età preferita in anni (dalla nascita) della voce che legge il testo contenuto. Valori accettabili sono quelli di tipo xsd:nonNegativeInteger [SCHEMA2 §3.3.20].
variant
: attributo opzionale che indica la variante preferita delle altre caratteristiche della voce che legge il testo contenuto. (per esempio, la seconda voce di bambino). Valori validi per variant
sono quelli di tipo xsd:positiveInteger [SCHEMA2 §3.3.25].
name
: attributo opzionale che indica il nome di una voce dello specifico sintetizzatore per la lettura del testo contenuto. Il valore può essere una lista separata da spazi di nomi ordinati per preferenza, dal più preferito al meno preferito. Da ciò segue che un nome non può contenere spazi bianchi.
Sebbene ciascun attributo sia individualmente opzionale, è un errore non specificare alcun attributo quando si usa l'elemento 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="en-US"> <voice gender="female">Mary has a little sheep,</voice> <!-- adesso richiedo una vode diversa di bambina --> <voice gender="female" variant="2"> It is white as snow. </voice> <!-- selezione di una voce specifica del sintetizzatore --> <voice name="Mike">I want to be like Mike.</voice> </speak>
L'elemento voice viene comunemente usato per cambiare lingua. Quando non è disponibile una voce che corrisponda esattamente agli attributi specificati nel documento, e ci sono più voci che corrispondono a quei criteri, viene usato il seguente algoritmo di selezione. Ci sono casi ambigui nell'algoritmo; in questi casi la selezione della voce viene lasciata al sintetizzatore. In modo approssimativo, l'attributo xml:lang
ha la più alta priorità e tutti gli altri attributo sono identici come priorità ma stanno dopo xml:lang
. L'algoritmo completo è:
xml:lang
richiesto, il sintetizzatore vocale la deve usare. Se sono disponibili più voci di questo tipo, il sintetizzatore dovrebbe usare la voce che più soddisfa i valori specificati di name
, variant
, gender
ed age
.xml:lang
richiesto, il sintetizzatore dovrebbe selezionare la voce che risulta più somigliante alla lingua richiesta (per esempio, una variante o un dialetto della stessa lingua). Se sono disponibili più voci di questo tipo, il sintetizzatore dovrebbe usare la voce che più soddisfa i valori specificati di name
, variant
, gender
ed age
.Si noti che possono essere fatti semplici inserimenti di testo in lingua straniera (dove un cambio di voce non è necessario o non desiderato). Si veda l'Appendice F per alcuni esempi.
Gli attributi di voice vengono ereditati nell'albero degli elementi, inclusi all'interno degli elementi che cambiano la lingua.
<?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"> <voice gender="female"> Here a female voice. <voice age="6"> Here a female child voice. <p xml:lang="ja"> <!-- Una voce di bambina in giapponese. --> </p> </voice> </voice> </speak>
Cambiamenti sui parametri di metrica possono essere mantenuti tra cambi di voce. Comunque, bisogna notare che voci diverse hanno naturalmente parametri diversi per quanto riguarda tono, velocità di lettura ecc. a causa delle diverse personalità che rappresentano, quindi i valori assoluti dei parametri di metrica possono variare tra cambi di voce.
La qualità del suono risultante e della voce può peggiorare se viene richiesto un cambio di voce all'interno di una frase.
L'elemento voice può contenere solo testo da sintetizzare e i seguenti elementi: audio, break, emphasis, mark, p, phoneme, prosody, say-as, sub, s, voice.
L'elemento emphasis richiede che il testo contenuto al suo interno sia letto con enfasi (con risalto, con forza). Il sintetizzatore vocale definisce come sintetizzare l'enfasi, tenendo conto del fatto che ogni lingua, dialetto e perfino ogni voce enfatizza in modo diverso. Gli attributi sono:
level
: l'attributo opzionale level
indica la forza dell'enfasi che dovrà essere applicata. Valori predefiniti sono "strong" (forte), "moderate" (moderato), "none" (nessuno) and "reduced" (ridotto).
Il valore predefinito di level
è "moderate". Il significato di enfasi "strong" e "moderate" è da interpretare in relazione alla lingua usata per parlare (la lingua definisce l'enfasi usando una combinazione di modifica del tono, della tempistica, del volume e di altri parametri acustici). Il valore "reduced" di level
costituisce l'opposto dell'enfasi. Per esempio (n.d.t. solo per chi conosce l'inglese), quando la frase "going to" viene specificata con "reduced", potrebbe essere letta come "gonna".
Il valore "none" di level
viene usato per impedire al sintetizzatore vocale di enfatizzare le parole che di solito verrebbero enfatizzate. I valori "none", "moderate" e "strong" sono monotonicamente non-decrescenti come forza.
<?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"> This is a <emphasis> great </emphasis> car! You have a <emphasis level="strong"> huge </emphasis> bank account! </speak>
L'elemento emphasis può contenere solo testo da sintetizzare e i seguenti elementi: audio, break, emphasis, mark, phoneme, prosody, say-as, sub, voice.
L'elemento break è un elemento vuoto che controlla le pause e altri limiti di metrica tra parole. L'uso di break tra ogni coppia di parole è opzionale. Se l'elemento non è presente tra le parole, il sintetizzatore vocale dovrebbe automaticamente determinare una pausa basandosi sul contesto linguistico. Nella pratica, l'elemento break viene spesso usato per superare il comportamento automatico del sintetizzatore. Gli attributi di questi elemento sono:
strength
: l'attributo strength
è un attributo opzionale che prende uno dei seguenti valori: "none", "x-weak", "weak", "medium" (valore di default), "strong" o "x-strong".
Questo attributo serve per indicare la forza dell'intervallo metrico nella lettura. Il valore "none" indica che non deve essere prodotto alcun intervallo, e può essere usato per evitare l'eventuale pausa che sarebbe stata inserita in automatico dal sintetizzatore. Gli altri valori indicano la forza dell'interruzione tra le parole e sono elencati in modo monotonicamente non-decrescente (concettualmente crescente). Le interruzioni più forti sono tipicamente accompagnate da pause. I valori "x-weak" e "x-strong" sono abbreviazioni di "extra weak" e "extra strong", rispettivamente.
time
: l'attributo time
è un attributo opzionale che indica la durata della pausa che dovrà essere inserita nell'output vocale in secondi o millisecondi. Segue il formato del tempo della Cascading Style Sheets Level 2 Recommendation [CSS2], ad esempio, "250ms", "3s".
L'attributo strength
viene usato per indicare la forza metrica dell'interruzione. Per esempio, le pause tra paragrafi sono di solito più forti di quelle tra parole all'interno di una frase. Il sintetizzatore vocale può inserire una pausa come parte della sua implementazione delle interruzioni metriche. Una pausa di una certa lunghezza può essere anche inserita usando l'attributo time
.
Se l'elemento break viene usato senza gli attributi strength
e time
, verrà prodotta dal sintetizzatore una pausa con una forza metrica maggiore
di quanto sarebbe stato se l'elemento break non fosse stato specificato.
Se vengono specificati entrambi gli attributi strength
e time
, il sintetizzatore inserirà una pausa con la durata specificata dall'attributo time
, insieme ad altre modifiche di metrica in base al valore dell'attributo 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="en-US"> Take a deep breath <break/> and continue. Press 1 or wait for the bell. <break time="3s"/> I cannot understand! <break strength="weak"/> Repeat please. </speak>
L'elemento prosody permette il controllo di tono, velocità di lettura e volume dell'output vocale. Gli attributi, tutti opzionali, sono:
pitch
: il tono fondamentale per il testo contenuto. Sebbenne l'esatto significato di "tono fondamentale" varia molto tra sintetizzatori vocali, l'aumento/diminuzione di questo valore di solito provoca l'aumento/diminuzione del tono approssimativo del risultato. Valori ammessi sono: un numero seguito da "Hz", una correzione relativa o "x-low", "low", "medium", "high", "x-high", o "default". I valori da "x-low" a "x-high" rappresentano una sequenza di livelli di tono monotonicamente non-decrescente.
contour
: imposta il profilo effettivo del tono per il testo contenuto. Il formato è specificato in Profilo tonico qui sotto.
range
: l'intervallo di altezza (variabilità) per il testo contenuto. Sebbene l'esatto significato di "intervallo di altezza" possa variare tra diversi sintetizzatori, l'aumento/diminuzione di questo valore di solito provoca l'aumento/diminuzione dell'intervallo dinamico dell'altezza dell'output. Valori ammessi sono: un numero seguito da "Hz", una correzione relativa o "x-low", "low", "medium", "high", "x-high" o "default". I valori da "x-low" a "x-high" rappresentano una sequenza di intervalli di altezza monotonicamente non-descrescente.
rate
: una modifica della frequenza nella lettura per il testo contenuto. Valori ammessi sono: una correzione relativa o "x-slow", "slow", "medium", "fast", "x-fast" o "default". I valori tra "x-slow" e "x-fast" rappresentano una sequenza di frequenze di lettura monotonicamente non-decrescenti. Quando viene usato un numero per specificare una correzione relativa, questo agisce come un moltiplicatore per la frequenza predefinita. Per esempio, un valore di 1 significa mantieni la frequenza, 2 significa una frequenza doppia di quella predefinita e un valore di 0.5 significa metà della frequenza prefedinita. La frequenza predefinita di una voce dipende dalla lingua, dal dialetto e dalla personalità della voce. La frequenza predefinita di una voce deve uguagliare la frequenza normale della voce reale. Visto che le voci sono specifiche del sintetizzatore, anche le frequenze predefinite lo sono.
duration
: un valore, in secondi o millisecondi, che indica il tempo che deve impiegare il sintetizzatore a leggere il contenuto dell'elemento. Segue il formato di tempo della Cascading Style Sheet Level 2 Recommendation [CSS2], per esempio, "250ms", "3s".
volume
: il volume del testo contenuto, compreso tra 0.0 e 100.0 (valori più alti indicano volume più alto, specificando zero, indichiamo "silent", in silenzio).
Valori ammessi sono: un numero, una correzione relativa o "silent", "x-soft", "soft", "medium", "loud", "x-loud" o "default". La scala del volume è un'ampiezza lineare. Il valore predefinito è 100.0. I valori da "silent" a "x-loud" rappresentano una sequenza di livelli di volume monotonicamente non-decrescente.
Sebbene ogni attributo sia individualmente opzionale, è un errore non specificare alcun attributo quando si usa l'elemento prosody. I valori del tipo "x-qualcosa " sono contrazioni di "extra qualcosa". Tutte le unità ("Hz", "st") devono essere specificate con il caso giusto (maiuscolo o minuscolo). Si noti inoltre che le altezze personalizzate e gli intervalli standard di altezza possono variare significativamente tra lingue diverse, come possono variare i significati dei valori ammessi per le altezze e gli intervalli.
Un numero è un semplice valore in virgola mobile positivo senza parte esponenziale. Formati ammessi sono "n", "n.", ".n" e "n.n", ove "n" è una sequenza di una o più cifre.
Correzioni relative per gli attributi possono essere specificati
rate
, le correzioni relative sono un numero.volume
, le correzioni relative sono un numero preceduto da "+" o "-", per esempio, "+10", "-5.5".pitch
e range
, le correzioni relative possono essere specificate come semitoni (un numero preceduto da "+" o "-" e seguito da "st") o in Hertz (un numero perceduto da "+" o "-" e seguito da "Hz"): "+0.5st", "+5st", "-2st", "+10Hz", "-5.5Hz". Un semitono è metà di un tono sulla scala diatonica standard.<?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"> The price of XYZ is <prosody rate="-10%"> $45 </prosody> </speak>
Il profilo tonico è definito come un insieme di target separati da spazi bianchi in posizioni di tempo specifiche nell'output vocale. L'algoritmo per l'interpolazione tra le definizioni è specifico per ciascun sintetizzatore. In ogni coppia della forma (posizione temporale, target)
, il primo valore è una percentuale del tempo di lettura del testo contenuto (un numero seguito da "%") e il secondo valore è il valore dell'attributo pitch
(un numero seguito da "Hz", una correzione relativa o una etichetta). Le posizioni temporali esterne all'intervallo tra 0% e 100% vengono ignorate. Se non è definito alcun valore di altezza per 0% o per 100%, viene scelto il target più vicino. Tutte le correzioni relative per l'altezza sono relative all'altezza che precedeva l'elemento.
<?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"> <prosody contour="(0%,+20Hz) (10%,+30%) (40%,+10Hz)"> good morning </prosody> </speak>
L'attributo duration
ha precedenza sull'attributo rate
.
L'attributo contour
ha precedenza sugli attributi pitch
e range
.
Il valore di default di tutti gli attributi di metrica è nessuna modifica. Per esempio, se non si specifica l'attributo rate
significa che vogliamo che la frequenza rimanga invariata rispetto il testo precedente.
L'elemento prosody può contenere solo testo da sintetizzare e i seguenti elementi: audio, break, emphasis, mark, p, phoneme, prosody, say-as, sub, s e voice.
Tutti gli attributi di metrica sono indicativi. Se il sintetizatore vocale non riesce a sintetizzare in modo accurato il documento come specificato (per esempio, provando ad impostare il tono a 1Mhz o la frequenza di lettura a 1.000.000 di parole per minuto), deve compiere uno sforzo per continuare ad elaborare il documento imponendo un limite o sostituendo i valori specificati e non supportati, e deve informare l'ambiente di esecuzione del superamento di tali limiti.
In alcuni casi, il sintetizzatore vocale può scegliere di ignorare un certo elemento di metrica se ritiene, per esempio, che il valore indicato sia ridondante, improprio o sbagliato. In particolare, sistemi batch di sintesi vocali che impiegano unità di amplificazione grandi, potrebbero impedire la modifica della prosodia se ritengono che questa modifica possa degradare la qualità dell'output finale.
L'elemento audio permette l'inserimento di file audio preregistrati (si veda l'Appendice A per i formati supportati) e l'inserimento di altri formati audio insieme all'output vocale di sintesi. L'elemento audio può essere vuoto. Se l'elemento audio non è un'elemento vuoto allora il suo contenuto deve essere testo marcato che sarà letto se il documento sonoro non è disponibile. Il contenuto alternativo può includere testo, elementi di marcatura, elementi desc e altri elementi audio. Il contenuto alternativo può poi essere usato per la produzione di documenti non sonori e per motivi di accessibilità (si veda l'elemento desc).
L'attributo necessario è src
, che è l'URI di un documento con un certo tipo MIME.
<?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"> <!-- Elemento vuoti --> Please tell your name after the sound. <audio src="beep.wav"/> <!-- Elemento contenitore con testo alternativo --> <audio src="prompt.au">Where to you want to fly from?</audio> <audio src="welcome.wav"> <emphasis>Welcome</emphasis> to Voice Portal. </audio> </speak>
Un elemento audio viene riprodotto con successo:
La decisione delle condizioni di produzione del contenuto alternativo è lasciata al sintetizzatore. Se l'elemento audio non viene riprodotto con successo, il sintetizzatore vocale dovrebbe continuare ad analizzare il documento, notificando all'ambiente di esecuzione il problema. Il sintetizzatore può rilevare, dopo aver iniziato la riproduzione della sorgente audio, che il file non può essere riprodotto interamente. Per esempio, per problemi di codifica, distrubi sulla rete ecc. Il sintetizzatore può ritenere questo un successo o un insuccesso, ma deve documentare il suo comportamento.
L'elemento audio può contenere solo testo da sintetizzare e i seguenti elementi: audio, break, desc, emphasis, mark, p, phoneme, prosody, say-as, sub, s, voice.
L'elemento mark è un elemento vuoto che crea un marcatore nella sequenza testo/tag. Ha solo un attributo necessario, name
, che appartiene al tipo xsd:token
[SCHEMA2 §3.3.2].
L'elemento mark può essere usato per far riferimento ad una specifica locazione nella sequenza testo/tag, e può essere usato anche per inserire un marcatore all'interno di un flusso in uscita per notifiche asincrone. Quando analizza un elemento mark, il sintetizzatore vocale deve compiere una o ciascuna di queste operazioni:
name
ed allegare informazioni che permettano alla piattaforma di recuperare la posizione corrispondente nel flusso in uscita.name
dell'elemento. La gestione dell'evento è lasciata all'ambiente di esecuzione.L'elemento mark non influenza il processo di sintesi 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"> Go from <mark name="qui"/> here, to <mark name="lì"/> thereì! </speak>
L'elemento desc può apparire soltanto all'interno dell'elemento audio. Quando la sorgente a cui fa riferimento audio non è testo parlato, ad esempio rumori di fondo o suoni vari, dovrebbe contenere un elemento desc il cui contenuto testuale sia una descrizione della sorgente audio (ad esempio, "porta che sbatte"). Se il sintetizzatore vocale produce un output di solo testo, il contenuto del/degli elemento/i desc sostituisce gli altri contenuti alternativi di audio. L'attributo opzionale xml:lang può essere usato per indicare che il contenuto dell'elemento è in un'altra lingua rispetto a quella del testo che circonda l'elemento. Diversamente da tutte le altre situazioni nelle quali usiamo xml:lang nel documento, la presenza o l'assenza di questo attributo non ha effetti sull'output nel caso semplice di output vocale (invece che testuale).
<?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"> <!-- Uso normale di <desc> --> Heads of State often make mistakes when speaking in a foreign language. One of the most well-known examples is that of John F. Kennedy: <audio src="ichbineinberliner.wav">If you could hear it, this would be a recording of John F. Kennedy speaking in Berlin. <desc>Kennedy's famous German language gaffe</desc> </audio> <!-- Suggesting the language of the recording --> <!-- Although there is no requirement that a recording be in the current language (since it might even be non-speech such as music), an author might wish to suggest the language of the recording by marking the entire <audio> element using <voice>. In this case, the xml:lang attribute on <desc> can be used to put the description back into the original language. --> Here's the same thing again but with a different fallback: <voice xml:lang="de-DE"> <audio src="ichbineinberliner.wav">Ich bin ein Berliner. <desc xml:lang="en-US">Kennedy's famous German language gaffe</desc> </audio> </voice> </speak>
L'elemento desc può contenere solo testo descrittivo.
Questo documento è stato scritto con la partecipazione dei seguenti membri del W3C Voice Browser Working Group (elencati in ordine alfabetico):
Questo appendice è normativo.
L'SSML richiede che la piattaforma supporti la riproduzione dei formati audio specificati qui sotto.
Formato audio | Media Type |
---|---|
Raw (headerless) 8kHz 8-bit mono mu-law (PCM) canale singolo. (G.711) | audio/basic (da [RFC1521]) |
Raw (headerless) 8kHz 8 bit mono A-law (PCM) canale singolo. (G.711) | audio/x-alaw-basic |
WAV (RIFF header) 8kHz 8-bit mono mu-law (PCM) canale singolo. | audio/x-wav |
WAV (RIFF header) 8kHz 8-bit mono A-law (PCM) canale singolo. | audio/x-wav |
Il tipo MIME 'audio/basic' è comunemente conosciuto come formato 'au' come il formato headerless 8-bit 8Khz mu-law. Se viene specificato questo tipo MIME per la riproduzione, deve essere usato il formato mu-law. Per la riproduzione di tipi MIME 'audio/basic', i sintetizzatori devono supportare il formato mu-law e possono supportare il formato 'au'.
Questo appendice è normativo.
L'SSML è un'applicazione di XML 1.0 [XML] e supporta [UNICODE] che definisce un set di caratteri universale.
L'SSML fornisce un meccanismo per il controllo della lingua della voce attraverso l'uso dell'attributo xml:lang
. I cambi di lingua possono avvenire anche per ogni parola, sebbene eccessivi cambi di lingua possano diminuire la qualità del risultato. L'SSML permette anche un controllo più fine sulla pronuncia attraverso gli elementi lexicon e phoneme, caratteristiche che possono aiutare a migliorare la bassa qualità dei lessici di default anche per lingue che hanno ad oggi un supporto commerciale minimo.
Questo appendice è normativo.
Il W3C Voice Browser Working Group si è rivolto all'IETF per registrare un tipo MIME per lo Speech Synthesis Markup Language. Viene proposto l'uso di "application/ssml+xml".
Il W3C Voice Browser Working Group ha adottato la convenzione di usare l'estensione ".ssml" per i documenti Speech Synthesis Markup Language nei quali l'elemento radice è speak.
Questo appendice è normativo.
Lo schema di sintesi si trova su http://www.w3.org/TR/speech-synthesis/synthesis.xsd.
Note: lo schema di sintesi include una schema senza namespace, che si trova su http://www.w3.org/TR/speech-synthesis/synthesis-core.xsd, che può essere usato come base per scrivere frammenti di Speech Synthesis Markup Language (Sez. 2.2.1) all'interno di schemi con namespace diversi.
Questo appendice è normativo.
Il DTD dell'SSML si trova su http://www.w3.org/TR/speech-synthesis/synthesis.dtd.
A causa dei limiti dei DTD, il DTD dell'SSML non esprime correttamente il fatto che l'elemento metadata possa contenere elementi di altri namespace XML.
Questo appendice è informativo.
Qui sotto trovate un esempio di lettura delle intestazioni di alcuni messaggi email. Gli elementi p e s vengono usati per marcare la struttura del testo. L'elemento break viene posizionato prima dell'ora ed ha l'effetto di rimarcare l'ora come informazione importante alla quale l'ascoltatore debba prestare attenzione. L'elemento prosody viene usato per rallentare la velocità di lettura dell'oggetto delle email in modo che l'utente abbia tempo a sufficienza per ascoltare e segnarsi qualcosa.
<?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="en-US"> <p> <s>You have 4 new messages.</s> <s>The first is from Stephanie Williams and arrived at <break/> 3:45pm. </s> <s> The subject is <prosody rate="-20%">ski trip</prosody> </s> </p> </speak>
Il seguente esempio combina file audio e varie voci di lettura per dare informazioni su una collezione di dischi.
<?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="en-US"> <p> <voice gender="male"> <s>Today we preview the latest romantic music from Example.</s> <s>Hear what the Software Reviews said about Example's newest hit.</s> </voice> </p> <p> <voice gender="female"> He sings about issues that touch us all. </voice> </p> <p> <voice gender="male"> Here's a sample. <audio src="http://www.example.com/music.wav"/> Would you like to buy it? </voice> </p> </speak>
Succede spesso che qualcuno voglia includere delle frasi in lingua straniera (come il titolo di un film) in una applicazione, senza aver bisogno di cambiare lingua (magari attraverso l'elemento voice). Un modo semplice di realizzare questa cosa viene esposto di seguito. In questo esempio il sintetizzatore vocale leggerà il titolo del film usando le regole di pronuncia della lingua scelta ("en-US" in questo caso), cercando di parlare (e pronunciare) come farebbe qualcuno che non conoscesse quella lingua straniera.
<?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"> The title of the movie is: "La vita è bella" (Life is beautiful), which is directed by Roberto Benigni. </speak>
Con alcuni accorgimenti possiamo decisamente migliorare la qualità audio sia creando una pronuncia personalizzata in un lessico esterno (si veda la Sezione 3.1.4) sia con l'elemento phoneme come mostrato nel prossimo esempio.
È importante notare che il supporto all'alfabeto IPA è una caratteristica opzionale e che i fonemi per una lingua esterna possono essere sintetizzati con una certa approssimazione (si veda la Sezione 3.1.4 per maggiori dettagli). Il seguente esempio (n.d.t, che non verrà tradotto) usa solo fonemi comuni in inglese americano.
<?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"> The title of the movie is: <phoneme alphabet="ipa" ph="ˈlɑ ˈviːɾə ˈʔeɪ ˈbɛlə"> La vita è bella </phoneme> <!-- The IPA pronunciation is ˈlɑ ˈviːɾə ˈʔeɪ ˈbɛlə --> (Life is beautiful), which is directed by <phoneme alphabet="ipa" ph="ɹəˈbɛːɹɾoʊ bɛˈniːnji"> Roberto Benigni </phoneme> <!-- The IPA pronunciation is ɹəˈbɛːɹɾoʊ bɛˈniːnji --> <!-- Note that in actual practice an author might change the encoding to UTF-8 and directly use the Unicode characters in the document rather than using the escapes as shown. The escaped values are shown for ease of copying. --> </speak>
Il linguaggio SMIL [SMIL] è un linguaggio di controllo multimediale basato su XML. È progettato specificamente per la descrizione di applicazioni multimediali dinamiche per includono voci sintetizzate.
Il file 'greetings.ssml' contiene:
<?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="en-US"> <s> <mark name="greetings"/> <emphasis>Greetings</emphasis> from the <sub alias="World Wide Web Consortium">W3C</sub>! </s> </speak>
SMIL Esempio 1: appare il logo del W3C, e poi, dopo un secondo, viene sintetizzata la sequenza vocale. Il file 'greetings.smil' contine:
<smil xmlns="http://www.w3.org/2001/SMIL20/Language"> <head> <top-layout width="640" height="320"> <region id="whole" width="640" height="320"/> </top-layout> </head> <body> <par> <img src="http://www.w3.org/Icons/w3c_home" region="whole" begin="0s"/> <ref src="greetings.ssml" begin="1s"/> </par> </body> </smil>
SMIL Esempio 2: appare il logo del W3C, poi un click sull'immagine causa la sua sparizione e l'inizio della sequenza vocale. Il file 'greetings.smil' contiene:
<smil xmlns="http://www.w3.org/2001/SMIL20/Language"> <head> <top-layout width="640" height="320"> <region id="whole" width="640" height="320"/> </top-layout> </head> <body> <seq> <img id="logo" src="http://w3clogo.gif" region="whole" begin="0s" end="logo.activateEvent"/> <ref src="greetings.ssml"/> </seq> </body> </smil>
<?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>Welcome</emphasis> to the Bird Seed Emporium. <audio src="rtsp://www.birdsounds.example.com/thrush.wav"/> We have 250 kilogram drums of thistle seed for $299.95 plus shipping and handling this month. <audio src="http://www.birdsounds.example.com/mourningdove.wav"/> </prompt> </block> </form> </vxml>
Riportiamo una lista delle modifiche a questa specifica fino alla Candidate Recommendation: