Struttura ed eventi di documenti SSML
Speech Synthesis Markup Language (SSML) con testo di input determina la struttura, il contenuto e altre caratteristiche dell'output vocale. Ad esempio, è possibile usare SSML per definire un paragrafo, una frase, un'interruzione o una pausa o un silenzio. È possibile eseguire il wrapping del testo con tag di evento, ad esempio segnalibro o viseme, che possono essere elaborati in un secondo momento dall'applicazione.
Per informazioni dettagliate su come strutturare gli elementi nel documento SSML, vedere le sezioni seguenti.
Struttura del documento
L'implementazione del servizio Voce di SSML si basa sulla versione 1.0 del Speech Synthesis Markup Language del World Wide Web Consortium. Gli elementi supportati dal riconoscimento vocale possono essere diversi dallo standard W3C.
Ogni documento SSML viene creato con elementi o tag SSML. Questi elementi vengono usati per regolare la voce, lo stile, il passo, la prosodia, il volume e altro ancora.
Ecco un subset della struttura e della sintassi di base di un documento SSML:
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xmlns:mstts="https://www.w3.org/2001/mstts" xml:lang="string">
<mstts:backgroundaudio src="string" volume="string" fadein="string" fadeout="string"/>
<voice name="string" effect="string">
<audio src="string"></audio>
<bookmark mark="string"/>
<break strength="string" time="string" />
<emphasis level="value"></emphasis>
<lang xml:lang="string"></lang>
<lexicon uri="string"/>
<math xmlns="http://www.w3.org/1998/Math/MathML"></math>
<mstts:audioduration value="string"/>
<mstts:ttsembedding speakerProfileId="string"></mstts:ttsembedding>
<mstts:express-as style="string" styledegree="value" role="string"></mstts:express-as>
<mstts:silence type="string" value="string"/>
<mstts:viseme type="string"/>
<p></p>
<phoneme alphabet="string" ph="string"></phoneme>
<prosody pitch="value" contour="value" range="value" rate="value" volume="value"></prosody>
<s></s>
<say-as interpret-as="string" format="string" detail="string"></say-as>
<sub alias="string"></sub>
</voice>
</speak>
Alcuni esempi di contenuto consentiti in ogni elemento sono descritti nell'elenco seguente:
audio
: il corpo dell'elementoaudio
può contenere testo normale o markup SSML pronunciato se il file audio non è disponibile o non riproducibile. L'elementoaudio
può contenere anche testo e gli elementi seguenti:audio
,break
,p
,phoneme
s
,prosody
,say-as
, esub
.bookmark
: questo elemento non può contenere testo o altri elementi.break
: questo elemento non può contenere testo o altri elementi.emphasis
: questo elemento può contenere testo e gli elementi seguenti:audio
,break
,emphasis
,lang
phoneme
,prosody
,say-as
, esub
.lang
: questo elemento può contenere tutti gli altri elementi ad eccezionemstts:backgroundaudio
di ,voice
espeak
.lexicon
: questo elemento non può contenere testo o altri elementi.math
: questo elemento può contenere solo elementi text e MathML.mstts:audioduration
: questo elemento non può contenere testo o altri elementi.mstts:backgroundaudio
: questo elemento non può contenere testo o altri elementi.mstts:embedding
: questo elemento può contenere testo e gli elementi seguenti:audio
,break
,emphasis
,lang
phoneme
,prosody
,say-as
, esub
.mstts:express-as
: questo elemento può contenere testo e gli elementi seguenti:audio
,break
,emphasis
,lang
phoneme
,prosody
,say-as
, esub
.mstts:silence
: questo elemento non può contenere testo o altri elementi.mstts:viseme
: questo elemento non può contenere testo o altri elementi.p
: questo elemento può contenere testo e gli elementi seguenti:audio
,break
,phoneme
,prosody
say-as
,sub
,mstts:express-as
, es
.phoneme
: questo elemento può contenere solo testo e nessun altro elemento.prosody
: questo elemento può contenere testo e gli elementi seguenti:audio
,break
,p
,phoneme
prosody
,say-as
,sub
, es
.s
: questo elemento può contenere testo e gli elementi seguenti:audio
,break
phoneme
, ,prosody
say-as
,mstts:express-as
, esub
.say-as
: questo elemento può contenere solo testo e nessun altro elemento.sub
: questo elemento può contenere solo testo e nessun altro elemento.speak
: elemento radice di un documento SSML. Questo elemento può contenere gli elementi seguenti:mstts:backgroundaudio
evoice
.voice
: questo elemento può contenere tutti gli altri elementi trannemstts:backgroundaudio
espeak
.
Il servizio Voce gestisce automaticamente la punteggiatura in base alle esigenze, ad esempio la sospensione dopo un punto o l'uso dell'intonazione corretta quando una frase termina con un punto interrogativo.
Caratteri speciali
Per usare i caratteri &
, <
e >
all'interno del valore o del testo dell'elemento SSML, è necessario usare il formato dell'entità. In particolare, è necessario usare &
al posto di &
, usare <
al posto di <
e usare >
al posto di >
. In caso contrario, SSML non viene analizzato correttamente.
Ad esempio, specificare green & yellow
anziché green & yellow
. Il codice SSML seguente viene analizzato come previsto:
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="en-US">
<voice name="en-US-AvaNeural">
My favorite colors are green & yellow.
</voice>
</speak>
I caratteri speciali, ad esempio virgolette, apostrofi e parentesi quadre, devono essere preceduti da caratteri di escape. Per altre informazioni, vedere Extensible Markup Language (XML) 1.0: Appendice D.
Le virgolette doppie o singole devono racchiudere i valori dell'attributo. Ad esempio, <prosody volume="90">
e <prosody volume='90'>
sono elementi validi ben formati, ma <prosody volume=90>
non riconosciuti.
Pronunciare l'elemento radice
L'elemento speak
contiene informazioni quali versione, linguaggio e definizione del vocabolario di markup. L'elemento speak
è l'elemento radice necessario per tutti i documenti SSML. È necessario specificare la lingua predefinita all'interno dell'elemento speak
, indipendentemente dal fatto che la lingua venga modificata altrove, ad esempio all'interno dell'elemento lang
.
Ecco la sintassi per l'elemento speak
:
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="string"></speak>
Attributo | Descrizione | Obbligatorio o facoltativo |
---|---|---|
version |
Indica la versione della specifica SSML utilizzata per interpretare il markup del documento. La versione corrente è "1.0". | Richiesto |
xml:lang |
Lingua del documento radice. Il valore può contenere un codice linguistico, en ad esempio (inglese) o impostazioni locali come en-US (inglese - Stati Uniti). |
Richiesto |
xmlns |
URI del documento che definisce il vocabolario di markup (i tipi di elemento e i nomi degli attributi) del documento SSML. L'URI corrente è "http://www.w3.org/2001/10/synthesis". | Richiesto |
L'elemento speak
deve contenere almeno un elemento voce.
esempi di parlare
I valori supportati per gli attributi dell'elemento speak
sono stati descritti in precedenza.
Esempio di voce singola
In questo esempio viene usata la en-US-AvaNeural
voce . Per altri esempi, vedere esempi vocali.
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="en-US">
<voice name="en-US-AvaNeural">
This is the text that is spoken.
</voice>
</speak>
Aggiungere un'interruzione
Utilizzare l'elemento per eseguire l'override break
del comportamento predefinito di interruzioni o pause tra le parole. In caso contrario, il servizio Voce inserisce automaticamente le pause.
L'utilizzo degli break
attributi dell'elemento è descritto nella tabella seguente.
Attributo | Descrizione | Obbligatorio o facoltativo |
---|---|---|
strength |
Durata relativa di una pausa utilizzando uno dei valori seguenti:
|
Facoltativo |
time |
Durata assoluta di una pausa in secondi ( ad esempio 2s ) o millisecondi (ad esempio 500ms ). I valori validi sono compresi tra 0 e 5000 millisecondi. Se si imposta un valore maggiore del massimo supportato, il servizio usa 5000ms . Se l'attributo time è impostato, l'attributo strength viene ignorato. |
Facoltativo |
Di seguito sono riportati altri dettagli sull'attributo strength
.
Punti di forza | Durata relativa |
---|---|
X-weak | 250 ms |
Vulnerabile | 500 ms |
Medio | 750 ms |
Assoluta | 1.000 ms |
X-strong | 1.250 ms |
Esempi di interruzione
I valori supportati per gli attributi dell'elemento break
sono stati descritti in precedenza. I tre modi seguenti aggiungono tutte le interruzioni di 750 ms.
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="en-US">
<voice name="en-US-AvaNeural">
Welcome <break /> to text to speech.
Welcome <break strength="medium" /> to text to speech.
Welcome <break time="750ms" /> to text to speech.
</voice>
</speak>
Aggiungi silenzio
Usare l'elemento mstts:silence
per inserire pause prima o dopo il testo o tra due frasi adiacenti.
Una delle differenze tra mstts:silence
e break
è che un break
elemento può essere inserito in qualsiasi punto del testo. Il silenzio funziona solo all'inizio o alla fine del testo di input o al limite di due frasi adiacenti.
L'impostazione di silenzio viene applicata a tutto il testo di input all'interno dell'elemento che voice
lo racchiude. Per reimpostare o modificare di nuovo l'impostazione del silenzio, è necessario usare un nuovo voice
elemento con la stessa voce o una voce diversa.
L'utilizzo degli mstts:silence
attributi dell'elemento è descritto nella tabella seguente.
esempi di silenzio mstts
I valori supportati per gli attributi dell'elemento mstts:silence
sono stati descritti in precedenza.
In questo esempio viene mstts:silence
usato per aggiungere 200 ms di silenzio tra due frasi.
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xmlns:mstts="http://www.w3.org/2001/mstts" xml:lang="en-US">
<voice name="en-US-AvaNeural">
<mstts:silence type="Sentenceboundary" value="200ms"/>
If we're home schooling, the best we can do is roll with what each day brings and try to have fun along the way.
A good place to start is by trying out the slew of educational apps that are helping children stay happy and smash their schooling at the same time.
</voice>
</speak>
In questo esempio viene mstts:silence
usato per aggiungere 50 ms di silenzio alla virgola, 100 ms di silenzio in corrispondenza del punto e virgola e 150 ms di silenzio alla virgola dell'enumerazione.
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xmlns:mstts="http://www.w3.org/2001/mstts" xml:lang="zh-CN">
<voice name="zh-CN-YunxiNeural">
<mstts:silence type="comma-exact" value="50ms"/><mstts:silence type="semicolon-exact" value="100ms"/><mstts:silence type="enumerationcomma-exact" value="150ms"/>你好呀,云希、晓晓;你好呀。
</voice>
</speak>
Specificare paragrafi e frasi
Gli p
elementi e s
vengono utilizzati rispettivamente per indicare paragrafi e frasi. In assenza di questi elementi, il servizio Voce determina automaticamente la struttura del documento SSML.
Esempi di paragrafi e frasi
Nell'esempio seguente vengono definiti due paragrafi contenenti frasi. Nel secondo paragrafo, il servizio Voce determina automaticamente la struttura delle frasi, poiché non sono definite nel documento SSML.
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="en-US">
<voice name="en-US-AvaNeural">
<p>
<s>Introducing the sentence element.</s>
<s>Used to mark individual sentences.</s>
</p>
<p>
Another simple paragraph.
Sentence structure in this paragraph is not explicitly marked.
</p>
</voice>
</speak>
Elemento Bookmark
È possibile usare l'elemento bookmark
in SSML per fare riferimento a una posizione specifica nella sequenza di testo o tag. Quindi si usa Speech SDK e si sottoscrive l'evento per ottenere l'offset BookmarkReached
di ogni marcatore nel flusso audio. L'elemento bookmark
non è parlato. Per altre informazioni, vedere Sottoscrivere gli eventi del sintetizzatore.
L'utilizzo degli bookmark
attributi dell'elemento è descritto nella tabella seguente.
Attributo | Descrizione | Obbligatorio o facoltativo |
---|---|---|
mark |
Testo di riferimento dell'elemento bookmark . |
Richiesto |
Esempi di segnalibri
I valori supportati per gli attributi dell'elemento bookmark
sono stati descritti in precedenza.
Ad esempio, è possibile conoscere l'offset temporale di ogni parola fiore nel frammento di codice seguente:
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="en-US">
<voice name="en-US-AvaNeural">
We are selling <bookmark mark='flower_1'/>roses and <bookmark mark='flower_2'/>daisies.
</voice>
</speak>
Elemento Viseme
Un viseme è la descrizione visiva di un fonemo nella lingua parlata. Definisce la posizione del viso e della bocca mentre una persona sta parlando. È possibile usare l'elemento in SSML per richiedere l'output mstts:viseme
viseme. Per altre informazioni, vedi Ottenere la posizione del viso con viseme.
L'impostazione viseme viene applicata a tutto il testo di input all'interno dell'elemento che voice
lo racchiude. Per reimpostare o modificare nuovamente l'impostazione viseme, è necessario usare un nuovo voice
elemento con la stessa voce o una voce diversa.
L'utilizzo degli viseme
attributi dell'elemento è descritto nella tabella seguente.
Attributo | Descrizione | Obbligatorio o facoltativo |
---|---|---|
type |
Tipo di output viseme.
|
Richiesto |
Nota
Attualmente supporta redlips_front
solo le voci neurali nelle en-US
impostazioni locali e FacialExpression
supporta le voci neurali nelle en-US
impostazioni locali e zh-CN
.
Esempi di Viseme
I valori supportati per gli attributi dell'elemento viseme
sono stati descritti in precedenza.
Questo frammento di codice SSML illustra come richiedere forme di fusione con il parlato sintetizzato.
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xmlns:mstts="http://www.w3.org/2001/mstts" xml:lang="en-US">
<voice name="en-US-AvaNeural">
<mstts:viseme type="FacialExpression"/>
Rainbow has seven colors: Red, orange, yellow, green, blue, indigo, and violet.
</voice>
</speak>