Condividi tramite


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'elemento audio può contenere testo normale o markup SSML che viene pronunciato se il file audio non è disponibile o non è riproducibile. L'elemento audio può contenere anche testo e gli elementi seguenti: audio, break, p, s, phoneme, 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, lang, phoneme, prosody, say-as e sub.
  • lang: questo elemento può contenere tutti gli altri elementi ad eccezione di mstts:backgroundaudio, voice e 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, lang, phoneme, prosody, say-as e sub.
  • mstts:express-as: questo elemento può contenere testo e gli elementi seguenti: audio, break, emphasis, lang, phoneme, 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, prosody, say-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, phoneme, prosody, say-as, sub e s.
  • s: questo elemento può contenere testo e gli elementi seguenti: audio, break, phoneme, prosody, say-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 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:
  • molto debole
  • debole
  • medio (impostazione predefinita)
  • assoluta
  • molto forte
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:
  • 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 in corrispondenza della virgola di enumerazione in formato a larghezza intera. Il valore è una lunghezza assoluta del silenzio.

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

Passaggi successivi