chrome.ttsEngine

Descrizione

Utilizza l'API chrome.ttsEngine per implementare un motore di sintesi vocale(TTS) utilizzando un'estensione. Se la tua estensione si registra utilizzando questa API, riceverà eventi contenenti un'espressione da pronunciare e altri parametri quando un'estensione o un'app Chrome utilizza l'API tts per generare la sintesi vocale. L'estensione può quindi utilizzare qualsiasi tecnologia web disponibile per sintetizzare e riprodurre il discorso e inviare eventi alla funzione chiamante per segnalare lo stato.

Autorizzazioni

ttsEngine

Concetti e utilizzo

Un'estensione può registrarsi come motore di sintesi vocale. In questo modo, può intercettare alcune o tutte le chiamate a funzioni come tts.speak() e tts.stop() e fornire un'implementazione alternativa. Le estensioni sono senza costi e possono utilizzare qualsiasi tecnologia web disponibile per fornire la sintesi vocale, inclusi lo streaming audio da un server e l'audio HTML5. Un'estensione potrebbe persino fare qualcosa di diverso con le espressioni, ad esempio visualizzare i sottotitoli codificati in un popup o inviarli come messaggi di log a un server remoto.

Per implementare un motore TTS, un'estensione deve dichiarare l'autorizzazione "ttsEngine" e poi dichiarare tutte le voci che fornisce nel manifest dell'estensione, come segue:

{
  "name": "My TTS Engine",
  "version": "1.0",
  "permissions": ["ttsEngine"],
  "tts_engine": {
    "voices": [
      {
        "voice_name": "Alice",
        "lang": "en-US",
        "event_types": ["start", "marker", "end"]
      },
      {
        "voice_name": "Pat",
        "lang": "en-US",
        "event_types": ["end"]
      }
    ]
  },
  "background": {
    "page": "background.html",
    "persistent": false
  }
}

Un'estensione può specificare un numero qualsiasi di voci.

Il parametro voice_name è obbligatorio. Il nome deve essere sufficientemente descrittivo da identificare il nome della voce e il motore utilizzato. Nell'improbabile caso in cui due estensioni registrino voci con lo stesso nome, un client può specificare l'ID dell'estensione che deve eseguire la sintesi.

Il parametro lang è facoltativo, ma vivamente consigliato. Quasi sempre, una voce può sintetizzare la voce in una sola lingua. Quando un motore supporta più di una lingua, può facilmente registrare una voce separata per ogni lingua. In rare circostanze in cui una singola voce può gestire più di una lingua, è più semplice elencare due voci separate e gestirle internamente utilizzando la stessa logica. Tuttavia, se vuoi creare una voce che gestisca le espressioni in qualsiasi lingua, ometti il parametro lang dal manifest dell'estensione.

Infine, il parametro event_types è obbligatorio se il motore può inviare eventi per aggiornare il client sullo stato di avanzamento della sintesi vocale. È consigliabile supportare almeno il tipo di evento 'end' per indicare quando il discorso è terminato, altrimenti Chrome non può pianificare le espressioni in coda.

Una volta caricata, un'estensione può sostituire l'elenco delle voci dichiarate chiamando chrome.ttsEngine.updateVoices. Tieni presente che i parametri utilizzati nella chiamata programmatica a updateVoices sono in formato camel case, ad esempio voiceName, a differenza del file manifest che utilizza voice_name.

I possibili tipi di eventi che puoi inviare corrispondono ai tipi di eventi che riceve il metodo speak():

  • 'start': Il motore ha iniziato a pronunciare l'espressione.
  • 'word': è stato raggiunto un limite di parole. Utilizza event.charIndex per determinare la posizione attuale del discorso.
  • 'sentence': è stato raggiunto il limite di una frase. Utilizza event.charIndex per determinare la posizione attuale del discorso.
  • 'marker': è stato raggiunto un marcatore SSML. Utilizza event.charIndex per determinare la posizione attuale del discorso.
  • 'end': il motore ha terminato di pronunciare l'espressione.
  • 'error': si è verificato un errore specifico del motore e questa frase non può essere pronunciata. Trasmetti più informazioni in event.errorMessage.

Gli eventi 'interrupted' e 'cancelled' non vengono inviati dal motore di sintesi vocale, ma vengono generati automaticamente da Chrome.

I client di sintesi vocale possono ottenere le informazioni sulla voce dal manifest dell'estensione chiamando tts.getVoices, supponendo che tu abbia registrato i listener di eventi vocali come descritto di seguito.

Gestire gli eventi vocali

Per generare la sintesi vocale su richiesta dei client, la tua estensione deve registrare i listener per onSpeak e onStop, come segue:

const speakListener = (utterance, options, sendTtsEvent) => {
  sendTtsEvent({type: 'start', charIndex: 0})

  // (start speaking)

  sendTtsEvent({type: 'end', charIndex: utterance.length})
};

