SSML (Dialogflow)

Quando restituisci una risposta all'Assistente Google, puoi utilizzare un sottoinsieme del linguaggio SSML (Speech Synthesis Markup Language) nelle risposte. Utilizzando SSML, puoi fare in modo che le risposte della conversazione sembrino più simili al parlato. Di seguito è riportato un esempio di markup SSML e la relativa lettura dall'Assistente Google.

SSML
function saySSML(conv) {
  const ssml = '<speak>' +
    'Here are <say-as interpret-as="characters">SSML</say-as> samples. ' +
    'I can pause <break time="3" />. ' +
    'I can play a sound <audio src="https://www.example.com/MY_WAVE_FILE.wav">your wave file</audio>. ' +
    'I can speak in cardinals. Your position is <say-as interpret-as="cardinal">10</say-as> in line. ' +
    'Or I can speak in ordinals. You are <say-as interpret-as="ordinal">10</say-as> in line. ' +
    'Or I can even speak in digits. Your position in line is <say-as interpret-as="digits">10</say-as>. ' +
    'I can also substitute phrases, like the <sub alias="World Wide Web Consortium">W3C</sub>. ' +
    'Finally, I can speak a paragraph with two sentences. ' +
    '<p><s>This is sentence one.</s><s>This is sentence two.</s></p>' +
    '</speak>';
  conv.ask(ssml);
}
JSON
{
  "expectUserResponse": true,
  "expectedInputs": [
    {
      "possibleIntents": [
        {
          "intent": "actions.intent.TEXT"
        }
      ],
      "inputPrompt": {
        "richInitialPrompt": {
          "items": [
            {
              "simpleResponse": {
                "textToSpeech": "<speak>Here are <say-as interpret-as=\"characters\">SSML</say-as> samples. I can pause <break time=\"3\" />. I can play a sound <audio src=\"https://www.example.com/MY_WAVE_FILE.wav\">your wave file</audio>. I can speak in cardinals. Your position is <say-as interpret-as=\"cardinal\">10</say-as> in line. Or I can speak in ordinals. You are <say-as interpret-as=\"ordinal\">10</say-as> in line. Or I can even speak in digits. Your position in line is <say-as interpret-as=\"digits\">10</say-as>. I can also substitute phrases, like the <sub alias=\"World Wide Web Consortium\">W3C</sub>. Finally, I can speak a paragraph with two sentences. <p><s>This is sentence one.</s><s>This is sentence two.</s></p></speak>"
              }
            }
          ]
        }
      }
    }
  ]
}

Audio

SSML è supportato nel simulatore di azioni, ma non nel simulatore di Dialogflow.

URL in SSML

Quando definisci una risposta SSML che include solo un URL, la e commerciale in quell'URL può causare problemi dovuti alla formattazione XML. Per assicurarti che si faccia riferimento correttamente all'URL, sostituisci le istanze di & con &amp;.

Anche se la risposta SSML include solo un URL, Actions on Google richiede un testo visualizzato per la risposta. Poiché il testo all'interno del tag <audio> non verrà pronunciato dall'assistente, puoi inserire il testo del riempimento o una breve descrizione nel tag <audio> per soddisfare questo requisito. Il testo all'interno del tag <audio> non verrà volato dall'assistente dopo la riproduzione dell'audio e soddisfa il requisito di Azione su Google per una versione di testo display del tuo SSML.

Ecco un esempio di risposta SSML problematica:

<speak>
  <audio src="https://firebasestorage.googleapis.com/v0/b/project-name.appspot.com/o/audio-file-name.ogg?alt=media&token=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX">
  </audio>
</speak>

L'esempio sopra non esegue l'escape di & per una corretta formattazione XML.

Una versione corretta della stessa risposta SSML ha il seguente aspetto:

<speak>
  <audio src="https://firebasestorage.googleapis.com/v0/b/project-name.appspot.com/o/audio-file-name.ogg?alt=media&amp;token=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX">
  text
  </audio>
</speak>

Supporto per gli elementi SSML

Le seguenti sezioni descrivono gli elementi e le opzioni SSML che possono essere utilizzati nelle azioni.

<speak>

L'elemento principale della risposta SSML.

Per scoprire di più sull'elemento speak, consulta la specifica W3.

Esempio

<speak>
  my SSML content
</speak>

<break>

