chrome.ttsEngine

Descripción

Usa la API de chrome.ttsEngine para implementar un motor de texto a voz(TTS) con una extensión. Si tu extensión se registra con esta API, recibirá eventos que contienen una expresión para hablar y otros parámetros cuando cualquier extensión o app de Chrome use la API de tts para generar voz. Luego, tu extensión puede usar cualquier tecnología web disponible para sintetizar y generar la voz, y enviar eventos a la función de llamada para informar el estado.

Permisos

ttsEngine

Conceptos y uso

Una extensión puede registrarse como motor de voz. De esta manera, puede interceptar algunas o todas las llamadas a funciones como tts.speak() y tts.stop(), y proporcionar una implementación alternativa. Las extensiones pueden usar libremente cualquier tecnología web disponible para proporcionar voz, incluido el audio transmitido desde un servidor y el audio HTML5. Una extensión podría incluso hacer algo diferente con las expresiones, como mostrar subtítulos en una ventana emergente o enviarlas como mensajes de registro a un servidor remoto.

Para implementar un motor de TTS, una extensión debe declarar el permiso "ttsEngine" y, luego, declarar todas las voces que proporciona en el manifiesto de la extensión, de la siguiente manera:

{
  "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
  }
}

Una extensión puede especificar cualquier cantidad de voces.

El parámetro voice_name es obligatorio. El nombre debe ser lo suficientemente descriptivo como para identificar el nombre de la voz y el motor que se usó. En el improbable caso de que dos extensiones registren voces con el mismo nombre, un cliente puede especificar el ID de la extensión que debe realizar la síntesis.

El parámetro lang es opcional, pero se recomienda. Casi siempre, una voz puede sintetizar el habla en un solo idioma. Cuando un motor admite más de un idioma, puede registrar fácilmente una voz independiente para cada idioma. En raras ocasiones, una sola voz puede manejar más de un idioma. En estos casos, lo más fácil es enumerar dos voces separadas y controlarlas con la misma lógica de forma interna. Sin embargo, si quieres crear una voz que maneje expresiones en cualquier idioma, omite el parámetro lang del manifiesto de tu extensión.

Por último, el parámetro event_types es obligatorio si el motor puede enviar eventos para actualizar al cliente sobre el progreso de la síntesis de voz. Como mínimo, se recomienda admitir el tipo de evento 'end' para indicar cuándo finaliza el habla. De lo contrario, Chrome no podrá programar las expresiones en cola.

Una vez cargada, una extensión puede reemplazar la lista de voces declaradas llamando a chrome.ttsEngine.updateVoices. (Ten en cuenta que los parámetros que se usan en la llamada programática a updateVoices están en formato camel case, p.ej., voiceName, a diferencia del archivo de manifiesto que usa voice_name).

Los tipos de eventos posibles que puedes enviar corresponden a los tipos de eventos que recibe el método speak():

  • 'start': El motor comenzó a decir la expresión.
  • 'word': Se alcanzó un límite de palabra. Usa event.charIndex para determinar la posición actual del habla.
  • 'sentence': Se alcanzó el límite de una oración. Usa event.charIndex para determinar la posición actual del discurso.
  • 'marker': Se alcanzó un marcador de SSML. Usa event.charIndex para determinar la posición actual del habla.
  • 'end': El motor terminó de pronunciar la expresión.
  • 'error': Se produjo un error específico del motor y no se puede pronunciar esta expresión. Pasa más información en event.errorMessage.

El motor de voz no envía los eventos 'interrupted' y 'cancelled', sino que Chrome los genera automáticamente.

Los clientes de texto a voz pueden obtener la información de voz del manifiesto de tu extensión llamando a tts.getVoices, suponiendo que hayas registrado los objetos de escucha de eventos de voz como se describe a continuación.

Cómo controlar eventos de voz

Para generar voz a solicitud de los clientes, tu extensión debe registrar objetos de escucha para onSpeak y onStop, de la siguiente manera:

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 decisión de enviar o no una solicitud de voz determinada a una extensión se basa únicamente en si la extensión admite los parámetros de voz determinados en su manifiesto y si registró listeners para onSpeak y onStop. En otras palabras, no hay forma de que una extensión reciba una solicitud de voz y decida de forma dinámica si la controlará.

Tipos

AudioBuffer

Chrome 92 y versiones posteriores

Parámetros que contienen un búfer de audio y datos asociados.