const stopListener = () => {
  // (stop all speech)
};

chrome.ttsEngine.onSpeak.addListener(speakListener);
chrome.ttsEngine.onStop.addListener(stopListener);

La decisione di inviare o meno una determinata richiesta vocale a un'estensione si basa esclusivamente sul fatto che l'estensione supporti i parametri vocali specificati nel manifest e abbia registrato listener per onSpeak e onStop. In altre parole, non esiste modo per un'estensione di ricevere una richiesta vocale e decidere dinamicamente se gestirla.

Tipi

AudioBuffer

Chrome 92+

Parametri contenenti un buffer audio e dati associati.

Proprietà

  • audioBuffer

    ArrayBuffer

    Il buffer audio del motore di sintesi vocale. Deve avere una lunghezza esattamente pari a audioStreamOptions.bufferSize ed essere codificato come mono, a audioStreamOptions.sampleRate e come PCM lineare, float con segno a 32 bit, ovvero il tipo Float32Array in JavaScript.

  • charIndex

    number optional

    L'indice dei caratteri associato a questo buffer audio.

  • isLastBuffer

    booleano facoltativo

    True se questo buffer audio è l'ultimo per il testo che viene letto.

AudioStreamOptions

Chrome 92+

Contiene il formato del flusso audio che un motore dovrebbe produrre.

Proprietà

  • bufferSize

    numero

    Il numero di campioni all'interno di un buffer audio.

  • sampleRate

    numero

    La frequenza di campionamento prevista in un buffer audio.

LanguageInstallStatus

Chrome 132+

Lo stato di installazione di una voce.

Enum

"notInstalled"

"installing"

"installed"

"failed"

LanguageStatus

Chrome 132+

Stato di installazione di una lingua.

Proprietà

  • errore

    stringa facoltativa

    Dettagli sugli errori di installazione. Campo facoltativo compilato se l'installazione della lingua non è riuscita.

  • installStatus

    Stato dell'installazione.

  • lang

    stringa

    Stringa di lingua nel formato codice lingua-codice regione, dove la regione può essere omessa. Esempi: en, en-AU, zh-CH.

LanguageUninstallOptions

Chrome 132+

Opzioni per disinstallare una determinata lingua.

Proprietà

  • uninstallImmediately

    booleano

    True se il client TTS vuole che la lingua venga disinstallata immediatamente. Il motore può scegliere se e quando disinstallare la lingua in base a questo parametro e alle informazioni del richiedente. Se è falso, potrebbe utilizzare altri criteri, come l'utilizzo recente, per determinare quando disinstallare.

SpeakOptions

Chrome 92+

Opzioni specificate per il metodo tts.speak().

Proprietà

  • genere

    VoiceGender facoltativo

    Ritirato a partire da Chrome 92

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

    Tono della voce compreso tra 0 e 2 inclusi, dove 0 è il più basso e 2 il più alto. 1.0 corrisponde al tono predefinito di questa voce.

  • velocità di reazione

    number optional

    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 è il doppio della velocità, mentre 0.5 è la metà della velocità. Questo valore è garantito per essere compreso tra 0,1 e 10,0 inclusi. Quando una voce non supporta questa gamma completa di velocità, non restituire un errore. Taglia invece la velocità nell'intervallo supportato dalla voce.

  • voiceName

    stringa facoltativa

    Il nome della voce da usare per la sintesi.

  • volume

    number optional

    Volume della voce compreso tra 0 e 1 inclusi, dove 0 è il valore più basso e 1 il più alto, con un valore predefinito di 1.0.

TtsClient

Chrome 131+

Identificatore del client che richiede lo stato.

Proprietà

  • id

    stringa

    Il cliente invia una richiesta di gestione della lingua. Per un'estensione, si tratta dell'ID estensione univoco. Per le funzionalità di Chrome, questo è il nome leggibile della funzionalità.

  • origine

    Tipo di richiedente.

TtsClientSource

Chrome 131+

Tipo di richiedente.

Enum

"chromefeature"

"extension"

VoiceGender

Chrome 54+ Ritirato a partire da Chrome 70

Il genere è deprecato e verrà ignorato.

Enum

"male"

"female"

Metodi

updateLanguage()

Chrome 132+
chrome.ttsEngine.updateLanguage(
  status: LanguageStatus,
)
: void

Chiamato da un motore quando viene tentata l'installazione di una lingua e quando una lingua viene disinstallata. Chiamato anche in risposta a una richiesta di stato da un client. Quando una voce viene installata o disinstallata, il motore deve anche chiamare ttsEngine.updateVoices per registrarla.

Parametri

updateVoices()

Chrome 66+
chrome.ttsEngine.updateVoices(
  voices: TtsVoice[],
)
: void