Un elemento vuoto che controlla la messa in pausa o altri confini prosodici tra le parole. L'utilizzo di <break> tra una coppia qualsiasi di token è facoltativo. Se questo elemento non è presente tra le parole, l'interruzione viene determinata automaticamente in base al contesto linguistico.

Per scoprire di più sull'elemento break, consulta la specifica W3.

Attributi

Attributo Descrizione
time

Imposta la durata dell'interruzione in secondi o millisecondi (ad es. "3s" o "250ms").

strength

Imposta l'intensità della rottura prosodica dell'output in base ai termini relativi. I valori validi sono: "x-weak", weak", "medium", "strong" e "x-strong". Il valore "nessuno" indica che non deve essere restituito alcun limite di interruzione prosodica, che può essere utilizzato per evitare una interruzione prosodica che altrimenti produrrebbe il processore. Gli altri valori indicano un'intensità di rottura monotonica in diminuzione (concettualmente crescente) tra i token. I confini più forti sono solitamente accompagnati da pause.

Esempio

L'esempio seguente mostra come utilizzare l'elemento <break> per mettere in pausa un passaggio tra un passaggio e l'altro:

<speak>
  Step 1, take a deep breath. <break time="200ms"/>
  Step 2, exhale.
  Step 3, take a deep breath again. <break strength="weak"/>
  Step 4, exhale.
</speak>

<say‑as>

Questo elemento consente di indicare informazioni sul tipo di costrutto del testo contenuto all'interno dell'elemento. Consente inoltre di specificare il livello di dettaglio per il rendering del testo contenuto.

L'elemento <say‑as> ha l'attributo obbligatorio, interpret-as, che determina il modo in cui viene letto il valore. È possibile utilizzare gli attributi facoltativi format e detail a seconda del valore interpret-as specifico.

Esempi