Propiedades

  • audioBuffer

    ArrayBuffer

    Es el búfer de audio del motor de texto a voz. Debe tener una longitud exactamente igual a audioStreamOptions.bufferSize y estar codificado como mono, en audioStreamOptions.sampleRate y como PCM lineal, un número de punto flotante con signo de 32 bits, es decir, el tipo Float32Array en JavaScript.

  • charIndex

    número opcional

    Es el índice de caracteres asociado con este búfer de audio.

  • isLastBuffer

    booleano opcional

    Es verdadero si este búfer de audio es el último para el texto que se está diciendo.

AudioStreamOptions

Chrome 92 y versiones posteriores

Contiene el formato de transmisión de audio que se espera que produzca un motor.

Propiedades

  • bufferSize

    número

    Es la cantidad de muestras dentro de un búfer de audio.

  • sampleRate

    número

    Es la tasa de muestreo esperada en un búfer de audio.

LanguageInstallStatus

Chrome 132 y versiones posteriores

Es el estado de instalación de una voz.

Enum

"notInstalled"

"instalando"

"installed"

"failed"

LanguageStatus

Chrome 132 y versiones posteriores

Es el estado de instalación de un idioma.

Propiedades

  • error

    cadena opcional

    Son detalles sobre los errores de instalación. Se propaga de forma opcional si no se pudo instalar el idioma.

  • installStatus

    Es el estado de la instalación.

  • lang

    string

    Cadena de idioma con el formato código de idioma-código de región, en la que se puede omitir la región. Algunos ejemplos son en, en-AU y zh-CH.

LanguageUninstallOptions

Chrome 132 y versiones posteriores

Son las opciones para desinstalar un idioma determinado.

Propiedades

  • uninstallImmediately

    booleano

    Es verdadero si el cliente de TTS desea que el idioma se desinstale de inmediato. El motor puede elegir si desinstalar el idioma y cuándo hacerlo, según este parámetro y la información del solicitante. Si es falso, es posible que use otros criterios, como el uso reciente, para determinar cuándo desinstalarla.

SpeakOptions

Chrome 92 y versiones posteriores

Son las opciones especificadas para el método tts.speak().

Propiedades

  • género

    VoiceGender opcional

    Obsoleto desde Chrome 92

    El género dejó de estar disponible y se ignorará.

    Es el género de la voz para el discurso sintetizado.

  • lang

    cadena opcional

    Idioma que se usará para la síntesis, en el formato idioma-región. Ejemplos: "en", "en-US", "en-GB", "zh-CN".

  • pitch

    número opcional

    Es el tono de voz, que puede ser entre 0 y 2 inclusive, donde 0 es el más bajo y 2 el más alto. El valor 1.0 corresponde al tono predeterminado de esta voz.

  • de conversiones

    número opcional

    Es la velocidad de habla en relación con la velocidad predeterminada de esta voz. 1.0 es la tasa predeterminada, que suele ser de entre 180 y 220 palabras por minuto. 2.0 es el doble de rápido y 0.5 es la mitad. Se garantiza que este valor estará entre 0.1 y 10.0, inclusive. Cuando una voz no admite este rango completo de velocidades, no se muestra un error. En su lugar, recorta la tasa al rango que admite la voz.

  • voiceName

    cadena opcional

    Nombre de la voz que se usará para la síntesis.

  • Volumen

    número opcional

    Volumen de voz entre 0 y 1 inclusive, donde 0 es el más bajo y 1 es el más alto, con un valor predeterminado de 1.0.

TtsClient

Chrome 131 y versiones posteriores

Es el identificador del cliente que solicita el estado.

Propiedades

  • id

    string

    Es el cliente que realiza una solicitud de administración de idiomas. En el caso de una extensión, este es el ID único de la extensión. En el caso de las funciones de Chrome, este es el nombre legible de la función.

  • Tipo de solicitante.

TtsClientSource

Chrome 131 y versiones posteriores

Tipo de solicitante.

Enum

"chromefeature"

"extension"

VoiceGender

Chrome 54 y versiones posteriores Obsoleto desde Chrome 70

El género dejó de estar disponible y se ignorará.

Enum

"male"

"female"

Métodos

updateLanguage()

Chrome 132 y versiones posteriores
chrome.ttsEngine.updateLanguage(
  status: LanguageStatus,
)
: void

El motor llama a este método cuando se intenta instalar un idioma y cuando se desinstala un idioma. También se llama en respuesta a una solicitud de estado de un cliente. Cuando se instala o desinstala una voz, el motor también debe llamar a ttsEngine.updateVoices para registrar la voz.

Parámetros

updateVoices()

Chrome 66 y versiones posteriores
chrome.ttsEngine.updateVoices(
  voices: TtsVoice[],
)
: void

Un motor llama a este método para actualizar su lista de voces. Esta lista anula cualquier voz declarada en el manifiesto de esta extensión.

Parámetros

  • voces

    Es un array de objetos tts.TtsVoice que representan las voces disponibles para la síntesis de voz.

Eventos

onInstallLanguageRequest

Chrome 131 y versiones posteriores
chrome.ttsEngine.onInstallLanguageRequest.addListener(
  callback: function,
)

Se activa cuando un cliente de TTS solicita instalar un idioma nuevo. El motor debe intentar descargar e instalar el idioma, y llamar a ttsEngine.updateLanguage con el resultado. Si la operación se realiza correctamente, el motor también debe llamar a ttsEngine.updateVoices para registrar las voces recién disponibles.

Parámetros

  • callback

    función

    El parámetro callback se ve de la siguiente manera:

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

onLanguageStatusRequest

Chrome 132 y versiones posteriores
chrome.ttsEngine.onLanguageStatusRequest.addListener(
  callback: function,
)

Se activa cuando un cliente de TTS solicita el estado de instalación de un idioma.

Parámetros

  • callback

    función

    El parámetro callback se ve de la siguiente manera:

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

onPause

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

Opcional: Si un motor admite el evento de pausa, debe pausar la expresión actual que se está pronunciando, si hay alguna, hasta que reciba un evento de reanudación o de detención. Ten en cuenta que un evento de detención también debe borrar el estado de pausa.

Parámetros

  • callback

    función

    El parámetro callback se ve de la siguiente manera:

    () => void

onResume

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

Opcional: Si un motor admite el evento de pausa, también debe admitir el evento de reanudación para seguir pronunciando la expresión actual, si la hay. Ten en cuenta que un evento de detención también debe borrar el estado de pausa.

Parámetros

  • callback

    función

    El parámetro callback se ve de la siguiente manera:

    () => void

onSpeak

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

Se llama cuando el usuario realiza una llamada a tts.speak() y una de las voces del manifiesto de esta extensión es la primera que coincide con el objeto de opciones.

Parámetros

  • callback

    función

    El parámetro callback se ve de la siguiente manera:

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

    • expresión

      string

    • opciones
    • sendTtsEvent

      función

      El parámetro sendTtsEvent se ve de la siguiente manera:

      (event: tts.TtsEvent) => void

      • evento

        Es el evento del motor de texto a voz que indica el estado de esta expresión.

onSpeakWithAudioStream

Chrome 92 y versiones posteriores
chrome.ttsEngine.onSpeakWithAudioStream.addListener(
  callback: function,
)

Se llama cuando el usuario realiza una llamada a tts.speak() y una de las voces del manifiesto de esta extensión es la primera que coincide con el objeto de opciones. Se diferencia de ttsEngine.onSpeak en que Chrome proporciona servicios de reproducción de audio y controla el envío de eventos de TTS.

Parámetros

  • callback

    función

    El parámetro callback se ve de la siguiente manera:

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

    • expresión

      string

    • opciones
    • audioStreamOptions
    • sendTtsAudio

      función

      El parámetro sendTtsAudio se ve de la siguiente manera:

      (audioBufferParams: AudioBuffer) => void

      • audioBufferParams

        Parámetros que contienen un búfer de audio y datos asociados.

    • sendError

      función

      Chrome 94 y versiones posteriores

      El parámetro sendError se ve de la siguiente manera:

      (errorMessage?: string) => void

      • errorMessage

        cadena opcional

        Es una cadena que describe el error.

onStop

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

Se activa cuando se realiza una llamada a tts.stop y es posible que esta extensión esté en medio de una conversación. Si una extensión recibe una llamada a onStop y la voz ya se detuvo, no debería hacer nada (no generar un error). Si el discurso está en estado de pausa, esto debería cancelar el estado de pausa.

Parámetros

  • callback

    función

    El parámetro callback se ve de la siguiente manera:

    () => void

onUninstallLanguageRequest

Chrome 132 y versiones posteriores
chrome.ttsEngine.onUninstallLanguageRequest.addListener(
  callback: function,
)

Se activa cuando un cliente de TTS indica que ya no se necesita un idioma.

Parámetros