# SSML

Lo Speech Synthesis Markup Language (SSML) (in inglese: linguaggio di markup per la sintesi vocale) è un linguaggio di markup basato su XML e orientato ai sistemi di conversione del testo in parlato, per controllarne e ottimizzarne la resa. Il linguaggio è stato specificato dal gruppo di studio "Voice browser" del World Wide Web Consortium (W3C) e trova frequente applicazioni in script di tipo VoiceXML per sistemi di telefonia interattiva automatizzata. Viene impiegato inoltre per la produzione di audiolibri.
Sebbene alla specifica attuale abbiano contribuito molte aziende produttrici di sistemi di sintesi vocale (tra cui il centro di ricerca italiano CSELT), l'SSML si basa su JSML (Java Speech Markup Language), linguaggio di markup concepito da Sun Microsystems. Il linguaggio non costituisce uno standard obbligatorio: infatti, ogni sintetizzatore vocale deve essere comunque in grado di eseguire la conversione anche in assenza di markup e del resto le definizioni stesse del linguaggio non prevedono un markup specifico per alcune funzionalità di base che si suppongono già presenti in qualsiasi sistema di sintesi vocale (come per esempio la resa in pause della punteggiatura).

## Caratteristiche

I tag definiti in SSML sono in grado di controllare la resa di un sistema di sintesi durante tutte le sei fasi fondamentali del processo tipico di elaborazione:
* Scansione dell'XML (parsing): in questa fase il file SSML viene esaminato per estrarre la parte dei contenuti. Il markup controlla la resa di quelle che il sistema di sintesi considererà entità singole (token); per esempio: anno<break />nuovo farà in modo che le due parole "anno" e "nuovo" vengano considerate come due parole completamente staccate tra di loro invece che due parole legate tra loro e separate solo da una breve pausa.
* Analisi della struttura: in questa fase il markup controlla la suddivisione in paragrafi e frasi, consentendo così di controllare gli stacchi tra parti diverse del testo.
* Normalizzazione del testo: in questa fase il sistema di sintesi risolve e prepara per la resa costrutti particolari come abbreviazioni e numeri, basandosi sul contesto e in funzione della lingua finale. Il markup viene usato per controllare e risolvere ambiguità, indicando direttamente al sistema di sintesi come deve esser convertita la parte specifica: per esempio, consente di indicare se il testo "1/2" deve essere pronunciato come "un mezzo", "metà", "uno di due", "uno o due". Questo è particolarmente utile per le lingue orientali, dove la pronuncia del singolo carattere può cambiare completamente in base al contesto o al sistema usato. Un esempio è la lingua giapponese dove, in caso di ambiguità tra Kanji e Kana, si può indicare tramite il markup la corretta resa fonetica desiderata, per es. se 今日は va pronunciato きょうは ("kyou wa" = "oggi") o こんにちは ("konnichiwa" = "ciao").
* Conversione testo-fonema: in questa fase il sistema di sintesi deve elaborare la pronuncia corretta, in base ai fonemi specifici di una determinata lingua. Il markup può essere usato per controllare in modo esplicito la pronuncia desiderata e in questa fase risulta particolarmente utile per acronimi o abbreviazioni che il sistema di sintesi non è stato in grado di risolvere durante la fase di normalizzazione.
* Analisi della prosodia: in questa fase il sistema di sintesi genera e controlla tutta una serie di parametri che servono per rendere la sintesi il più vicina possibile al discorso parlato di un essere umano: intonazione, ritmo, pause, velocità, enfasi eccetera. Il markup in questa fase è particolarmente efficace in quanto consente il controllo diretto di alcuni di questi parametri.
* Generazione dell'audio: il markup in questa fase consente di selezionare il tipo di voce (maschile, femminile), le sue caratteristiche specifiche (es. donna giovane, uomo anziano) e anche l'eventuale inserimento di elementi di audio pre-registrato.

## Evoluzione

La versione 1.0 di SSML, attualmente in forza, ha introdotto tutti gli elementi di base. Tuttavia, in seguito sia al miglioramento delle tecniche di sintesi che soprattutto all'emergere di nuove realtà industriali ed economiche, soprattutto in Asia, è sorta la necessità di estendere e migliorare il controllo tramite markup.
Da queste esigenze è partita la definizione della versione 1.1, che estende praticamente tutte le funzionalità di markup della versione 1.0. Tra le principali funzionalità aggiunte ci sono:
* la possibilità di controllare quali parti del testo devono essere convertite in audio
* la possibilità di referenziare e selezionare sorgenti esterne per la definizione delle regole di pronuncia
* il controllo esplicito per la definizione di un token e di una singola parola
* un evento per la gestione di errori nella sintesi (per esempio in caso di impossibilità di generare in una lingua specifica una determinata pronuncia o una determinata voce)
* controlli più estesi per la resa di audio registrato (volume, velocità, ripetizione continua)
Il W3C ha pubblicato la versione 1.1 in fase "raccomandazione candidata" una prima volta il 7 novembre 2008 e un successivo aggiornamento il 27 agosto 2009: questo significa che per i produttori è già possibile utilizzare il contenuto della specifica per le prime implementazioni di prova. La fase successiva, immediatamente precedente all'approvazione definitiva, prevede il passaggio a "raccomandazione proposta". Tale passaggio, che in base al processo del W3C sarebbe potuto avvenire solo dopo il 27 novembre 2009, è avvenuto il 7 settembre 2010.

## Esempio

Questo è un esempio di documento SSML che controlla la generazione dello stesso messaggio in due lingue differenti (inglese americano e spagnolo messicano), associate a una scelta: