Descrizione
Utilizza l'API chrome.tts
per riprodurre la sintesi vocale (TTS) del testo. Vedi anche l'API ttsEngine
correlata, che consente a un'estensione di implementare un motore di sintesi vocale.
Chrome fornisce questa funzionalità su Windows (utilizzando SAPI 5), Mac OS X e ChromeOS, utilizzando le funzionalità di sintesi vocale fornite dal sistema operativo. Su tutte le piattaforme, l'utente può installare estensioni che si registrano come motori di sintesi vocale alternativi.
Autorizzazioni
tts
Concetti e utilizzo
Genera voce
Chiama speak()
dalla tua estensione per parlare. Ad esempio:
chrome.tts.speak('Hello, world.');
Per interrompere immediatamente la lettura vocale, chiama il numero stop()
:
chrome.tts.stop();
Puoi fornire opzioni che controllano varie proprietà del discorso, come la velocità, il tono e altro ancora. Ad esempio:
chrome.tts.speak('Hello, world.', {'rate': 2.0});
È anche consigliabile specificare la lingua in modo che venga scelto un sintetizzatore che la supporti (e il dialetto regionale, se applicabile).
chrome.tts.speak('Hello, world.', {'lang': 'en-US', 'rate': 2.0});
Per impostazione predefinita, ogni chiamata a speak()
interrompe qualsiasi discorso in corso e parla immediatamente. Per determinare se una chiamata potrebbe interrompere qualcosa, puoi chiamare il numero isSpeaking()
. Inoltre, puoi utilizzare l'opzione enqueue
per aggiungere questa frase a una coda di frasi che verranno pronunciate al termine della frase attuale.
chrome.tts.speak('Speak this first.'); chrome.tts.speak( 'Speak this next, when the first sentence is done.', {'enqueue': true});
Una descrizione completa di tutte le opzioni è disponibile in tts.speak()
. Non tutti i motori di sintesi vocale supportano tutte le opzioni.
Per rilevare gli errori e assicurarti di chiamare speak()
correttamente, passa una funzione di callback che non accetta argomenti. All'interno del callback, controlla runtime.lastError
per vedere se si sono verificati errori.
chrome.tts.speak( utterance, options, function() { if (chrome.runtime.lastError) { console.log('Error: ' + chrome.runtime.lastError.message); } } );
La richiamata viene restituita immediatamente, prima che il motore abbia iniziato a generare la sintesi vocale. Lo scopo del callback è avvisarti degli errori di sintassi nell'utilizzo dell'API TTS, non di rilevare tutti i possibili errori che potrebbero verificarsi durante il processo di sintesi e output del parlato. Per rilevare anche questi errori, devi utilizzare un listener di eventi, descritto nella sezione successiva.
Ascolta gli eventi
Per ottenere informazioni in tempo reale sullo stato della sintesi vocale, passa un listener di eventi nelle opzioni di speak()
, come segue:
chrome.tts.speak( utterance, { onEvent: function(event) { console.log('Event ' + event.type + ' at position ' + event.charIndex); if (event.type == 'error') { console.log('Error: ' + event.errorMessage); } } }, callback );
Ogni evento include un tipo di evento, l'indice del carattere del discorso corrente rispetto all'enunciato e, per gli eventi di errore, un messaggio di errore facoltativo. I tipi di eventi sono:
'start'
: Il motore ha iniziato a pronunciare l'espressione.'word'
: è stato raggiunto un limite di parole. Utilizzaevent.charIndex
per determinare la posizione attuale del discorso.'sentence'
: è stato raggiunto il limite di una frase. Utilizzaevent.charIndex
per determinare la posizione attuale del discorso.'marker'
: è stato raggiunto un marcatore SSML. Utilizzaevent.charIndex
per determinare la posizione attuale del discorso.'end'
: Il motore ha terminato di pronunciare l'espressione.'interrupted'
: Questa frase è stata interrotta da un'altra chiamata aspeak()
ostop()
e non è stata completata.'cancelled'
: questa espressione è stata messa in coda, ma poi annullata da un'altra chiamata aspeak()
ostop()
e non è mai stata pronunciata.'error'
: si è verificato un errore specifico del motore e questa frase non può essere pronunciata. Per maggiori dettagli, consultaevent.errorMessage
.
Quattro dei tipi di eventi, 'end'
, 'interrupted'
, 'cancelled'
e 'error'
, sono finali. Dopo la ricezione di uno di questi eventi, questa frase non verrà più pronunciata e non verranno ricevuti nuovi eventi da questa frase.
Alcune voci potrebbero non supportare tutti i tipi di eventi e alcune potrebbero non inviare alcun evento. Se non vuoi utilizzare una voce a meno che non invii determinati eventi, passa gli eventi che ti servono nel membro requiredEventTypes
dell'oggetto delle opzioni o utilizza getVoices()
per scegliere una voce che soddisfi i tuoi requisiti. Entrambi sono descritti di seguito.
Markup SSML
Le espressioni utilizzate in questa API possono includere markup che utilizza il linguaggio SSML (Speech Synthesis Markup Language). Se utilizzi SSML, il primo argomento di speak()
deve essere un documento SSML completo con un'intestazione XML e un tag <speak>
di primo livello, non un frammento di documento.
Ad esempio:
chrome.tts.speak( '<?xml version="1.0"?>' + '<speak>' + ' The <emphasis>second</emphasis> ' + ' word of this sentence was emphasized.' + '</speak>' );
Non tutti i motori di sintesi vocale supportano tutti i tag SSML e alcuni potrebbero non supportare affatto SSML, ma tutti i motori sono tenuti a ignorare qualsiasi SSML che non supportano e a pronunciare comunque il testo sottostante.
Scegli una voce
Per impostazione predefinita, Chrome sceglie la voce più appropriata per ogni espressione che vuoi pronunciare, in base alla lingua. Nella maggior parte dei sistemi Windows, Mac OS X e ChromeOS, la sintesi vocale fornita dal sistema operativo dovrebbe essere in grado di leggere qualsiasi testo in almeno una lingua. Alcuni utenti potrebbero avere a disposizione una varietà di voci, dal sistema operativo e dai motori di sintesi vocale implementati da altre estensioni di Chrome. In questi casi, puoi implementare un codice personalizzato per scegliere la voce appropriata o per presentare all'utente un elenco di scelte.
Per ottenere un elenco di tutte le voci, chiama getVoices()
e passa una funzione che riceve un array di oggetti TtsVoice
come argomento:
chrome.tts.getVoices( function(voices) { for (var i = 0; i < voices.length; i++) { console.log('Voice ' + i + ':'); console.log(' name: ' + voices[i].voiceName); console.log(' lang: ' + voices[i].lang); console.log(' extension id: ' + voices[i].extensionId); console.log(' event types: ' + voices[i].eventTypes); } } );
Tipi
EventType
Enum
"start"
"end"
"parola"
"sentence"
"marker"
"interrupted"
"annullato"
"error"
"pause"
"resume"
TtsEvent
Un evento del motore TTS per comunicare lo stato di un'espressione.
Proprietà
- charIndex
number (facoltativo)
L'indice del carattere corrente nell'enunciato. Per gli eventi di parole, l'evento viene attivato alla fine di una parola e prima dell'inizio della successiva. Il carattere
charIndex
rappresenta un punto nel testo all'inizio della parola successiva da pronunciare. - errorMessage
stringa facoltativa
La descrizione dell'errore, se il tipo di evento è
error
. - lunghezza
number (facoltativo)
Chrome 74+La lunghezza della parte successiva dell'espressione. Ad esempio, in un evento
word
, questa è la lunghezza della parola che verrà pronunciata successivamente. Se non viene impostato dal motore di sintesi vocale, il valore sarà -1. - tipo
Il tipo può essere
start
non appena inizia la sintesi vocale,word
quando viene raggiunto il limite di una parola,sentence
quando viene raggiunto il limite di una frase,marker
quando viene raggiunto un elemento di marcatura SSML,end
quando viene raggiunta la fine dell'enunciato,interrupted
quando l'enunciato viene interrotto prima di raggiungere la fine,cancelled
quando viene rimosso dalla coda prima di essere sintetizzato oerror
quando si verifica un altro errore. Quando la sintesi vocale viene messa in pausa, viene attivato un eventopause
se una determinata espressione viene messa in pausa a metà eresume
se la sintesi vocale viene ripresa. Tieni presente che gli eventi di pausa e ripresa potrebbero non essere attivati se il parlato viene messo in pausa tra un'espressione e l'altra.
TtsOptions
Le opzioni vocali per il motore di sintesi vocale.
Proprietà
- desiredEventTypes
string[] facoltativo
I tipi di eventi TTS che ti interessano. Se manca, potrebbero essere inviati tutti i tipi di eventi.
- enqueue
booleano facoltativo
Se è true, mette in coda questa espressione se la sintesi vocale è già in corso. Se è false (impostazione predefinita), interrompe qualsiasi discorso in corso e svuota la coda di sintesi vocale prima di pronunciare questa nuova frase.
- extensionId
stringa facoltativa
L'ID estensione del motore di sintesi vocale da utilizzare, se noto.
- genere
VoiceGender facoltativo
Ritirato a partire da Chrome 77Il genere è deprecato e verrà ignorato.
Genere della voce per la sintesi vocale.
- lang
stringa facoltativa
La lingua da utilizzare per la sintesi, nel formato lingua-regione. Esempi: "en", "en-US", "en-GB", "zh-CN".
- diamante
number (facoltativo)
Tono della voce tra 0 e 2 inclusi, dove 0 è il più basso e 2 il più alto. 1.0 corrisponde all'intonazione predefinita di una voce.
- velocità di reazione
number (facoltativo)
Velocità del parlato rispetto a quella predefinita per questa voce. 1.0 è la velocità predefinita, normalmente compresa tra 180 e 220 parole al minuto. 2.0 è due volte più veloce, mentre 0.5 è la metà della velocità. I valori inferiori a 0,1 o superiori a 10,0 non sono consentiti, ma molte voci limitano ulteriormente le velocità minima e massima. Ad esempio, una voce particolare potrebbe non parlare più velocemente di tre volte la velocità normale anche se specifichi un valore superiore a 3,0.
- requiredEventTypes
string[] facoltativo
I tipi di eventi TTS che la voce deve supportare.
- voiceName
stringa facoltativa
Il nome della voce da utilizzare per la sintesi. Se il campo è vuoto, viene utilizzata una voce disponibile.
- volume
number (facoltativo)
Volume della voce compreso tra 0 e 1 inclusi, dove 0 è il valore più basso e 1 il valore più alto, con un valore predefinito di 1.0.
- onEvent
void optional
Questa funzione viene chiamata con gli eventi che si verificano durante il processo di pronuncia dell'espressione.
La funzione
onEvent
ha questo aspetto:(event: TtsEvent) => {...}
- evento
L'evento di aggiornamento del motore di sintesi vocale che indica lo stato di questa espressione.
-
TtsVoice
Una descrizione di una voce disponibile per la sintesi vocale.
Proprietà
- eventTypes
EventType[] facoltativo
Tutti i tipi di eventi di callback che questa voce è in grado di inviare.
- extensionId
stringa facoltativa
L'ID dell'estensione che fornisce questa voce.
- genere
VoiceGender facoltativo
Ritirato a partire da Chrome 70Il genere è deprecato e verrà ignorato.
Il genere di questa voce.
- lang
stringa facoltativa
La lingua supportata da questa voce, nel formato lingua-regione. Esempi: "en", "en-US", "en-GB", "zh-CN".
- telecomando
booleano facoltativo
Se il valore è true, il motore di sintesi è una risorsa di rete remota. Potrebbe esserci una latenza maggiore e potrebbero essere addebitati costi per la larghezza di banda.
- voiceName
stringa facoltativa
Il nome della voce.
VoiceGender
Il genere è deprecato e viene ignorato.
Enum
"male"
"female"
Metodi
getVoices()
chrome.tts.getVoices(): Promise<TtsVoice[]>
Restituisce un array di tutte le voci disponibili.
Resi
-
Promise<TtsVoice[]>
Chrome 101+
isSpeaking()
chrome.tts.isSpeaking(): Promise<boolean>
Controlla se il motore sta parlando. Su Mac OS X, il risultato è true ogni volta che il motore di sintesi vocale del sistema è attivo, anche se la sintesi vocale non è stata avviata da Chrome.
Resi
-
Promise<boolean>
Chrome 101+
pause()
chrome.tts.pause(): void
Mette in pausa la sintesi vocale, potenzialmente a metà di un'espressione. Un comando per riprendere o interrompere la funzione di lettura vocale la riattiverà.
resume()
chrome.tts.resume(): void
Se la sintesi vocale è stata messa in pausa, riprende a parlare da dove era stata interrotta.
speak()
chrome.tts.speak(
utterance: string,
options?: TtsOptions,
): Promise<void>
Legge il testo utilizzando un motore di sintesi vocale.
Parametri
- utterance
stringa
Il testo da pronunciare, in formato normale o come documento SSML completo e ben formato. I motori di sintesi vocale che non supportano SSML rimuoveranno i tag e leggeranno il testo. La lunghezza massima del testo è di 32.768 caratteri.
- opzioni
TtsOptions facoltativo
Le opzioni di sintesi vocale.
Resi
-
Promise<void>
Chrome 101+
stop()
chrome.tts.stop(): void
Interrompe qualsiasi lettura corrente e svuota la coda di eventuali espressioni in attesa. Inoltre, se la sintesi vocale era in pausa, verrà riattivata per la successiva chiamata.
Eventi
onVoicesChanged
chrome.tts.onVoicesChanged.addListener(
callback: function,
)
Chiamato quando l'elenco di tts.TtsVoice
che verrebbero restituite da getVoices è cambiato.
Parametri
- callback
funzione
Il parametro
callback
ha il seguente aspetto:() => void