L'attributo interpret-as supporta i seguenti valori:

  • currency

    Il seguente esempio è parlato come "quarantadue dollari e un centesimo". Se l'attributo della lingua viene omesso, verranno utilizzate le impostazioni internazionali correnti.

    <speak>
      <say-as interpret-as='currency' language='en-US'>$42.01</say-as>
    </speak>
        
  • telephone

    Consulta la descrizione interpret-as='telephone' nella nota WG di W3C SSML 1.0 say-as attribute values.

    L'esempio seguente viene pronunciato come "uno otto zero zero due zero due uno due uno due". Se l'attributo "google:style" viene omesso, la lettera O indica zero.

    L'attributo "google:style='zero-as-zero'" al momento funziona solo per le lingue in inglese.

          <speak>
            <say-as interpret-as='telephone' google:style='zero-as-zero'>1800-202-1212</say-as>
          </speak>
        
  • verbatim o spell-out

    L'esempio seguente viene scritto lettera per lettera:

    <speak>
      <say-as interpret-as="verbatim">abcdefg</say-as>
    </speak>
        
  • date

    L'attributo format è una sequenza di codici di caratteri dei campi data. I codici di caratteri dei campi supportati in format sono {y, m, d} rispettivamente per anno, mese e giorno (del mese). Se il codice del campo viene visualizzato una volta per l'anno, il mese o il giorno, il numero di cifre previste sarà rispettivamente 4, 2 e 2. Se il codice di campo viene ripetuto, il numero di cifre previste corrisponde al numero di volte in cui il codice viene ripetuto. I campi nel testo della data possono essere separati da punteggiatura e/o spazi.

    L'attributo detail controlla la forma pronunciata della data. Per detail='1' sono obbligatori solo i campi del giorno e uno del mese o dell'anno, anche se possono essere forniti entrambi. Si tratta dell'impostazione predefinita quando vengono specificati meno di tutti e tre i campi. La forma parlata è "Il {giorno ordinale} di {mese}, {anno}".

    L'esempio seguente è parlato come "Il decimo settembre, diciannove sessanta":

    <speak>
      <say-as interpret-as="date" format="yyyymmdd" detail="1">
        1960-09-10
      </say-as>
    </speak>
        

    L'esempio seguente è parlato come "Il decimo settembre":

    <speak>
      <say-as interpret-as="date" format="dm">10-9</say-as>
    </speak>
        

    Per detail='2' i campi relativi a giorno, mese e anno sono obbligatori e questa è l'impostazione predefinita se vengono compilati tutti e tre i campi. La forma vocale è "{month} {ordinal day}, {year}".

    Il seguente esempio è parlato come "19 settembre 1960":

    <speak>
      <say-as interpret-as="date" format="dmy" detail="2">
        10-9-1960
      </say-as>
    </speak>
        
  • characters

    L'esempio seguente viene pronunciato come "C A N":

    <speak>
      <say-as interpret-as="characters">can</say-as>
    </speak>
        
  • cardinal

    L'esempio seguente viene pronunciato come "Dodicimilatrecentoquarantacinque" (per l'inglese americano) o "Dodicimilatrecentoquarantacinque (per l'inglese britannico)":

    <speak>
      <say-as interpret-as="cardinal">12345</say-as>
    </speak>
        
  • ordinal

    Il seguente esempio è parlato come "First":

    <speak>
      <say-as interpret-as="ordinal">1</say-as>
    </speak>
        
  • fraction

    Il seguente esempio è parlato come "cinque e mezzo":

    <speak>
      <say-as interpret-as="fraction">5+1/2</say-as>
    </speak>
        
  • expletive o bleep

    Nell'esempio seguente viene emesso un segnale acustico, come se fosse censurato:

    <speak>
      <say-as interpret-as="expletive">censor this</say-as>
    </speak>
        
  • unit

    Converte le unità al singolare o al plurale in base al numero. L'esempio seguente viene pronunciato come "10 piedi":

    <speak>
      <say-as interpret-as="unit">10 foot</say-as>
    </speak>
        
  • time

    Il seguente esempio viene pronunciato come "Due e mezza".

    <speak>
      <say-as interpret-as="time" format="hms12">2:30pm</say-as>
    </speak>
        

    L'attributo format è una sequenza di codici di caratteri dei campi temporali. I codici di caratteri dei campi supportati in format sono rispettivamente {h,m, s, Z, 12, 24} per ora, minuti (dell'ora), secondi (del minuto), fuso orario, formato 12 ore e formato 24 ore. Se il codice di campo viene visualizzato una volta per ora, minuti o secondi, il numero di cifre previste sarà 1, 2 e 2 rispettivamente. Se il codice di campo viene ripetuto, il numero di cifre previste corrisponde al numero di volte in cui il codice viene ripetuto. I campi nel testo dell'ora possono essere separati da punteggiatura e/o spazi. Se ora, minuti o secondi non sono specificati nel formato o se non esistono cifre corrispondenti, il campo viene considerato come un valore pari a zero. Il valore predefinito di format è "hms12".

    L'attributo detail controlla se la forma pronunciata dell'ora è nel formato 12 ore o su 24 ore. La forma vocale è nel formato 24 ore se detail='1' o detail viene omesso e il formato dell'ora è nel formato 24 ore. La forma vocale è nel formato 12 ore se detail='2' o detail viene omesso e il formato dell'ora è nel formato 12 ore.

Per scoprire di più sull'elemento say-as, consulta la specifica W3.

<audio>

Supporta l'inserimento di file audio registrati e l'inserimento di altri formati audio in combinazione con l'output vocale sintetizzato.

Attributi

Attributo Obbligatorie Predefinito Valori
src n/d Un URI che fa riferimento alla sorgente del supporto audio. Il protocollo supportato è https.
clipBegin no 0 Un valore TimeDesignation che rappresenta l'offset dall'inizio della riproduzione della sorgente audio. Se questo valore è maggiore o uguale alla durata effettiva della sorgente audio, non viene inserito alcun audio.
clipEnd no infinito Un valore TimeDesignation che rappresenta l'offset dall'inizio alla fine della riproduzione della sorgente audio. Se la durata effettiva della sorgente audio è inferiore a questo valore, la riproduzione termina in quel momento. Se clipBegin è maggiore o uguale a clipEnd, non viene inserito alcun audio.
speed no 100% La velocità di riproduzione in uscita del rapporto rispetto alla velocità di input normale espressa in percentuale. Il formato è un numero reale positivo seguito da %. L'intervallo attualmente supportato è [50% (lenta - metà velocità), 200% (veloce - doppia velocità)]. I valori al di fuori di questo intervallo possono (o meno) essere modificati per rientrare nell'intervallo.
repeatCount no 1 o 10 se repeatDur è impostato Un numero reale che specifica quante volte inserire l'audio (dopo il ritaglio, se presente, da clipBegin e/o clipEnd). Le ripetizioni frazionarie non sono supportate, quindi il valore verrà arrotondato al numero intero più vicino. Zero non è un valore valido e viene pertanto considerato non specificato e, in questo caso, ha il valore predefinito.
repeatDur no infinito Un valore TimeDesignation che limita la durata dell'audio inserito dopo l'elaborazione della sorgente per gli attributi clipBegin, clipEnd, repeatCount e speed (anziché la normale durata di riproduzione). Se la durata dell'audio elaborato è inferiore a questo valore, la riproduzione termina in quel momento.
soundLevel no +0dB Regola il livello audio dell'audio di soundLeveldecibel. L'intervallo massimo è +/-40 dB, ma l'intervallo effettivo potrebbe essere effettivamente inferiore e la qualità dell'output potrebbe non produrre buoni risultati sull'intero intervallo.

