Condividi tramite


Pronuncia con SSML

È possibile usare lo Speech Synthesis Markup Language (SSML) con sintesi vocale per specificare il modo in cui viene pronunciato il parlato. Ad esempio, è possibile usare SSML con fonemi e lessico personalizzati per migliorare la pronuncia. SSML può essere usato anche per definire il modo in cui viene pronunciata una parola o un'espressione matematica.

Per informazioni dettagliate su come usare gli elementi SSML per migliorare la pronuncia, vedere le seguenti sezioni. Per altre informazioni sulla sintassi SSML, vedere Struttura ed eventi di documenti SSML.

elemento fonema

L'elemento phoneme viene usato per la pronuncia fonetica nei documenti SSML. Fornire sempre un discorso leggibile dall’uomo come fallback.

Gli alfabeti fonetici sono costituiti da foni, a loro volta costituiti da lettere, numeri o caratteri, talvolta in combinazione tra loro. Ogni fono descrive un suono univoco del parlato. L’alfabeto fonetico differisce dall'alfabeto latino, dove qualsiasi lettera può rappresentare più suoni pronunciati. Considera le diverse pronunce en-US della lettera "c" nelle parole "caramelle" e "cessare" o le diverse pronunce della combinazione di lettere "th" nelle parole "thing" e "those".

Nota

Per un elenco delle impostazioni locali che supportano i fonemi, vedere le note a piè di pagina della tabella supporto delle lingue.

La tabella seguente descrive l'uso degli attributi dell'elemento phoneme.

Attributo Descrizione Obbligatorio o facoltativo
alphabet Alfabeto fonetico da usare quando si sintetizza la pronuncia della stringa nell'attributo ph. La stringa che specifica l'alfabeto deve essere specificata in lettere minuscole. Le opzioni seguenti sono i possibili alfabeti che si possono specificare:
L'alfabeto si applica solo al phoneme nell'elemento.
Facoltativo
ph Stringa contenente foni che specificano la pronuncia della parola nell'elemento phoneme. Se la stringa specificata contiene foni non riconosciuti, la sintesi vocale rifiuta l'intero documento SSML e non produce nessun output vocale specificato nel documento.

Per ipa, per accentare una sillaba posizionando il simbolo dell’accento prima di questa sillaba, è necessario contrassegnare tutte le sillabe della parola. Altrimenti, verrà accentata la sillaba che precede il simbolo dell’accento. Per sapi, se si vuole accentare una sillaba, è necessario posizionare il simbolo dell’accento dopo questa sillaba, indipendentemente dal fatto che tutte le sillabe della parola siano contrassegnate o meno.
Richiesto

esempi di fonema

I valori supportati per gli attributi dell'elemento phoneme sono stati descritti in precedenza. Nei primi due esempi, i valori di ph="tə.ˈmeɪ.toʊ" o ph="təmeɪˈtoʊ" vengono specificati per accentare la sillaba meɪ.

<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="en-US">
    <voice name="en-US-AvaNeural">
        <phoneme alphabet="ipa" ph="tə.ˈmeɪ.toʊ"> tomato </phoneme>
    </voice>
</speak>
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="en-US">
    <voice name="en-US-AvaNeural">
        <phoneme alphabet="ipa" ph="təmeɪˈtoʊ"> tomato </phoneme>
    </voice>
</speak>
<speak version="1.0" xmlns="https://www.w3.org/2001/10/synthesis" xml:lang="en-US">
    <voice name="en-US-AvaNeural">
        <phoneme alphabet="sapi" ph="iy eh n y uw eh s"> en-US </phoneme>
    </voice>
</speak>
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="en-US">
    <voice name="en-US-AvaNeural">
        <s>His name is Mike <phoneme alphabet="ups" ph="JH AU"> Zhou </phoneme></s>
    </voice>
</speak>
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="en-US">
     <voice name="en-US-AvaNeural">
        <phoneme alphabet='x-sampa' ph='he."lou'>hello</phoneme>
    </voice>
</speak>

Lessico personalizzato

È possibile definire il modo in cui le singole entità (ad esempio una società, un termine medico o un emoji) vengono lette in SSML usando gli elementi fonema e sub. Per definire la modalità di lettura di più entità, creare un file di lessico personalizzato strutturato in XML. Caricare quindi il file XML del lessico personalizzato e farvi riferimento con l'elemento lexicon SSML.

