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'elemento audio può contenere testo normale o markup SSML pronunciato se il file audio non è disponibile o non riproducibile. L'elemento audio può contenere anche testo e gli elementi seguenti: audio, break, p, phonemes, prosody, say-as, e sub.
  • 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, langphoneme, prosody, say-as, e sub.
  • lang: questo elemento può contenere tutti gli altri elementi ad eccezione mstts:backgroundaudiodi , voicee speak.
  • 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, langphoneme, prosody, say-as, e sub.
  • mstts:express-as: questo elemento può contenere testo e gli elementi seguenti: audio, break, emphasis, langphoneme, prosody, say-as, e sub.
  • 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, prosodysay-as, sub, mstts:express-as, e s.
  • phoneme: questo elemento può contenere solo testo e nessun altro elemento.
  • prosody: questo elemento può contenere testo e gli elementi seguenti: audio, break, p, phonemeprosody, say-as, sub, e s.
  • s: questo elemento può contenere testo e gli elementi seguenti: audio, breakphoneme, , prosodysay-as, mstts:express-as, e sub.
  • 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 e voice.
  • voice: questo elemento può contenere tutti gli altri elementi tranne mstts:backgroundaudio e speak.

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 &amp; al posto di &, usare &lt; al posto di <e usare &gt; al posto di >. In caso contrario, SSML non viene analizzato correttamente.

Ad esempio, specificare green &amp; 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 &amp; 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:
  • x-weak
  • Debole
  • medium (impostazione predefinita)
  • assoluta
  • x-strong
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.

Attributo Descrizione Obbligatorio o facoltativo
type Specifica dove e come aggiungere il silenzio. Sono supportati i tipi di silenzio seguenti:
  • Leading – Silenzio aggiuntivo all'inizio del testo. Il valore impostato viene aggiunto al silenzio naturale prima dell'inizio del testo.
  • Leading-exact – Silenzio all'inizio del testo. Il valore è una lunghezza assoluta del silenzio.
  • Tailing – Silenzio extra alla fine del testo. Il valore impostato viene aggiunto al silenzio naturale dopo l'ultima parola.
  • Tailing-exact – Silenzio alla fine del testo. Il valore è una lunghezza assoluta del silenzio.
  • Sentenceboundary – Silenzio extra tra frasi adiacenti. La lunghezza effettiva del silenzio per questo tipo include il silenzio naturale dopo l'ultima parola nella frase precedente, il valore impostato per questo tipo e il silenzio naturale prima della parola iniziale nella frase successiva.
  • Sentenceboundary-exact – Silenzio tra frasi adiacenti. Il valore è una lunghezza assoluta del silenzio.
  • Comma-exact – Silenzio in corrispondenza della virgola in formato a metà larghezza o a larghezza intera. Il valore è una lunghezza assoluta del silenzio.
  • Semicolon-exact – Silenzio in corrispondenza del punto e virgola in formato a metà larghezza o a larghezza intera. Il valore è una lunghezza assoluta del silenzio.
  • Enumerationcomma-exact : silenzio nella virgola dell'enumerazione in formato a larghezza intera. Il valore è una lunghezza assoluta del silenzio.

Un tipo di silenzio assoluto (con il -exact suffisso) 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 Leading i tipi e Leading-exact , il Leading-exact tipo diventa effettivo. L'evento WordBoundary ha la precedenza sulle impostazioni di silenzio correlate alla punteggiatura, tra cui Comma-exact, Semicolon-exacto 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 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. Richiesto

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.
  • redlips_front – sincronizzazione labiale con l'ID viseme e l'output dell'offset audio
  • FacialExpression – unire l'output delle forme
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>

Passaggi successivi