chrome.ttsEngine

Descrizione

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

Autorizzazioni

ttsEngine

Concetti e utilizzo

Un'estensione può registrarsi come motore 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 possono utilizzare qualsiasi tecnologia web disponibile per fornire contenuti vocali, incluso lo streaming audio da un server e l'audio HTML5. Un'estensione potrebbe anche fare qualcosa di diverso con le espressioni enunciate, ad esempio visualizzare 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, in questo modo:

{
  "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 che 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 è in grado di sintetizzare il parlato in un'unica lingua. Quando un motore supporta più lingue, può registrare facilmente una voce separata per ogni lingua. Nei rari casi in cui una singola voce è in grado di gestire più lingue, è più semplice elencare due voci separate e gestirle utilizzando la stessa logica internamente. Tuttavia, se vuoi creare una voce che gestisca le espressioni in qualsiasi lingua, escludi il parametro lang dal file manifest dell'estensione.

Infine, il parametro event_types è obbligatorio se il motore può inviare eventi per aggiornare il client sull'avanzamento della sintesi vocale. Come minimo, consigliamo vivamente di supportare il tipo di evento 'end' per indicare quando la voce è finita, altrimenti Chrome non può pianificare enunciati in coda.

Una volta caricata, un'estensione può sostituire l'elenco di voci dichiarate chiamando chrome.ttsEngine.updateVoices. (Tieni presente che i parametri utilizzati nella chiamata di programmazione a updateVoices sono in caso di cammello: ad es. voiceName, a differenza del file manifest che utilizza voice_name.)

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

  • 'start': il motore ha iniziato a pronunciare l'espressione.
  • 'word': è stato raggiunto un limite di parola. Usa event.charIndex per determinare la posizione attuale del parlato.
  • 'sentence': è stato raggiunto un limite della frase. Usa event.charIndex per determinare la posizione attuale del parlato.
  • 'marker': è stato raggiunto un indicatore SSML. Usa event.charIndex per determinare la posizione attuale del parlato.
  • 'end': il motore ha finito di pronunciare l'espressione.
  • 'error': si è verificato un errore specifico del motore e questa espressione non può essere pronunciata. Trasmetti più informazioni in event.errorMessage.

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

I client di sintesi vocale possono recuperare le informazioni vocali 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 contenuti vocali su richiesta dei client, l'estensione deve registrare i listener sia per onSpeak che per onStop, in questo modo:

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 dipende esclusivamente dal fatto che l'estensione supporti i parametri vocali specificati nel file manifest e abbia registrato ascoltatori per onSpeak e onStop. In altre parole, un'estensione non può ricevere una richiesta vocale e decidere dinamicamente se gestirla.

Tipi

AudioBuffer

Chrome 92 e versioni successive

Parametri contenenti un buffer audio e dati associati.

Proprietà

  • audioBuffer

    ArrayBuffer

    Il buffer audio del motore di sintesi vocale. Deve avere una lunghezza esatta come audioStreamOptions.bufferSize e codificato in formato mono, all'indirizzo audioStreamOptions.sampleRate, e come pcm lineare, in virgola mobile a 32 bit, ovvero il tipo Float32Array in JavaScript.

  • charIndex

    numero facoltativo

    L'indice di caratteri associato a questo buffer audio.

  • isLastBuffer

    booleano facoltativo

    True se il buffer audio è l'ultimo del testo pronunciato.

AudioStreamOptions

Chrome 92 e versioni successive

Contiene il formato dello stream audio che dovrebbe essere prodotto da un motore.

Proprietà

  • bufferSize

    numero

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

  • sampleRate

    numero

    La frequenza di campionamento prevista in un buffer audio.

SpeakOptions

Chrome 92 e versioni successive

Opzioni specificate per il metodo tts.speak().

Proprietà

  • gender

    VoiceGender facoltativo

    Obsoleto da Chrome 92

    Il genere è deprecato e verrà ignorato.

    Genere della voce per la sintesi vocale.

  • lang

    stringa facoltativo

    Il linguaggio da utilizzare per la sintesi, nel formato language-region. Esempi: "en", "en-US", "en-GB", "zh-CN".

  • diamante

    numero facoltativo

    Il tono del parlato è compreso tra 0 e 2 inclusi, dove 0 rappresenta il valore più basso e 2 il valore più alto. 1.0 corrisponde al tono predefinito di questa voce.

  • velocità di reazione

    numero facoltativo

    Velocità del parlato relativa a quella predefinita per questa voce. 1,0 è la velocità predefinita, normalmente tra 180 e 220 parole al minuto. 2,0 è due volte più veloce e 0,5 è metà più veloce. Questo valore è garantito tra 0,1 e 10,0 inclusi. Se una voce non supporta questa gamma completa di tariffe, non restituire un errore. Adatta invece la velocità all'intervallo supportato dalla voce.

  • voiceName

    stringa facoltativo

    Il nome della voce da utilizzare per la sintesi.

  • volume

    numero facoltativo

    Volume della voce compreso tra 0 e 1 inclusi, dove 0 corrisponde al valore più basso e 1 al valore massimo, con un valore predefinito di 1,0.

VoiceGender

Chrome 54 e versioni successive Obsoleto da Chrome 70

Il genere è deprecato e verrà ignorato.

Enum

Metodi

updateVoices()

Chrome 66 e versioni successive
chrome.ttsEngine.updateVoices(
  voices: TtsVoice[],
)

Chiamata da un motore per aggiornare il suo elenco di voci. Questo elenco sostituisce qualsiasi voce dichiarata nel manifest di questa estensione.

Parametri

  • voci

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

Eventi

onPause

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

(Facoltativo) Se un motore supporta l'evento di pausa, deve mettere in pausa l'espressione corrente pronunciata, se presente, finché non riceve un evento di ripresa o di interruzione. Tieni presente che un evento di interruzione dovrebbe 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 ripristino per continuare a pronunciare l'eventuale frase corrente. Tieni presente che un evento di interruzione dovrebbe anche cancellare lo stato di pausa.

Parametri

  • callback

    funzione

    Il parametro callback ha il seguente aspetto:

    ()=>void

onSpeak

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

Richiamato quando l'utente effettua una chiamata a tts.speak(), una delle voci nel file manifest di questa estensione è la prima che corrisponde all'oggetto options.

Parametri

  • callback

    funzione

    Il parametro callback ha il seguente aspetto:

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

    • enunciato

      stringa

    • opzioni
    • sendTtsEvent

      funzione

      Il parametro sendTtsEvent ha il seguente aspetto:

      (event: tts.TtsEvent)=>void

      • event

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

onSpeakWithAudioStream

Chrome 92 e versioni successive
chrome.ttsEngine.onSpeakWithAudioStream.addListener(
  callback: function,
)

Richiamato quando l'utente effettua una chiamata a tts.speak(), una delle voci nel file manifest di questa estensione è la prima che corrisponde all'oggetto options. A differenza di ttsEngine.onSpeak, 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

    • enunciato

      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 e versioni successive

      Il parametro sendError ha il seguente aspetto:

      (errorMessage?: string)=>void

      • errorMessage

        stringa facoltativo

        Una stringa che descrive l'errore.

onStop

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

Viene attivato quando viene effettuata una chiamata a tts.stop e questa estensione potrebbe essere in corso la conversazione. Se un'estensione riceve una chiamata a onStop e la voce è già interrotta, non dovrebbe fare nulla (non generare un errore). Se la voce è in pausa, questo dovrebbe annullare lo stato di pausa.

Parametri

  • callback

    funzione

    Il parametro callback ha il seguente aspetto:

    ()=>void