Nota

Per un elenco delle impostazioni locali che supportano il lessico personalizzato, vedere le note a piè di pagina della tabella supporto delle lingue.

L'elemento lexicon non è supportato dall'API Audio lungo. Per la sintesi vocale in formato lungo, usare invece l'API di sintesi batch (anteprima).

La tabella seguente descrive l'uso degli attributi dell'elemento lexicon.

Attributo Descrizione Obbligatorio o facoltativo
uri URI del file XML del lessico personalizzato accessibile pubblicamente con l'estensione .xml o .pls. L'uso di Archiviazione BLOB di Azure è consigliato ma non obbligatorio. Per altre informazioni sul file del lessico personalizzato, vedere Specifica del lessico di pronuncia versione 1.0. Richiesto

Esempi di lessico personalizzato

I valori supportati per gli attributi dell'elemento lexicon sono stati descritti in precedenza.

Dopo aver pubblicato il lessico personalizzato, è possibile farvi riferimento da SSML. Nell'esempio SSML seguente viene fatto riferimento a un lessico personalizzato caricato in https://www.example.com/customlexicon.xml. Sono supportati gli URL lessico dall'archiviazione BLOB di Azure, dall'archiviazione AMS (Advanced Media Services) e da GitHub. Si noti tuttavia che altri URL pubblici potrebbero non essere compatibili.

<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">
        <lexicon uri="https://www.example.com/customlexicon.xml"/>
        BTW, we will be there probably at 8:00 tomorrow morning.
        Could you help leave a message to Robert Benigni for me?
    </voice>
</speak>

File lessico personalizzato

Per definire la modalità di lettura di più entità, è possibile definire tali entità in un file XML di lessico personalizzato con l'estensione .xml o .pls.

Nota

Il file lessico personalizzato è un documento XML valido, ma non può essere usato come documento SSML.

Ecco alcune limitazioni del file lessico personalizzato:

  • Dimensioni del file: le dimensioni del file lessico personalizzato hanno un limite massimo di 100 KB. Se le dimensioni del file superano il limite di 100 KB, la richiesta di sintesi non riesce. È possibile suddividere il lessico in più lessici e includerli in SSML se le dimensioni del file superano 100 KB.
  • Aggiornamento della cache lessico: il lessico personalizzato viene memorizzato nella cache con l'URI come chiave per la sintesi vocale al primo caricamento. Il lessico con lo stesso URI non verrà ricaricato entro 15 minuti, quindi la modifica del lessico personalizzato deve attendere al massimo 15 minuti.

Gli elementi e gli attributi supportati di un file XML lessico personalizzato sono descritti nella Specifica del lessico di pronuncia (PLS) versione 1.0. Ecco alcuni esempi di elementi e attributi supportati:

  • L'elemento lexicon contiene almeno un elemento lexeme. Lessico contiene l'attributo xml:lang necessario per indicare le impostazioni locali per cui deve essere applicato. Un lessico personalizzato per impostazione predefinita è limitato a un'impostazione locale, quindi se lo si applica per impostazioni locali diverse, non funzionerà. L'elemento lexicon ha anche un attributo alphabet per indicare l'alfabeto usato nel lessico. I valori possibili sono ipa e x-microsoft-sapi.
  • Ogni elemento lexeme contiene almeno un elemento grapheme e uno o più elementi grapheme, alias e phoneme. L'elemento lexeme fa distinzione tra maiuscole e minuscole nel lessico personalizzato. Ad esempio, se si specifica solo un fonema per lexeme "Hello", non funziona per lexeme “hello".
  • L'elemento grapheme contiene testo che descrive l'ortografia.
  • Gli elementi alias vengono usati per indicare la pronuncia di un acronimo o di un termine abbreviato.
  • L'elemento phoneme fornisce testo che descrive come viene pronunciato lexeme. Nell'alfabeto IPA il limite della sillaba è “.”. L'elemento phoneme non può contenere spazi vuoti quando si usa l'alfabeto IPA.
  • Quando gli elementi alias e phoneme vengono forniti con lo stesso elemento grapheme, alias ha priorità più alta.

Microsoft fornisce uno strumento di convalida del lessico personalizzato che consente di trovare errori (con messaggi di errore dettagliati) nel file del lessico personalizzato. È consigliabile usare lo strumento prima di usare il file XML del lessico personalizzato nell'ambiente di produzione con il servizio Voce.

