Struttura del documento SSML ed eventi
Speech Synthesis Markup Language (SSML) con testo di input determina la struttura, il contenuto e altre caratteristiche dell'output di sintesi vocale. Ad esempio, è possibile usare SSML per definire un paragrafo, una frase, un'interruzione o una pausa, o il silenzio. È possibile eseguire il wrapping del testo con tag di evento, ad esempio segnalibro o visema, che possono essere elaborati successivamente dall'applicazione.
Per informazioni dettagliate su come strutturare gli elementi nel documento SSML, vedere le sezioni seguenti.
Nota
Oltre alle voci neurali non HD (Speech Neural) di Azure per intelligenza artificiale, è anche possibile usare le voci HD (Speech High Definition) di Azure per intelligenza artificiale e le voci neurali OpenAI (HD e non HD) di Azure. Le voci HD offrono una qualità più elevata per scenari più versatili.
Alcune voci non supportano tutti i tag SSML (Speech Synthesis Markup Language). Sono inclusi testo neurale per voce HD, voci personali e voci incorporate.
- Per le voci HD (Speech High Definition) di Azure per intelligenza artificiale, vedere il supporto di SSML qui.
- Per la voce personale, è possibile trovare il supporto SSML qui.
- Per le voci incorporate, vedere il supporto di SSML qui.
Struttura del documento
L'implementazione del servizio Voce di SSML si basa sulla versione 1.0 di Speech Synthesis Markup Language del World Wide Web Consortium. Gli elementi supportati di Voce 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, l'intonazione, 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 contenuti consentiti in ogni elemento sono descritti nell'elenco seguente:
audio
: Il corpo dell'elementoaudio
può contenere testo normale o markup SSML che viene pronunciato se il file audio non è disponibile o non è riproducibile. L'elementoaudio
può contenere anche testo e gli elementi seguenti:audio
,break
,p
,s
,phoneme
,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 eccezione dimstts:backgroundaudio
,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 evitati. 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 è riconosciuto.
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, ad esempio en (inglese) o impostazioni locali come en-US (inglese - Stati Uniti). |
Richiesto |
xmlns |
L'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 parlato
I valori supportati per gli attributi dell'elemento speak
sono stati descritti in precedenza.
Esempio di voce singola
Questo esempio usa la voce en-US-AvaNeural
. Per altri esempi, vedere esempi di voce.
<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 break
per eseguire l'override del comportamento predefinito di interruzioni o pause tra le parole. In caso contrario, il servizio Voce inserisce automaticamente le pause.
La tabella seguente descrive l'uso degli attributi dell'elemento break
.
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 in millisecondi ( ad esempio 500ms ). I valori validi sono compresi tra 0 e 20000 millisecondi. Se si imposta un valore maggiore del massimo supportato, il servizio usa 20000ms . 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 |
---|---|
Più debole | 250 ms |
Vulnerabile | 500 ms |
Medio | 750 ms |
Assoluta | 1.000 ms |
Più forte | 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 elemento break
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 del silenzio si applica a tutto il testo immesso all'interno dell'elemento voice
che lo contiene. Per ripristinare o modificare l'impostazione del silenzio, è necessario usare un nuovo elemento voice
con la stessa voce o con una voce diversa.
L'uso degli attributi dell'elemento mstts:silence
è descritto nella tabella seguente.
Attributo | Descrizione | Obbligatorio o facoltativo |
---|---|---|
type |
Specifica dove e come aggiungere il silenzio. Sono supportati i tipi di silenzio seguenti:
Un tipo di silenzio assoluto (con il suffisso -exact ) sostituisce qualsiasi silenzio iniziale o finale altrimenti naturale. I tipi di silenzio assoluto hanno la precedenza sul tipo non assoluto corrispondente. Ad esempio, se si impostano entrambi i tipi Leading e Leading-exact , il tipo Leading-exact diventa effettivo. L'evento WordBoundary ha la precedenza sulle impostazioni di silenzio correlate alla punteggiatura, tra cui Comma-exact , Semicolon-exact o Enumerationcomma-exact . Quando si usano sia l'evento WordBoundary che le impostazioni di silenzio correlate alla punteggiatura, le impostazioni di silenzio correlate alla punteggiatura non diventano effettive. |
Richiesto |
Value |
Durata di una pausa in secondi, (ad esempio 2s ) o in millisecondi (ad esempio, 500ms ). I valori validi sono compresi tra 0 e 20000 millisecondi. Se si imposta un valore maggiore del massimo supportato, il servizio usa 20000ms . |
Richiesto |
esempi di silenzio mstts
I valori supportati per gli attributi dell'elemento mstts:silence
sono stati descritti in precedenza.
In questo esempio, mstts:silence
viene 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, mstts:silence
viene 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 elementi p
e s
vengono usati 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 che contengono ognuno una frase. 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 BookmarkReached
per ottenere l'offset di ogni marcatore nel flusso audio. L'elemento bookmark
non è parlato. Per altre informazioni, vedere Sottoscrivere gli eventi del sintetizzatore.
L'uso degli attributi dell'elemento bookmark
è 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 visema
Un visema è la descrizione visiva di un fonema nella lingua parlata. Definisce la posizione del viso e della bocca mentre una persona sta parlando. È possibile usare l'elemento mstts:viseme
in SSML per richiedere l'output del visema. Per altre informazioni, vedere Ottenere la posizione del viso con visema.
L'impostazione del visema si applica a tutto il testo immesso all'interno dell'elemento voice
che lo contiene. Per ripristinare o modificare l'impostazione del visema, è necessario usare un nuovo elemento voice
con la stessa voce o con una voce diversa.
L'uso degli attributi dell'elemento viseme
è descritto nella tabella seguente.
Attributo | Descrizione | Obbligatorio o facoltativo |
---|---|---|
type |
Tipo di output del visema.
|
Richiesto |
Nota
Attualmente, redlips_front
supporta solo le voci neurali nelle impostazioni locali en-US
e FacialExpression
supporta le voci neurali nelle impostazioni locali en-US
e zh-CN
.
Esempi di visema
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>