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 contengan una declaración que se pronunciará y otros parámetros cuando cualquier extensión o app de Chrome use la API de tts para generar voz. Luego, la extensión podrá usar cualquier tecnología web disponible para sintetizar y emitir la voz, y enviar eventos a la función que realiza la llamada para informar el estado.

Permisos

ttsEngine

Conceptos y uso

Una extensión se puede registrar como un 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 son gratuitas y pueden usar cualquier tecnología web disponible para proporcionar voz, incluida la transmisión de audio desde un servidor o audio HTML5. Una extensión incluso podría hacer algo diferente con las expresiones, como mostrar subtítulos en una ventana emergente o enviarlos como mensajes de registro a un servidor remoto.

Para implementar un motor de TTS, una extensión debe declarar el permiso "ttsEngine" y, luego, 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 utilizado. En el caso improbable de que dos extensiones registren voces con el mismo nombre, un cliente puede especificar el ID de la extensión que debería realizar la síntesis.

El parámetro lang es opcional, pero se recomienda incluirlo. Casi siempre, una voz puede sintetizar la voz en un solo idioma. Cuando un motor admite más de un idioma, puede registrar fácilmente una voz independiente para cada uno. En circunstancias excepcionales, en las que una sola voz puede manejar más de un idioma, es más fácil enumerar dos voces distintas y manejarlas con la misma lógica internamente. Sin embargo, si deseas crear una voz que controle las declaraciones 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. Se recomienda como mínimo admitir el tipo de evento 'end' para indicar cuándo finaliza la voz. De lo contrario, Chrome no podrá programar las declaraciones en cola.

Una vez cargada, una extensión puede llamar a chrome.ttsEngine.updateVoices para reemplazar la lista de voces declaradas. (Ten en cuenta que los parámetros que se usan en la llamada programática a updateVoices están en mayúsculas mediales, 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 el enunciado.
  • 'word': Se alcanzó el límite de una palabra. Usa event.charIndex para determinar la posición de voz actual.
  • 'sentence': Se alcanzó el límite de una oración. Usa event.charIndex para determinar la posición de voz actual.
  • 'marker': Se alcanzó un marcador de SSML. Usa event.charIndex para determinar la posición de voz actual.
  • 'end': El motor terminó de decir el enunciado.
  • 'error': Se produjo un error específico del motor y no se puede pronunciar este enunciado. 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 si llaman a tts.getVoices, suponiendo que registraste objetos de escucha de eventos de voz como se describe a continuación.

Controla eventos de voz

Para generar voz a pedido 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 tiene objetos de escucha registrados 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 maneja.

Tipos

AudioBuffer

Chrome 92 y versiones posteriores

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

Propiedades

  • audioBuffer

    ArrayBuffer

    El búfer de audio del motor de texto a voz. Debe tener una longitud exacta de audioStreamOptions.bufferSize y codificado como mono, en audioStreamOptions.sampleRate, y como pcm lineal, número de punto flotante con firma de 32 bits, es decir, el tipo Float32Array en JavaScript.

  • charIndex

    número opcional

    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 del texto que se pronuncia.

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 en un búfer de audio.

  • sampleRate

    número

    La tasa de muestreo esperada en un búfer de audio.

SpeakOptions

Chrome 92 y versiones posteriores

Opciones especificadas para el método tts.speak().

Propiedades

  • género

    VoiceGender opcional

    Obsoleta a partir de Chrome 92

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

    Género de voz para la voz sintetizada.

  • lang

    cadena opcional

    El idioma que se usará para la síntesis, en el formato language-region. Ejemplos: “en”, “en-US”, “en-GB”, “zh-CN”.

  • lanzamiento

    número opcional

    El tono del habla debe ser de entre 0 y 2 inclusive, donde 0 es el más bajo y 2 es el más alto. 1.0 corresponde al tono predeterminado de esta voz.

  • de conversiones

    número opcional

    Velocidad de habla en relación con la velocidad predeterminada para esta voz. La velocidad predeterminada es de 1.0, que suele ser 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. Si una voz no admite este rango completo de frecuencias, no se mostrará un error. En cambio, ajusta la velocidad según el rango que admita la voz.

  • voiceName

    cadena opcional

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

  • Volumen

    número opcional

    El volumen del habla debe ser de entre 0 y 1 inclusive, donde 0 es el más bajo y 1 el más alto, con un valor predeterminado de 1.0.

VoiceGender

Chrome 54 y versiones posteriores Obsoleta a partir de Chrome 70

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

Enum

Métodos

updateVoices()

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

Lo llama un motor para actualizar su lista de voces. Esta lista anula todas las voces declaradas en el manifiesto de esta extensión.

Parámetros

  • voces

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

Eventos

onPause

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

Opcional: Si un motor admite el evento de pausa, debe pausar el enunciado actual pronunciado, si lo hay, hasta que reciba un evento de reanudación o detención. Ten en cuenta que un evento de detención también debe borrar el estado de pausa.

Parámetros

  • callback

    la 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 que se siga pronunciando la frase actual, si la hay. Ten en cuenta que un evento de detención también debe borrar el estado de pausa.

Parámetros

  • callback

    la 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 llama a tts.speak() y una de las voces del manifiesto de esta extensión es la primera en coincidir con el objeto de opciones.

Parámetros

  • callback

    la función

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

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

    • expresión

      cadena

    • Opciones
    • sendTtsEvent

      la función

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

      (event: tts.TtsEvent)=>void

      • event

        El evento del motor de texto a voz que indica el estado de este enunciado.

onSpeakWithAudioStream

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

Se llama cuando el usuario llama a tts.speak() y una de las voces del manifiesto de esta extensión es la primera en coincidir 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

    la 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

      cadena

    • Opciones
    • audioStreamOptions
    • sendTtsAudio

      la 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

      la 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 curso. Si una extensión recibe una llamada a onStop y la voz ya está detenida, no debe hacer nada (no generar un error). Si la voz está en estado de pausa, se debería cancelar el estado de pausa.

Parámetros

  • callback

    la función

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

    ()=>void