Chiamato da un motore per aggiornare l'elenco delle voci. Questo elenco sostituisce tutte le voci dichiarate nel manifest di questa estensione.

Parametri

  • voci

    Array di oggetti tts.TtsVoice che rappresentano le voci disponibili per la sintesi vocale.

Eventi

onInstallLanguageRequest

Chrome 131+
chrome.ttsEngine.onInstallLanguageRequest.addListener(
  callback: function,
)

Attivato quando un client TTS richiede l'installazione di una nuova lingua. Il motore deve tentare di scaricare e installare la lingua e chiamare ttsEngine.updateLanguage con il risultato. In caso di esito positivo, il motore deve anche chiamare ttsEngine.updateVoices per registrare le voci appena disponibili.

Parametri

  • callback

    funzione

    Il parametro callback ha il seguente aspetto:

    (requestor: TtsClient, lang: string) => void

onLanguageStatusRequest

Chrome 132+
chrome.ttsEngine.onLanguageStatusRequest.addListener(
  callback: function,
)

Attivato quando un client TTS richiede lo stato di installazione di una lingua.

Parametri

  • callback

    funzione

    Il parametro callback ha il seguente aspetto:

    (requestor: TtsClient, lang: string) => void

onPause

chrome.ttsEngine.onPause.addListener(
  callback: function,
)

(Facoltativo) Se un motore supporta l'evento di pausa, deve mettere in pausa l'enunciato corrente, se presente, finché non riceve un evento di ripresa o di interruzione. Tieni presente che un evento di interruzione deve anche cancellare lo stato di pausa.

Parametri

  • callback

    funzione

    Il parametro callback ha il seguente aspetto:

    () => void

onResume

chrome.ttsEngine.onResume.addListener(
  callback: function,
)

(Facoltativo) Se un motore supporta l'evento di pausa, deve supportare anche l'evento di ripresa, per continuare a pronunciare l'espressione corrente, se presente. Tieni presente che un evento di interruzione deve anche cancellare lo stato di pausa.

Parametri

  • callback

    funzione

    Il parametro callback ha il seguente aspetto:

    () => void

onSpeak

chrome.ttsEngine.onSpeak.addListener(
  callback: function,
)

Chiamato quando l'utente effettua una chiamata a tts.speak() e una delle voci del manifest di questa estensione è la prima a corrispondere all'oggetto delle opzioni.

Parametri

  • callback

    funzione

    Il parametro callback ha il seguente aspetto:

    (utterance: string, options: SpeakOptions, sendTtsEvent: function) => void

    • utterance

      stringa

    • opzioni
    • sendTtsEvent

      funzione

      Il parametro sendTtsEvent ha il seguente aspetto:

      (event: tts.TtsEvent) => void

      • evento

        L'evento del motore di sintesi vocale che indica lo stato di questa espressione.

onSpeakWithAudioStream

Chrome 92+
chrome.ttsEngine.onSpeakWithAudioStream.addListener(
  callback: function,
)

Chiamato quando l'utente effettua una chiamata a tts.speak() e una delle voci del manifest di questa estensione è la prima a corrispondere all'oggetto delle opzioni. Differisce da ttsEngine.onSpeak in quanto Chrome fornisce servizi di riproduzione audio e gestisce l'invio di eventi TTS.

Parametri

  • callback

    funzione

    Il parametro callback ha il seguente aspetto:

    (utterance: string, options: SpeakOptions, audioStreamOptions: AudioStreamOptions, sendTtsAudio: function, sendError: function) => void

    • utterance

      stringa

    • opzioni
    • audioStreamOptions
    • sendTtsAudio

      funzione

      Il parametro sendTtsAudio ha il seguente aspetto:

      (audioBufferParams: AudioBuffer) => void

      • audioBufferParams

        Parametri contenenti un buffer audio e dati associati.

    • sendError

      funzione

      Chrome 94+

      Il parametro sendError ha il seguente aspetto:

      (errorMessage?: string) => void

      • errorMessage

        stringa facoltativa

        Una stringa che descrive l'errore.

onStop

chrome.ttsEngine.onStop.addListener(
  callback: function,
)

Attivato quando viene effettuata una chiamata a tts.stop e questa estensione potrebbe essere nel bel mezzo della riproduzione vocale. Se un'estensione riceve una chiamata a onStop e la sintesi vocale è già stata interrotta, non deve fare nulla (non generare un errore). Se la sintesi vocale è in stato di pausa, questo comando dovrebbe annullare lo stato di pausa.

Parametri

  • callback

    funzione

    Il parametro callback ha il seguente aspetto:

    () => void

onUninstallLanguageRequest

Chrome 132+
chrome.ttsEngine.onUninstallLanguageRequest.addListener(
  callback: function,
)

Attivato quando un client TTS indica che una lingua non è più necessaria.

Parametri