Esempi di file lessico personalizzato

L'esempio XML seguente (non SSML) sarebbe contenuto in un file .xml lessico personalizzato. Quando si usa questo lessico personalizzato, "BTW" viene letto "By the way". "Benigni" viene letto con l'IPA fornito "bɛˈniːnji."

<?xml version="1.0" encoding="UTF-8"?>
<lexicon version="1.0"
      xmlns="http://www.w3.org/2005/01/pronunciation-lexicon"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://www.w3.org/2005/01/pronunciation-lexicon
        http://www.w3.org/TR/2007/CR-pronunciation-lexicon-20071212/pls.xsd"
      alphabet="ipa" xml:lang="en-US">
    <lexeme>
        <grapheme>BTW</grapheme>
        <alias>By the way</alias>
    </lexeme>
    <lexeme>
        <grapheme>Benigni</grapheme>
        <phoneme>bɛˈniːnji</phoneme>
    </lexeme>
    <lexeme>
        <grapheme>😀</grapheme>
        <alias>test emoji</alias>
    </lexeme>
</lexicon>

Non è possibile impostare direttamente la pronuncia di una frase usando il lessico personalizzato. Se è necessario impostare la pronuncia di un acronimo o di un termine abbreviato, specificare prima un alias, quindi associare il phoneme a tale alias. Ad esempio:

<?xml version="1.0" encoding="UTF-8"?>
<lexicon version="1.0"
      xmlns="http://www.w3.org/2005/01/pronunciation-lexicon"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://www.w3.org/2005/01/pronunciation-lexicon
        http://www.w3.org/TR/2007/CR-pronunciation-lexicon-20071212/pls.xsd"
      alphabet="ipa" xml:lang="en-US">
    <lexeme>
        <grapheme>Scotland MV</grapheme>
        <alias>ScotlandMV</alias>
    </lexeme>
    <lexeme>
        <grapheme>ScotlandMV</grapheme>
        <phoneme>ˈskɒtlənd.ˈmiːdiəm.weɪv</phoneme>
    </lexeme>
</lexicon>

È inoltre possibile specificare direttamente il alias previsto per l'acronimo o il termine abbreviato. Ad esempio:

  <lexeme>
    <grapheme>Scotland MV</grapheme>
    <alias>Scotland Media Wave</alias>
  </lexeme>

Gli esempi di file XML del lessico personalizzato precedenti usano l'alfabeto IPA, noto anche come set di foni IPA. È consigliabile usare l'IPA perché è lo standard internazionale. Per alcuni caratteri IPA, si tratta della versione "precomposta" e "scomposta" quando vengono rappresentati con Unicode. Il lessico personalizzato supporta solo lo Unicode scomposto.

Il servizio Voce definisce un set fonetico per queste impostazioni locali: en-US, fr-FR, de-DE, es-ES, ja-JP, zh-CN, zh-HK e zh-TW. Per altre informazioni sull'alfabeto fonetico del servizio Voce dettagliato, vedere i set fonetici del servizio Voce.

È possibile usare x-microsoft-sapi come valore dell'attributo alphabet con lessico personalizzato, come illustrato di seguito:

<?xml version="1.0" encoding="UTF-8"?>
<lexicon version="1.0"
      xmlns="http://www.w3.org/2005/01/pronunciation-lexicon"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://www.w3.org/2005/01/pronunciation-lexicon
        http://www.w3.org/TR/2007/CR-pronunciation-lexicon-20071212/pls.xsd"
      alphabet="x-microsoft-sapi" xml:lang="en-US">
  <lexeme>
    <grapheme>BTW</grapheme>
    <alias> By the way </alias>
  </lexeme>
  <lexeme>
    <grapheme> Benigni </grapheme>
    <phoneme> b eh 1 - n iy - n y iy </phoneme>
  </lexeme>
</lexicon>

elemento say-as

L'elemento say-as indica il tipo di contenuto, ad esempio numero o data, del testo dell'elemento. Questo elemento fornisce al motore di sintesi vocale indicazioni su come pronunciare il testo.

La tabella seguente descrive l'uso degli attributi dell'elemento say-as.

