Puoi inviare Speech Synthesis Markup Language (SSML) nella tua richiesta a Text-to-Speech per consentire una maggiore personalizzazione della risposta audio fornendo dettagli su pause e formattazione audio per acronimi, date, orari, abbreviazioni o testo che deve essere censurato. Per ulteriori informazioni ed esempi di codice, consulta il tutorial su SSML di Text-to-Speech.
Di seguito è riportato un esempio di markup SSML e di come Text-to-Speech sintetizza il testo:
<speak> Here are <say-as interpret-as="characters">SSML</say-as> samples. I can pause <break time="3s"/>. I can play a sound <audio src="https://www.example.com/MY_MP3_FILE.mp3">didn't get your MP3 audio file</audio>. I can speak in cardinals. Your number is <say-as interpret-as="cardinal">10</say-as>. 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. The digits for ten are <say-as interpret-as="characters">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>
Ecco il testo sintetizzato per il documento SSML di esempio:
Here are S S M L samples. I can pause [3 second pause]. I can play a sound [audio file plays]. I can speak in cardinals. Your number is ten. Or I can speak in ordinals. You are tenth in line. Or I can even speak in digits. The digits for ten are one oh. I can also substitute phrases, like the World Wide Web Consortium. Finally, I can speak a paragraph with two sentences. This is sentence one. This is sentence two.
Text-to-Speech supporta un sottoinsieme dei tag SSML disponibili, descritti in questo argomento.
Per saperne di più su come creare dati audio dall'input SSML con Text-to-Speech, consulta Creazione di file audio vocali.
Provalo
Se non conosci Google Cloud, crea un account per valutare le prestazioni di Text-to-Speech in scenari reali. I nuovi clienti ricevono anche 300 $ di crediti gratuiti per l'esecuzione, il test e il deployment dei workload.
Prova Text-to-Speech gratisSuggerimenti per l'utilizzo di SSML
A seconda dell'implementazione, potresti dover eseguire l'escape di virgolette o apici nel payload SSML che invii a Text-to-Speech. L'esempio seguente mostra come formattare l'input SSML incluso in un oggetto JSON.
"{ 'input':{ 'ssml':'<speak>The <say-as interpret-as=\"characters\">SSML</say-as> standard <break time=\"1s\"/>is defined by the <sub alias=\"World Wide Web Consortium\">W3C</sub>.</speak>' }, 'voice':{ 'languageCode':'en-us', 'name':'en-US-Standard-B', 'ssmlGender':'MALE' }, 'audioConfig':{ 'audioEncoding':'MP3' } }"
Caratteri riservati
Evita di utilizzare caratteri riservati SSML nel testo da convertire in audio. Quando devi utilizzare un carattere riservato SSML, impedisci che venga letto come codice utilizzando il relativo codice di escape. La tabella seguente mostra i caratteri SSML riservati e i relativi codici di escape.
| Carattere | Codice di escape |
|---|---|
| " | " |
| & | & |
| " | ' |
| < | < |
| > | > |
Seleziona una voce
Puoi impostare la voce nell'oggetto VoiceSelectionParams. Consulta il tutorial SSML di Text-to-Speech per vedere un esempio di codice che dimostra l'utilizzo dell'oggetto VoiceSelectionParams.
Puoi utilizzare il tag <voice> per leggere SSML in più voci, ma devi impostare il nome VoiceSelectionParams su una voce compatibile:
| Tipo di voce richiesto | Tipo di voce supportato nel tag <voice> | ||||
|---|---|---|---|---|---|
| Neural2 | Studio | Wavenet | News | Standard | |
| Neural2 | ✔ | ✔ | ✔ | ||
| Studio | ✔ | ✔ | ✔ | ||
| Wavenet | ✔ | ✔ | ✔ | ||
| Standard | ✔ | ✔ | ✔ | ||
| News | ✔ | ✔ | ✔ | ||
Supporto degli elementi SSML
Le sezioni seguenti descrivono gli elementi e le opzioni SSML che possono essere utilizzati nelle tue azioni.
<speak>
L'elemento principale della risposta SSML.
Per saperne di più sull'elemento speak, consulta la specifica W3.
Esempio
<speak> my SSML content </speak>
<break>
Un elemento vuoto che controlla le pause o altri confini prosodici tra le parole. L'utilizzo di <break> tra due token qualsiasi è facoltativo. Se questo elemento non è presente tra le parole, l'interruzione viene determinata automaticamente in base al contesto linguistico.
Per saperne 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 la forza dell'interruzione prosodica dell'output in termini relativi. I valori validi sono: "x-weak", weak", "medium", "strong" e "x-strong". Il valore "none" indica che non deve essere generato alcun confine di interruzione prosodica; può essere utilizzato per impedire un'interruzione prosodica che verrebbe altrimenti prodotta dal processore. Gli altri valori indicano una forza di interruzione monotonicamente non decrescente (concettualmente crescente) tra i token. I confini con forza maggiore sono in genere accompagnati da pause. |
Esempio
L'esempio seguente mostra come utilizzare l'elemento <break> per introdurre una pausa tra i vari passaggi:
<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 di testo contenuto al suo interno. Aiuta anche a specificare il livello di dettaglio per il rendering del testo contenuto.
L'elemento <say‑as> ha l'attributo obbligatorio interpret-as, che determina come viene pronunciato il valore. Gli attributi facoltativi format e detail possono essere utilizzati a seconda del valore specifico di interpret-as.
Esempi
L'attributo interpret-as supporta i valori seguenti:
-
currencyL'esempio seguente viene letto come "forty two dollars and one cent". Se l'attributo della lingua viene omesso, vengono utilizzate le impostazioni internazionali correnti.
<speak> <say-as interpret-as='currency' language='en-US'>$42.01</say-as> </speak> -
telephoneConsulta la descrizione di
interpret-as='telephone'nella nota del gruppo di lavoro W3C SSML 1.0 sui valori dell'attributo say-as.L'esempio seguente viene letto come "one eight zero zero two zero two one two one two". Se l'attributo "google:style" viene omesso, lo zero viene pronunciato come la lettera O.
L'attributo "google:style='zero-as-zero'" al momento funziona solo nelle varianti della lingua inglese.
<speak> <say-as interpret-as='telephone' google:style='zero-as-zero'>1800-202-1212</say-as> </speak> -
verbatimospell-outL'esempio seguente viene letto lettera per lettera:
<speak> <say-as interpret-as="verbatim">abcdefg</say-as> </speak> -
dateL'attributo
formatè una sequenza di codici carattere per il campo della data. I codici carattere dei campi supportati informatsono {y,m,d}, rispettivamente per anno, mese e giorno (del mese). Se il codice del campo appare una volta per l'anno, il mese o il giorno, il numero di cifre previsto è rispettivamente 4, 2 e 2. Se il codice del campo viene ripetuto, il numero di cifre previsto è il 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
detailcontrolla la forma in cui viene pronunciata la data. Perdetail='1'sono obbligatori solo i campi del giorno e uno dei campi del mese o dell'anno, anche se è possibile fornirli entrambi. Questo è il valore predefinito quando vengono forniti meno di tre campi. La forma pronunciata è "The {ordinal day} of {month}, {year}".L'esempio seguente viene letto come "The tenth of September, nineteen sixty":
<speak> <say-as interpret-as="date" format="yyyymmdd" detail="1"> 1960-09-10 </say-as> </speak>L'esempio seguente viene letto come "The tenth of September":
<speak> <say-as interpret-as="date" format="dm">10-9</say-as> </speak>Per
detail='2'i campi del giorno, del mese e dell'anno sono obbligatori per impostazione predefinita quando vengono forniti tutti e tre i campi. La forma pronunciata è "{month} {ordinal day}, {year}".L'esempio seguente viene letto come "September tenth, nineteen sixty":
<speak> <say-as interpret-as="date" format="dmy" detail="2"> 10-9-1960 </say-as> </speak> -
charactersL'esempio seguente viene letto come "C A N":
<speak> <say-as interpret-as="characters">can</say-as> </speak> -
cardinalL'esempio seguente viene letto come "Twelve thousand three hundred forty five" (in inglese americano) o "Twelve thousand three hundred and forty five" (in inglese britannico):
<speak> <say-as interpret-as="cardinal">12345</say-as> </speak> -
ordinalL'esempio seguente viene letto come "First":
<speak> <say-as interpret-as="ordinal">1</say-as> </speak> -
fractionL'esempio seguente viene letto come "five and a half":
<speak> <say-as interpret-as="fraction">5+1/2</say-as> </speak> -
expletiveobleepL'esempio seguente viene riprodotto come un segnale acustico, come se fosse stato censurato:
<speak> <say-as interpret-as="expletive">censor this</say-as> </speak> -
unitConverte le unità al singolare o al plurale a seconda del numero. L'esempio seguente viene letto come "10 feet":
<speak> <say-as interpret-as="unit">10 foot</say-as> </speak> -
timeL'esempio seguente viene letto come "Two thirty P.M.":
<speak> <say-as interpret-as="time" format="hms12">2:30pm</say-as> </speak>L'attributo
formatè una sequenza di codici carattere per il campo dell'ora. I codici carattere dei campi supportati informatsono {h,m,s,Z,12,24}, rispettivamente per ora, minuto (dell'ora), secondo (del minuto), fuso orario, ora nel formato 12 ore e ora nel formato 24 ore. Se il codice del campo appare una volta per l'ora, i minuti o i secondi, il numero di cifre previsto è rispettivamente 1, 2 e 2. Se il codice del campo viene ripetuto, il numero di cifre previsto è il numero di volte in cui il codice viene ripetuto. I campi nel testo dell'ora possono essere separati da punteggiatura e/o spazi. Se l'ora, i minuti o i secondi non sono specificati nel formato o se non sono presenti cifre corrispondenti, il campo viene considerato come valore zero. Il valore predefinito diformatè "hms12".L'attributo
detailcontrolla se l'ora viene pronunciata nel formato 12 ore o 24 ore. La forma pronunciata è nel formato 24 ore sedetail='1'odetailvengono omessi e il formato dell'ora è 24 ore. La forma pronunciata è nel formato 12 ore sedetail='2'odetailvengono omessi e il formato dell'ora è 12 ore.
Per saperne di più sull'elemento say-as, consulta la specifica W3.
<audio>
Supporta l'inserimento di file audio registrati e di altri formati audio in combinazione con l'output vocale sintetizzato.
Attributi
| Attributo | Obbligatorio | Predefinito | Valori |
|---|---|---|---|
src |
sì | n/a | Un URI che fa riferimento alla sorgente multimediale audio. Il protocollo supportato è https. |
clipBegin |
no | 0 | Una TimeDesignation che rappresenta l'offset dall'inizio della sorgente audio da cui cominciare la riproduzione. Se questo valore è maggiore o uguale alla durata effettiva della sorgente audio, non viene inserito alcun audio. |
clipEnd |
no | infinito | Una TimeDesignation che rappresenta l'offset dall'inizio della sorgente audio in corrispondenza di cui terminare la riproduzione. Se la durata effettiva della sorgente audio è inferiore a questo valore, la riproduzione termina in corrispondenza di quel punto. Se clipBegin è maggiore o uguale a clipEnd, non viene inserito alcun audio. |
speed |
no | 100% | Il rapporto tra la velocità di riproduzione dell'output e la velocità di input normale, espresso in percentuale. Il formato è un numero reale positivo seguito da %. L'intervallo attualmente supportato è [50% (lento - metà velocità), 200% (veloce - doppia velocità)]. I valori al di fuori di questo intervallo potrebbero essere modificati per potervi rientrare. |
repeatCount |
no | 1 o 10 se repeatDur è impostato |
Un numero reale che specifica quante volte inserire l'audio (dopo il ritaglio, se presente, con 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, pertanto viene considerato come non specificato. In questo caso, viene utilizzato il valore predefinito. |
repeatDur |
no | infinito | Una TimeDesignation che indica un limite alla durata dell'audio inserito dopo che la sorgente è stata elaborata 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 corrispondenza di quel punto. |
soundLevel |
no | +0dB | Regola il livello dell'audio di soundLevel decibel. L'intervallo massimo è +/-40 dB, ma l'intervallo effettivo potrebbe essere inferiore e la qualità dell'output potrebbe non produrre buoni risultati nell'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 (super-wideband)
- 24.000-96.000 bit al secondo, velocità fissa
- Formato (deprecato): WAV (RIFF)
- PCM a 16 bit signed, little endian
- 24.000 campioni al secondo
- Per tutti i formati:
- È preferibile un singolo canale, ma l'opzione stereo è accettabile.
- Durata massima di 240 secondi. Se vuoi riprodurre audio con una durata maggiore, valuta la possibilità di implementare una risposta multimediale.
- Limite di dimensione del file di 5 megabyte.
- L'URL di origine deve utilizzare il protocollo HTTPS.
- Il nostro UserAgent 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>, nel qual caso vengono utilizzati i contenuti di testo dell'elemento per la visualizzazione. Per saperne di più, consulta la sezione sull'audio registrato nell'elenco di controllo delle risposte.
Anche l'URL src deve essere un URL HTTPS (Google Cloud Storage può ospitare i tuoi file audio su un URL HTTPS).
Per saperne di più sulle risposte multimediali, consulta la sezione sulle risposte multimediale nella guida alle risposte.
Per saperne 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 frasi e paragrafi.
Per saperne di più sugli elementi p e s, consulta le specifiche W3.
Esempio
<p><s>This is sentence one.</s><s>This is sentence two.</s></p>
Best practice
- Utilizza i tag <s>…</s> per racchiudere le frasi complete, soprattutto se contengono elementi SSML che modificano la prosodia (ovvero <audio>, <break>, <emphasis>, <par>, <prosody>, <say-as>, <seq> e <sub>).
- Se un'interruzione nel discorso deve essere abbastanza lunga da essere udibile, utilizza i tag <s>…</s> e inserisci l'interruzione tra le frasi.
<sub>
Indica che il testo nel valore dell'attributo alias sostituisce il testo contenuto per la pronuncia.
Puoi utilizzare l'elemento sub anche per fornire una pronuncia semplificata di una parola difficile da leggere. L'ultimo esempio riportato di seguito mostra questo caso d'uso in giapponese.
Per saperne 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 marcatore nella sequenza di testo o tag. Può essere utilizzato per fare riferimento a una posizione specifica nella sequenza o per inserire un marcatore in un flusso di output per la notifica asincrona.
Per saperne di più sull'elemento mark, consulta la specifica W3.
Esempio
<speak> Go from <mark name="here"/> here, to <mark name="there"/> there! </speak>
<prosody>
Viene utilizzato per personalizzare il tono, la velocità di lettura e il 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 W3. Sono disponibili tre opzioni per impostare il valore dell'attributo pitch:
| Attributo | Descrizione |
|---|---|
name |
L'ID stringa per ogni marcatore. |
| Opzione | Descrizione |
|---|---|
| Relativo | Specifica un valore relativo (ad es. "low", "medium", "high" e così via), dove "medium" è il tono predefinito. |
| Semitoni | Aumenta o diminuisci il tono di "N" semitoni utilizzando rispettivamente "+Nst" o "-Nst". Tieni presente che "+/-" e "st" sono obbligatori. |
| Percentuale | Aumenta o diminuisci di una percentuale pari a "N" utilizzando rispettivamente "+N%" o "-N%". Tieni presente che "%" è obbligatorio, mentre "+/-" è facoltativo. |
Per saperne di più sull'elemento prosody, consulta la specifica W3.
Esempio
L'esempio seguente utilizza l'elemento <prosody> per parlare lentamente a un tono inferiore di 2 semitoni rispetto al normale:
<prosody rate="slow" pitch="-2st">Can you hear me now?</prosody>
<emphasis>
Viene utilizzato per aggiungere o rimuovere l'enfasi dal testo contenuto nell'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:
strongmoderatenonereduced
Per saperne di più sull'elemento emphasis, consulta la specifica W3.
Esempio
L'esempio seguente utilizza l'elemento <emphasis> per fare un annuncio:
<emphasis level="moderate">This is an important announcement</emphasis>
<par>
Un container multimediale parallelo che ti 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 momento di inizio diverso, il momento di inizio implicito dell'elemento è lo stesso del container <par>. Se un elemento secondario ha un valore di offset impostato per l'attributo begin o end, l'offset dell'elemento sarà relativo al momento di inizio del container <par>. Per l'elemento principale <par>, l'attributo begin viene ignorato e il momento di inizio è quello in cui il processo di sintesi vocale SSML inizia a generare l'output per l'elemento principale <par> (ovvero, in pratica, il momento "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 container di contenuti multimediali sequenziali che ti consente di riprodurre gli 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 è quello in cui viene eseguito il rendering.
Gli attributi begin e end degli elementi secondari possono essere impostati su valori di offset (vedi Specifica temporale di seguito). I valori di offset di questi elementi secondari saranno relativi alla fine dell'elemento precedente nella sequenza o, nel caso del primo elemento della sequenza, all'inizio del relativo container <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>. I contenuti consentiti di un elemento <media> sono un elemento SSML <speak> o <audio>. La tabella seguente descrive gli attributi validi per un elemento <media>.
Attributi
| Attributo | Obbligatorio | Predefinito | Valori |
|---|---|---|---|
| xml:id | no | nessun valore | Un identificatore XML univoco per questo elemento. Le entità codificate non sono supportate. I valori consentiti degli identificatori corrispondono all'espressione regolare "([-_#]|\p{L}|\p{D})+". Per saperne di più, consulta XML-ID. |
| begin | no | 0 | Il momento di inizio di questo container multimediale. Viene ignorato se si tratta dell'elemento container multimediale principale (trattato come il valore predefinito "0"). Per i valori di stringa validi, consulta la sezione Specifica temporale di seguito. |
| end | no | nessun valore | Una specifica per il momento di fine di questo container multimediale. Per i valori di stringa validi, consulta la sezione Specifica temporale di seguito. |
| repeatCount | no | 1 | Un numero reale che specifica quante volte inserire il contenuto multimediale. Le ripetizioni frazionarie non sono supportate, quindi il valore verrà arrotondato al numero intero più vicino. Zero non è un valore valido, pertanto viene considerato come non specificato. In questo caso, viene utilizzato il valore predefinito. |
| repeatDur | no | nessun valore | Una TimeDesignation che indica un limite alla durata dei contenuti multimediali inseriti. Se la durata del contenuto multimediale è inferiore a questo valore, la riproduzione termina in corrispondenza di quel punto. |
| soundLevel | no | +0dB | Regola il livello dell'audio di soundLevel decibel. L'intervallo massimo è +/-40 dB, ma l'intervallo effettivo potrebbe essere inferiore e la qualità dell'output potrebbe non produrre buoni risultati nell'intero intervallo. |
| fadeInDur | no | 0s | Una TimeDesignation durante la quale l'audio del contenuto multimediale aumenterà gradualmente di volume dal silenzio fino al valore soundLevel specificato facoltativamente. Se la durata del contenuto multimediale è inferiore a questo valore, la dissolvenza in entrata si interromperà alla fine della riproduzione e il livello audio non raggiungerà quello specificato. |
| fadeOutDur | no | 0s | Una TimeDesignation durante la quale l'audio del contenuto multimediale diminuirà gradualmente dal valore soundLevel specificato facoltativamente fino al silenzio. Se la durata del contenuto multimediale è inferiore a questo valore, il livello audio viene impostato su un valore inferiore per garantire che venga raggiunto il silenzio al termine della riproduzione. |
Specifica temporale
Una specifica temporale, utilizzata per il valore degli attributi "begin" e "end" degli elementi <media> e dei container multimediali (elementi <par> e <seq>), è 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 timecount SMIL che consente valori che corrispondono all'espressione regolare:
"\s\*(+|-)?\s\*(\d+)(\.\d+)?(h|min|s|ms)?\s\*"La prima stringa di cifre è la parte intera del numero decimale, mentre la seconda stringa di cifre è la parte frazionaria decimale. Il segno predefinito (ovvero "(+|-)?") è "+". I valori delle unità corrispondono rispettivamente a ore, minuti, secondi e millisecondi. Il valore predefinito per le unità è "s" (secondi).
- Valore syncbase: un valore syncbase è un valore syncbase SMIL che consente valori che corrispondono 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 nello stesso modo di un valore di offset.
<phoneme>
Puoi utilizzare il tag <phoneme> per produrre pronunce personalizzate delle parole in linea. Text-to-Speech accetta gli alfabeti fonetici IPA e X-SAMPA. Per un elenco delle lingue e dei fonemi supportati, consulta la pagina sui fonemi.
Ogni applicazione del tag <phoneme> stabilisce la pronuncia di una singola parola:
<phoneme alphabet="ipa" ph="ˌmænɪˈtoʊbə">manitoba</phoneme> <phoneme alphabet="x-sampa" ph='m@"hA:g@%ni:'>mahogany</phoneme>
Segni di accento
In una trascrizione possono essere inseriti fino a tre livelli di accento:
- Accento principale: indicato con /ˈ/ in IPA e con /"/ in X-SAMPA.
- Accento secondario: indicato con /ˌ/ in IPA e con /%/ in X-SAMPA.
- Nessun accento: non indicato con un simbolo (in nessuna notazione).
Alcune lingue potrebbero avere meno di tre livelli o non indicare affatto la posizione dell'accento. Consulta la pagina sui fonemi per vedere i livelli di accento disponibili nella tua lingua. I segni di accento vengono posizionati all'inizio di ogni sillaba accentata. Ad esempio, in inglese statunitense:
| Parola di esempio | IPA | X-SAMPA |
|---|---|---|
| water | ˈwɑːtɚ | "wA:t@` |
| underwater | ˌʌndɚˈwɑːtɚ | %Vnd@"wA:t@ |
Trascrizioni ampie vs dettagliate
Come regola generale, mantieni le trascrizioni più ampie e fonemiche. Ad esempio, in inglese americano, trascrivi la /t/ intervocalica (anziché utilizzare una monovibrante alveolare):
| Parola di esempio | IPA | X-SAMPA |
|---|---|---|
| butter | ˈbʌtɚ anziché ˈbʌɾɚ | "bVt@` anziché "bV4@` |
In alcuni casi, l'utilizzo della rappresentazione fonemica rende i risultati della sintesi vocale innaturali (ad esempio, se la sequenza di fonemi è difficile da pronunciare dal punto di vista anatomico).
Un esempio è l'assimilazione della /s/ in inglese. In questo caso, l'assimilazione deve essere riportata nella trascrizione:
| Parola di esempio | IPA | X-SAMPA |
|---|---|---|
| cats | ˈkæts | "k{ts |
| dogs | ˈdɑːgz anziché ˈdɑːgs | "dA:gz anziché "dA:gs |
Indebolimento
Ogni sillaba deve contenere una sola vocale. Ciò significa che devi evitare le consonanti sillabiche e trascriverle con una vocale indebolita. Ad esempio:
| Parola di esempio | IPA | X-SAMPA |
|---|---|---|
| kitten | ˈkɪtən anziché ˈkɪtn | "kIt@n anziché "kitn |
| kettle | ˈkɛtəl anziché ˈkɛtl | "kEt@l anziché "kEtl |
Sillabazione
In via facoltativa, puoi specificare la suddivisione delle sillabe utilizzando /./. Ogni sillaba deve contenere una sola vocale. Ad esempio:
| Parola di esempio | IPA | X-SAMPA |
|---|---|---|
| readability | ˌɹiː.də.ˈbɪ.lə.tiː | %r\i:.d@."bI.l@.ti: |
Dizionario di pronuncia personalizzato
In alternativa a indicare le pronunce in linea con il tag phoneme, fornisci un dizionario di pronunce personalizzate nella RPC di sintesi vocale. Quando il dizionario di pronuncia personalizzato è incluso nella richiesta, il testo di input viene trasformato automaticamente con il tag SSML phoneme.
Ad esempio, la richiesta seguente con input di testo e pronuncia personalizzata verrà trasformata e sarà equivalente al codice SSML di seguito.
Input originale:
input: {
text: 'Hello world! It is indeed a beautiful world!',
custom_pronunciations: {
pronunciations: {
phrase: 'world'
phonetic_encoding: PHONETIC_ENCODING_IPA
pronunciation: 'wɜːld'
}
}
}Input trasformato:
input: {
ssml: '<speak>Hello <phoneme alphabet="ipa" ph="wɜːld">world</phoneme>! It is indeed a beautiful <phoneme alphabet="ipa" ph="wɜːld">world</phoneme>!</speak>'
}Durata
Text-to-Speech supporta <say-as interpret-as="duration"> per leggere correttamente le durate. Ad esempio, l'esempio seguente verrebbe verbalizzato come "five hours and thirty minutes" (cinque ore e trenta minuti):
<say-as interpret-as="duration" format="h:m">5:30</say-as>
La stringa di formato supporta i valori seguenti:
| Abbreviazione | Valore |
|---|---|
| h | ore |
| m | minuti |
| s | secondi |
| ms | millisecondi |
<voice>
Il tag <voice> ti consente di utilizzare più di una voce in una singola richiesta SSML. Nell'esempio seguente, la voce predefinita è una voce maschile inglese.
Tutte le parole verranno sintetizzate con questa voce, ad eccezione di "qu'est-ce qui t'amène ici", che verrà verbalizzata in francese utilizzando una voce femminile anziché la lingua (inglese) e il genere (maschile) predefiniti.
<speak>And then she asked, <voice language="fr-FR" gender="female">qu'est-ce qui t'amène ici</voice><break time="250ms"/> in her sweet and gentle voice.</speak>
In alternativa, puoi utilizzare un tag <voice> per specificare una singola voce (il nome della voce nella pagina delle voci supportate) anziché specificare i valori language e/o gender:
<speak>The dog is friendly<voice name="fr-CA-Wavenet-B">mais la chat est mignon</voice><break time="250ms"/> said a pet shop owner</speak>
Quando utilizzi il tag <voice>, Text-to-Speech si aspetta di ricevere un valore name (il nome della voce che vuoi utilizzare) o una combinazione dei seguenti attributi. Tutti e tre gli attributi sono facoltativi, ma devi fornirne almeno uno se non fornisci un valore name.
gender: "male", "female" o "neutral".variant: utilizzato come criterio per decidere quale voce utilizzare nei casi in cui esistono più possibilità in base alla configurazione.language: la lingua che preferisci. È possibile specificare una sola lingua in un determinato tag<voice>. Specifica la lingua nel formato BCP-47. Puoi trovare il codice BCP-47 per la tua lingua nella colonna Codice lingua della pagina delle voci e delle lingue supportate.
Puoi anche controllare la priorità relativa di ciascuno degli attributi gender, variant e language utilizzando due tag aggiuntivi: required e ordering.
required: se un attributo è designato comerequirede non è configurato correttamente, la richiesta non andrà a buon fine.ordering: tutti gli attributi elencati dopo un tagorderingsono considerati preferiti anziché obbligatori. L'API Text-to-Speech considera gli attributi preferiti secondo il criterio del "best effort" nell'ordine in cui sono elencati dopo il tagordering. Se alcuni attributi preferiti sono configurati in modo errato, Text-to-Speech potrebbe comunque restituire una voce valida, ignorando la configurazione errata.
Esempi di configurazioni che utilizzano i tag required e ordering:
<speak>And there it was <voice language="en-GB" gender="male" required="gender" ordering="gender language">a flying bird </voice>roaring in the skies for the first time.</speak>
<speak>Today is supposed to be <voice language="en-GB" gender="female" ordering="language gender">Sunday Funday.</voice></speak>
<lang>
Puoi utilizzare <lang> per includere testo in più lingue nella stessa richiesta SSML. Tutte le lingue verranno sintetizzate con la stessa voce, a meno che non utilizzi il tag <voice> per cambiare esplicitamente la voce. La stringa xml:lang deve contenere la lingua di destinazione nel formato BCP-47 (questo valore è elencato come "Codice lingua" nella tabella delle voci supportate). Nell'esempio seguente, "chat" verrà verbalizzato in francese anziché nella lingua predefinita (inglese):
<speak>The french word for cat is <lang xml:lang="fr-FR">chat</lang></speak>
Text-to-Speech supporta il tag <lang> secondo il criterio del "best effort". Non tutte le combinazioni di lingue producono risultati della stessa qualità se specificate nella stessa richiesta SSML. In alcuni casi, una combinazione linguistica potrebbe produrre un effetto rilevabile ma lieve o percepito come negativo. Problemi noti:
- Il giapponese con caratteri kanji non è supportato dal tag
<lang>. L'input viene traslitterato e letto come caratteri cinesi. - Le lingue semitiche come arabo, ebraico e persiano non sono supportate dal tag
<lang>e non produrranno alcun suono. Se vuoi utilizzare una di queste lingue, ti consigliamo di utilizzare il tag<voice>per passare a una voce che parli la lingua desiderata (se disponibile).
Timepoint SSML
L'API Text-to-Speech supporta l'utilizzo di timepoint nei dati audio creati. Un timepoint è un timestamp (in secondi, misurato dall'inizio dell'audio generato) che corrisponde a un punto designato nello script. Puoi impostare un timepoint nello script utilizzando il tag <mark>. Quando l'audio viene generato, l'API restituisce l'offset temporale tra l'inizio dell'audio e il timepoint.
Per impostare un timepoint sono necessari due passaggi:
- Aggiungi un tag SSML
<mark>al punto dello script per cui vuoi un timestamp. - Imposta TimepointType su
SSML_MARK. Se questo campo non è impostato, i timepoint non vengono restituiti per impostazione predefinita.
L'esempio seguente restituisce due timepoint:
- timepoint_1: indica il momento (in secondi) in cui la parola "Mark" appare nell'audio generato.
- timepoint_2: indica il momento (in secondi) in cui la parola "see" appare nell'audio generato.
<speak>Hello <mark name="timepoint_1"/> Mark. Good to <mark name="timepoint_2"/> see you.</speak>
Stili
Le voci seguenti possono parlare in più stili:- en-US-Neural2-F
- en-US-Neural2-J
Utilizza il tag <google:style> per controllare lo stile da utilizzare. Utilizza il tag solo per frasi complete.
Esempio:
<speak><google:style name="lively">Hello I'm so happy today!</google:style></speak>
Il campo name supporta i valori seguenti:
apologeticcalmempatheticfirmlively