Di seguito sono riportate le impostazioni attualmente supportate per l'audio:

  • Formato: MP3 (MPEG v2)
    • 24.000 campioni al secondo
    • 24.000 ~ 96.000 bit al secondo, velocità fissa
  • Formato: Opus in Ogg
    • 24.000 campioni al secondo (banda super larga)
    • 24.000 - 96.000 bit al secondo, frequenza fissa
  • Formato (deprecato): WAV (RIFF)
    • PCM a 16 bit firmato, small endian
    • 24.000 campioni al secondo
  • Per tutti i formati:
    • È preferibile un canale singolo, ma lo stereo è accettabile.
    • Durata massima di 240 secondi. Se vuoi riprodurre audio con una durata più lunga, valuta l'implementazione di una risposta multimediale.
    • Limite di dimensione del file di 5 megabyte.
    • L'URL di origine deve utilizzare il protocollo HTTPS.
    • Il nostro user agent per il recupero dell'audio è "Google-Speech-Actions".

I contenuti dell'elemento <audio> sono facoltativi e vengono utilizzati se il file audio non può essere riprodotto o se il dispositivo di output non supporta l'audio. I contenuti possono includere un elemento <desc>, in cui i contenuti testuali di quell'elemento vengono utilizzati per la visualizzazione. Per ulteriori informazioni, consulta la sezione Audio registrato nell'elenco di controllo delle risposte.

L'URL src deve anche essere un URL https (Google Cloud Storage può ospitare i file audio su un URL https).

Per ulteriori informazioni sulle risposte multimediali, consulta la sezione relativa alle risposte multimediali nella guida relativa alle risposte.

Per scoprire di più sull'elemento audio, consulta la specifica W3.

Esempio