Attributo Descrizione Obbligatorio o facoltativo
interpret-as Indica il tipo di contenuto del testo di un elemento. Per un elenco dei tipi, vedere la tabella seguente. Richiesto
format Fornisce informazioni aggiuntive sulla formattazione precisa del testo dell'elemento per i tipi di contenuto che potrebbero avere formati ambigui. SSML definisce i formati per i tipi di contenuto che li usano. Vedi la tabella seguente. Facoltativo
detail Indica il livello di dettaglio da pronunciare. Ad esempio, questo attributo potrebbe richiedere che il motore di sintesi vocale pronunci segni di punteggiatura. Non sono definiti valori standard per detail. Facoltativo

Per gli attributi interpret-as e format sono supportati i tipi di contenuto seguenti. Nella tabella seguente, includere l'attributo format solo se la colonna format non è vuota.

Nota

I valori di characters e spell-out per l'attributo interpret-as sono supportati per tutte le impostazioni locali di sintesi vocale. Altri valori con attributo interpret-as sono supportati per tutte le impostazioni locali delle lingue seguenti: arabo, catalano, cinese, danese, olandese, inglese, francese, finlandese, tedesco, hindi, italiano, giapponese, coreano, norvegese, polacco, portoghese, russo, spagnolo e svedese.

interpret-as format Interpretazione
characters, spell-out Il testo viene pronunciato come singole lettere (scandito). Il motore di sintesi vocale pronuncia:

<say-as interpret-as="characters">test</say-as>

Come "T E S T".
cardinal, number None Il testo viene pronunciato come numero cardinale. Il motore di sintesi vocale pronuncia:

There are <say-as interpret-as="cardinal">10</say-as> options

Come "Ci sono dieci opzioni".
ordinal None Il testo viene pronunciato come numero ordinale. Il motore di sintesi vocale pronuncia:

Select the <say-as interpret-as="ordinal">3rd</say-as> option

Come "Selezionare la terza opzione".
number_digit None Il testo viene pronunciato come sequenza di singole cifre. Il motore di sintesi vocale pronuncia:

<say-as interpret-as="number_digit">123456789</say-as>

Come "1 2 3 4 5 6 7 8 9".
fraction None Il testo viene pronunciato come numero frazionario. Il motore di sintesi vocale pronuncia:

<say-as interpret-as="fraction">3/8</say-as> of an inch

Come "tre ottavi di pollice".
date gma, mga, amg, agm, am, ma, mg, gm, g, m, a Il testo viene pronunciato come data. L'attributo format specifica il formato della data (g=giorno, m=mese e a=anno). Il motore di sintesi vocale pronuncia:

Today is <say-as interpret-as="date">10-12-2016</say-as>

Come "Oggi è il dodici ottobre duemila sedici".
Pronuncia:

Today is <say-as interpret-as="date" format="dmy">10-12-2016</say-as>

Come "Oggi è dicembre duemilasedici".
time hms12, hms24 Il testo viene pronunciato come orario. L'attributo format specifica se l'orario viene specificata usando un orologio di 12 ore (hms12) o un orologio di 24 ore (hms24). Usare i due punti per separare i numeri che rappresentano ore, minuti e secondi. Ecco alcuni esempi di ora validi: 12:35, 1:14:32, 08:15 e 02:50:45. Il motore di sintesi vocale pronuncia:

The train departs at <say-as interpret-as="time" format="hms12">4:00am</say-as>

Come "Il treno parte alle quattro del mattino"
duration hms, hm, ms Il testo viene pronunciato come durata. L'attributo format specifica il formato della durata (h=ora, m=minuto e s=secondo). Il motore di sintesi vocale pronuncia:

<say-as interpret-as="duration">01:18:30</say-as>

Come "Un'ora diciotto minuti e trenta secondi".
Pronuncia:

<say-as interpret-as="duration" format="ms">01:18</say-as>

Come "Un minuto e diciotto secondi".
Questo tag è supportato solo in inglese e spagnolo.
telephone None Il testo viene pronunciato come numero di telefono. Il motore di sintesi vocale pronuncia:

The number is <say-as interpret-as="telephone">(888) 555-1212</say-as>

"Il mio numero è otto otto otto cinque cinque cinque uno due uno due".
currency None Il testo viene pronunciato come valuta. Il motore di sintesi vocale pronuncia:

<say-as interpret-as="currency">99.9 USD</say-as>

