Pronuncia con SSML

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

Per informazioni dettagliate sull'uso degli elementi SSML per migliorare la pronuncia, vedere le sezioni seguenti. Per altre informazioni sulla sintassi SSML, vedere Struttura ed eventi del documento SSML.

elemento phoneme

L'elemento phoneme viene usato per la pronuncia fonetica nei documenti SSML. Fornire sempre il riconoscimento vocale leggibile come fallback.

Telefono alfabeti sono costituiti da telefoni, costituiti da lettere, numeri o caratteri, talvolta in combinazione. Ogni telefono descrive un suono univoco del parlato. L'alfabeto fonetico è in contrasto con l'alfabeto latino, dove qualsiasi lettera può rappresentare più suoni pronunciati. Considera le diverse en-US pronunce della lettera "c" nelle parole "candy" e "cessate" o le diverse pronunce della combinazione di lettere "th" nelle parole "thing" e "quelle".

Nota

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

L'utilizzo degli phoneme attributi dell'elemento è descritto nella tabella seguente.

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 gli alfabeti possibili che è possibile specificare:
L'alfabeto si applica solo all'oggetto phoneme nell'elemento .
Facoltativo
ph Stringa contenente telefoni che specificano la pronuncia della parola nell'elemento phoneme . Se la stringa specificata contiene telefoni non riconosciuti, il testo per il riconoscimento vocale rifiuta l'intero documento SSML e non produce nessuno dell'output vocale specificato nel documento.

Per ipa, per sottolineare una sillaba posizionando il simbolo di stress prima di questa sillaba, è necessario contrassegnare tutte le sillabe per la parola. Altrimenti, la sillaba prima che questo simbolo di stress sia sottolineato. Per sapi, se si desidera stressare una sillaba, è necessario posizionare il simbolo di stress dopo questa sillaba, indipendentemente dal fatto che tutte le sillabe della parola siano contrassegnate.
Richiesto

esempi di phoneme

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 stressare l'allable 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 società, un termine medico o un emoji) vengono lette in SSML usando il foneme e i sottoelementi. Per definire la modalità di lettura di più entità, creare un file lessico personalizzato strutturato XML. Caricare quindi il file XML lessico personalizzato e farvi riferimento con l'elemento SSML lexicon .

Nota

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

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

L'utilizzo degli lexicon attributi dell'elemento è descritto nella tabella seguente.

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 lessico personalizzato, vedere Lexicon Specification (PLS) Specification (PLS) Version 1.0 (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 url lessico da Archiviazione BLOB di Azure, Archiviazione advanced Servizi multimediali (AMS) e 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 definirle in un file XML 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 file: le dimensioni personalizzate del file lessico sono limitate a un 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 viene ricaricato entro 15 minuti, quindi la modifica del lessico personalizzato deve attendere al massimo 15 minuti per rendere effettiva la modifica del lessico personalizzato.

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

  • L'elemento lexicon contiene almeno un lexeme elemento. Lessico contiene l'attributo necessario xml:lang per indicare le impostazioni locali per cui deve essere applicato. Un lessico personalizzato è limitato a un'impostazione locale per impostazione predefinita, quindi se lo si applica per impostazioni locali diverse, non funziona. L'elemento lexicon ha anche un alphabet attributo per indicare l'alfabeto usato nel lessico. I valori possibili sono ipa e x-microsoft-sapi.
  • Ogni lexeme elemento contiene almeno un grapheme elemento e uno o più graphemeelementi , aliase 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 alias elementi vengono usati per indicare la pronuncia di un acronimo o di un termine abbreviato.
  • L'elemento phoneme fornisce testo che descrive come viene pronunciato l'oggetto lexeme . Il limite sillabe è '.' nell'alfabeto IPA. L'elemento phoneme non può contenere spazi vuoti quando si usa l'alfabeto IPA.
  • Quando gli alias elementi e phoneme vengono forniti con lo stesso grapheme elemento, alias ha priorità più alta.

Microsoft fornisce uno strumento di convalida per il lessico personalizzato che consente di trovare errori (con messaggi di errore dettagliati) nel file 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 personalizzati

L'esempio XML seguente (non SSML) sarebbe contenuto in un file lessico .xml personalizzato. Quando si usa questo lessico personalizzato, "BTW" viene letto come "A proposito". "Benigni" viene letto con l'IPA fornito "bɛː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 per un acronimo o un termine abbreviato, specificare prima un aliase quindi associare l'oggetto 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>

È anche possibile specificare direttamente il termine previsto alias per l'acronimo o 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 telefoni IPA. È consigliabile usare l'IPA perché è lo standard internazionale. Per alcuni caratteri IPA, sono la versione "precomposta" e "scomposta" quando vengono rappresentate con Unicode. Il lessico personalizzato supporta solo l'unicode scomposto.

Il servizio Voce definisce un set fonetico per queste impostazioni locali: en-US, fr-FR, de-DE, es-ESja-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 come x-microsoft-sapi valore per l'attributo alphabet con lessico personalizzati, 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 indicazioni al motore di sintesi vocale su come pronunciare il testo.

L'utilizzo degli say-as attributi dell'elemento è descritto nella tabella seguente.

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 pronuncia segni di punteggiatura. Non sono definiti valori standard per detail. Facoltativo

Per gli attributi e format sono supportati i interpret-as tipi di contenuto seguenti. Includere l'attributo format solo se format la colonna non è vuota in questa tabella.

Nota

I characters valori e spell-out per l'attributo interpret-as sono supportati per tutte le impostazioni locali di sintesi vocale. Altri interpret-as valori di attributo 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 (specificato). 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 frazionaria. Il motore di sintesi vocale pronuncia:

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

Come "tre ottavi di pollice".
date dmy, mdy, ymd, ydm, ym, my, md, dm, d, m, y Il testo viene pronunciato come data. L'attributo format specifica il formato della data (d=day, m=month e y=year). Il motore di sintesi vocale pronuncia:

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

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

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

Come "Oggi è dicembre diecimila sedici".
time hms12, hms24 Il testo viene pronunciato come ora. L'attributo format specifica se l'ora viene specificata usando un orologio di 12 ore (hms12) o un orologio di 24 ore (hms24). Usare 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 a quattro M."
duration hms, hm, ms Il testo viene pronunciato come durata. L'attributo format specifica il formato della durata (h=hour, m=minute e s=second). 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>

Come "Il mio numero è codice area otto otto otto cinque cinque cinque cinque 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 "nove-nove dollari statunitensi 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>

"Sono a 150th Court Northeast 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 parla l'esempio seguente come "La prima richiesta è stata per una stanza il diciannovesimo ottobre 2000 con arrivo anticipato a dodici trentacinque PM".

<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>

sottoelemento

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

L'utilizzo degli sub attributi dell'elemento è descritto nella tabella seguente.

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

esempi secondari

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

Il motore di sintesi vocale parla 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-AUen-GB, en-US, , es-ESes-MX, fr-CAfr-FRja-JPko-KRit-IT, 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 semanticselementi , annotatione annotation-xml non remettono il riconoscimento vocale, 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 relativi caratteri &#x00A9;Unicode, in caso contrario si verifica un errore.

Esempi di MathML

L'output di sintesi vocale per questo esempio è "un quadrato più b quadrato è uguale a c 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