<speak>
  <audio src="cat_purr_close.ogg">
    <desc>a cat purring</desc>
    PURR (sound didn't load)
  </audio>
</speak>

<p>,<s>

Elementi di frase e paragrafo.

Per scoprire di più sugli elementi p e s, consulta la specifica di W3.

Esempio

<p><s>This is sentence one.</s><s>This is sentence two.</s></p>

best practice

  • Utilizza i tag <s>...</s> per aggregare frasi complete, soprattutto se contengono elementi SSML che cambiano prosodia (ossia <audio>, <break>, <emphasis>, <par>, <prosody>, <say-as>, <seq> e <sub>).
  • Se un'interruzione del discorso è pensata per durare abbastanza a lungo da riuscire a sentirla, usa i tag <s>...</s> e inserisci questa interruzione tra una frase e l'altra.

<sub>

Indica che il testo nel valore dell'attributo alias sostituisce il testo contenuto per la pronuncia.

Puoi anche utilizzare l'elemento sub per fornire una pronuncia semplificata di una parola di difficile lettura. L'ultimo esempio riportato di seguito mostra questo caso d'uso in giapponese.

Per scoprire di più sull'elemento sub, consulta la specifica W3.

Esempi

<sub alias="World Wide Web Consortium">W3C</sub>
<sub alias="にっぽんばし">日本橋</sub>

<mark>

Un elemento vuoto che inserisce un indicatore nella sequenza di testo o tag. Può essere utilizzato per fare riferimento a una posizione specifica nella sequenza o per inserire un indicatore in un flusso di output per una notifica asincrona.

Per scoprire di più sull'elemento mark, consulta la specifica W3.

Esempio

<speak>
Go from <mark name="here"/> here, to <mark name="there"/> there!
</speak>

<prosody>

Consente di personalizzare tono, velocità del parlato e volume del testo contenuto nell'elemento. Attualmente sono supportati gli attributi rate, pitch e volume.

Gli attributi rate e volume possono essere impostati in base alle specifiche di W3. Esistono tre opzioni per impostare il valore dell'attributo pitch:

Attributo Descrizione
name

L'ID stringa per ogni contrassegno.

Opzione Descrizione
Parente Specifica un valore relativo (ad es. "low", "medium", "high" e così via) dove "medium" è la tonalità predefinita.
Semitoni Aumenta o diminuisci il tono di "N" semitoni utilizzando rispettivamente "+Nst" o "-Nst". Tieni presente che i simboli "+/-" e "st" sono obbligatori.
Percentuale Aumenta o diminuisci il tono di una percentuale di "N" utilizzando rispettivamente "+N%" o "-N%". Tieni presente che "%" è obbligatorio, mentre "+/-" è facoltativo.

Per scoprire di più sull'elemento prosody, consulta la specifica W3.

Esempio

L'esempio seguente utilizza l'elemento <prosody> per parlare lentamente a 2 semitoni inferiori al normale:

<prosody rate="slow" pitch="-2st">Can you hear me now?</prosody>

<emphasis>

Utilizzato per aggiungere o rimuovere enfasi dal testo contenuto dall'elemento. L'elemento <emphasis> modifica il parlato in modo simile a <prosody>, ma senza la necessità di impostare singoli attributi vocali.

Questo elemento supporta un attributo "level" facoltativo con i seguenti valori validi:

  • strong
  • moderate
  • none
  • reduced

Per scoprire di più sull'elemento emphasis, consulta la specifica W3.

Esempio

L'esempio seguente utilizza l'elemento <emphasis> per creare un annuncio:

<emphasis level="moderate">This is an important announcement</emphasis>

<par>

Un contenitore multimediale parallelo che consente di riprodurre più elementi multimediali contemporaneamente. Gli unici contenuti consentiti sono un insieme di uno o più elementi <par>, <seq> e <media>. L'ordine degli elementi <media> non è significativo.

A meno che un elemento secondario non specifichi un'ora di inizio diversa, l'ora di inizio implicita per l'elemento è la stessa del contenitore <par>. Se un elemento secondario ha un valore di offset impostato per il relativo attributo begin o end, l'offset dell'elemento sarà relativo all'ora di inizio del contenitore <par>. Per l'elemento <par> principale, l'attributo begin viene ignorato e l'ora di inizio corrisponde al momento in cui il processo di sintesi vocale SSML inizia a generare output per l'elemento <par> principale (ovvero, riporta "zero").

Esempio

<speak>
  <par>
    <media xml:id="question" begin="0.5s">
      <speak>Who invented the Internet?</speak>
    </media>
    <media xml:id="answer" begin="question.end+2.0s">
      <speak>The Internet was invented by cats.</speak>
    </media>
    <media begin="answer.end-0.2s" soundLevel="-6dB">
      <audio
        src="https://actions.google.com/.../cartoon_boing.ogg"/>
    </media>
    <media repeatCount="3" soundLevel="+2.28dB"
      fadeInDur="2s" fadeOutDur="0.2s">
      <audio
        src="https://actions.google.com/.../cat_purr_close.ogg"/>
    </media>
  </par>
</speak>

<seq>

Un contenitore multimediale sequenziale che consente di riprodurre elementi multimediali uno dopo l'altro. Gli unici contenuti consentiti sono un insieme di uno o più elementi <seq>, <par> e <media>. L'ordine degli elementi multimediali è l'ordine in cui vengono visualizzati.

Gli attributi begin e end degli elementi secondari possono essere impostati su valori di offset (consulta la sezione Specifica temporale di seguito). I valori di offset degli elementi secondari saranno relativi alla fine dell'elemento precedente nella sequenza o, nel caso del primo elemento della sequenza, rispetto all'inizio del relativo contenitore <seq>.

Esempio

<speak>
  <seq>
    <media begin="0.5s">
      <speak>Who invented the Internet?</speak>
    </media>
    <media begin="2.0s">
      <speak>The Internet was invented by cats.</speak>
    </media>
    <media soundLevel="-6dB">
      <audio
        src="https://actions.google.com/.../cartoon_boing.ogg"/>
    </media>
    <media repeatCount="3" soundLevel="+2.28dB"
      fadeInDur="2s" fadeOutDur="0.2s">
      <audio
        src="https://actions.google.com/.../cat_purr_close.ogg"/>
    </media>
  </seq>
</speak>

<media>

Rappresenta un livello multimediale all'interno di un elemento <par> o <seq>. Il contenuto consentito di un elemento <media> è un elemento <speak> o <audio> SSML. La tabella seguente descrive gli attributi validi per un elemento <media>.

Attributi

Attributo Obbligatorie Predefinito Valori
xml:id no nessun valore Un identificatore XML univoco per questo elemento. Le entità codificate non sono supportate. I valori degli identificatori consentiti corrispondono all'espressione regolare "([-_#]|\p{L}|\p{D})+". Per ulteriori informazioni, consulta XML-ID.
inizio no 0 L'ora di inizio del contenitore multimediale. Ignorato se si tratta dell'elemento contenitore multimediale principale (trattato come il valore predefinito "0"). Per i valori stringa validi, consulta la sezione Specifica dell'ora di seguito.
fine no nessun valore Una specifica per l'ora di fine del contenitore multimediale. Per i valori stringa validi, consulta la sezione Specifica dell'ora di seguito.
repeatCount no 1 Un numero reale che specifica il numero di volte in cui inserire i contenuti multimediali. Le frazioni di ripetizione non sono supportate, quindi il valore verrà arrotondato al numero intero più vicino. Zero non è un valore valido e viene pertanto considerato non specificato e, in questo caso, ha il valore predefinito.
repeatDur no nessun valore Un valore TimeDesignation che rappresenta un limite alla durata del supporto inserito. Se la durata dell'elemento multimediale è inferiore a questo valore, la riproduzione termina in quel momento.
soundLevel no +0dB Regola il livello audio dell'audio di soundLevel decibel. L'intervallo massimo è +/-40 dB, ma l'intervallo effettivo potrebbe essere effettivamente inferiore e la qualità dell'output potrebbe non produrre buoni risultati sull'intero intervallo.
fadeInDur no 0 sec Una TimeDesignation in cui la dissolvenza in entrata dell'elemento multimediale passa dalla modalità silenziosa al soundLevel specificato facoltativamente. Se la durata dei contenuti multimediali è inferiore a questo valore, la dissolvenza in entrata verrà interrotta al termine della riproduzione e il livello audio non raggiungerà il livello audio specificato.
fadeOutDur no 0 sec Un valore TimeDesignation durante il quale l'elemento multimediale verrà dissolvenza in uscita rispetto al valore soundLevel specificato facoltativamente fino a quando non diventa silenziosa. Se la durata dei contenuti multimediali è inferiore a questo valore, il livello audio viene impostato su un valore più basso per garantire che il silenzio venga raggiunto alla fine della riproduzione.

Specifica dell'ora

Una specifica temporale, utilizzata per il valore degli attributi "begin" e "end" degli elementi <media> e dei contenitori multimediali (elementi <par> e <seq>), può essere un valore di offset (ad esempio +2.5s) o un valore syncbase (ad esempio foo_id.end-250ms).

  • Valore di offset: il valore di offset temporale è un valore SMIL Timecount che consente valori corrispondenti all'espressione regolare: "\s\*(+|-)?\s\*(\d+)(\.\d+)?(h|min|s|ms)?\s\*"

    La stringa della prima cifra è la parte intera del numero decimale, mentre la seconda stringa è la parte decimale frazionaria. Il segno predefinito (ad esempio "(+|-)?") è "+". I valori dell'unità corrispondono rispettivamente a ore, minuti, secondi e millisecondi. Il valore predefinito delle unità è "s" (secondi).

  • Valore Syncbase: un valore syncbase è un valore syncbase SMIL che consente valori corrispondenti all'espressione regolare: "([-_#]|\p{L}|\p{D})+\.(begin|end)\s\*(+|-)\s\*(\d+)(\.\d+)?(h|min|s|ms)?\s\*"

    Le cifre e le unità vengono interpretate come un valore di offset.

Simulatore di sintesi vocale

La console di Actions include un simulatore di TTS che puoi utilizzare per testare SSML con uno qualsiasi degli elementi precedenti. Il simulatore TTS si trova nella console in Simulatore > Audio. Digita il testo e il codice SSML nel simulatore e fai clic su Aggiorna e ascolta per ascoltare l'output della sintesi vocale.

Puoi anche fare clic sul pulsante di download per salvare un file .mp3 dell'output di sintesi vocale.