Come "Novantanove dollari e novanta centesimi".
address None Il testo viene pronunciato come indirizzo. Il motore di sintesi vocale pronuncia:

I'm at <say-as interpret-as="address">150th CT NE, Redmond, WA</say-as>

COme "Sono a Court Northeast numero 150 Redmond Washington".
name None Il testo viene pronunciato come nome di una persona. Il motore di sintesi vocale pronuncia:

<say-as interpret-as="name">ED</say-as>

Come [æd].
Nei nomi cinesi, alcuni caratteri si pronunciano in modo diverso quando appaiono in un nome di famiglia. Ad esempio, il motore di sintesi vocale dice 仇 in

<say-as interpret-as="name">仇先生</say-as>

Come [qiú] invece di [chóu].

esempi say-as

I valori supportati per gli attributi dell'elemento say-as sono stati descritti in precedenza.

Il motore di sintesi vocale pronuncia l'esempio seguente come "La prima richiesta era per una stanza il diciannove ottobre 2000 con arrivo anticipato alle dodici e trentacinque".

<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="en-US">
    <voice name="en-US-AvaMultilingualNeural">
        <p>
        Your <say-as interpret-as="ordinal"> 1st </say-as> request was for <say-as interpret-as="cardinal"> 1 </say-as> room
        on <say-as interpret-as="date" format="mdy"> 10/19/2010 </say-as>, with early arrival at <say-as interpret-as="time" format="hms12"> 12:35pm </say-as>.
        </p>
    </voice>
</speak>

elemento sub

Usare l'elemento sub per indicare che il valore di testo dell'attributo alias deve essere pronunciato al posto del testo racchiuso dell'elemento. In questo modo, SSML contiene sia una forma parlata che una scritta.

La tabella seguente descrive l'uso degli attributi dell'elemento sub.

Attributo Descrizione Obbligatorio o facoltativo
alias Valore di testo che deve essere pronunciato anziché il testo racchiuso dell'elemento. Richiesto

esempi sub

I valori supportati per gli attributi dell'elemento sub sono stati descritti in precedenza.

Il motore di sintesi vocale pronuncia l'esempio seguente come "World Wide Web Consortium".

<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="en-US">
    <voice name="en-US-AvaMultilingualNeural">
        <sub alias="World Wide Web Consortium">W3C</sub>
    </voice>
</speak>

Pronuncia con MathML

MathML (Mathematical Markup Language) è un linguaggio di markup conforme a XML che descrive il contenuto matematico e la struttura. Il servizio Voce può usare MathML come testo di input per pronunciare correttamente le notazioni matematiche nell'audio di output.

Nota

Gli elementi MathML (tag) sono attualmente supportati nelle impostazioni locali seguenti: de-DE, en-AU, en-GB, en-US, es-ES, es-MX, fr-CA, fr-FR, it-IT, ja-JP, ko-KR, pt-BRe zh-CN.

Tutti gli elementi delle specifiche MathML 2.0 e MathML 3.0 sono supportati, ad eccezione degli elementi MathML 3.0 Elementary Math.

Prendere nota di questi elementi e attributi MathML:

  • L'attributo xmlns in <math xmlns="http://www.w3.org/1998/Math/MathML"> è facoltativo.
  • Gli elementi semantics, annotation e annotation-xml non producono testo parlato, quindi vengono ignorati.
  • Se un elemento non viene riconosciuto, viene ignorato e gli elementi figlio al suo interno vengono comunque elaborati.

La sintassi XML non supporta le entità MathML, pertanto è necessario usare i caratteri Unicode corrispondenti per rappresentare le entità, ad esempio, l'entità &copy; deve essere rappresentata dai caratteri Unicode &#x00A9;, in caso contrario si verifica un errore.

Esempi di MathML

L'output di sintesi vocale di questo esempio è "a al quadrato più b al quadrato uguale a c al quadrato".

<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-JennyNeural'>
        <math xmlns='http://www.w3.org/1998/Math/MathML'>
            <msup>
                <mi>a</mi>
                <mn>2</mn>
            </msup>
            <mo>+</mo>
            <msup>
                <mi>b</mi>
                <mn>2</mn>
            </msup>
            <mo>=</mo>
            <msup>
                <mi>c</mi>
                <mn>2</mn>
            </msup>
        </math>
    </voice>
</speak>

Passaggi successivi