chrome.tts

Descripción

Usa la API de chrome.tts para reproducir texto a voz sintetizado (TTS). Consulta también la API de ttsEngine relacionada, que permite que una extensión implemente un motor de voz.

Permisos

tts

Descripción general

Chrome proporciona compatibilidad nativa para la voz en Windows (con SAPI 5), Mac OS X y ChromeOS, con de síntesis de voz proporcionadas por el sistema operativo. En todas las plataformas, el usuario puede instalar extensiones que se registran como motores de voz alternativos.

Generando voz

Llama para hablar al speak() desde tu extensión. Por ejemplo:

chrome.tts.speak('Hello, world.');

Para dejar de hablar de inmediato, llama a stop():

chrome.tts.stop();

Puedes brindar opciones que controlen varias propiedades de la voz, como la velocidad, el tono y más. Por ejemplo:

chrome.tts.speak('Hello, world.', {'rate': 2.0});

También es una buena idea especificar el idioma para que un sintetizador lo admita (y regional, si corresponde).

chrome.tts.speak('Hello, world.', {'lang': 'en-US', 'rate': 2.0});

De forma predeterminada, cada llamada a speak() interrumpe la voz en curso y habla de inmediato. Para determina si una llamada interrumpiría algo, puedes llamar a isSpeaking(). Además, Puedes usar la opción enqueue para hacer que esta declaración se agregue a una cola de declaraciones que se cuando finalice el enunciado actual.

chrome.tts.speak('Speak this first.');
chrome.tts.speak(
    'Speak this next, when the first sentence is done.', {'enqueue': true});

Puedes encontrar una descripción completa de todas las opciones en tts.speak a continuación. No toda la voz son compatibles con todas las opciones.

Para detectar errores y asegurarte de que llamas a speak() correctamente, pasa una función de devolución de llamada que no acepta argumentos. Dentro de la devolución de llamada, revisa runtime.lastError para ver si se produjo alguna errores.

chrome.tts.speak(
  utterance,
  options,
  function() {
    if (chrome.runtime.lastError) {
      console.log('Error: ' + chrome.runtime.lastError.message);
    }
  }
);

La devolución de llamada se muestra de inmediato, antes de que el motor comience a generar voz. El propósito de la la devolución de llamada es para alertarte de errores sintácticos en el uso de la API de TTS, errores que pueden ocurrir en el proceso de sintetizar y emitir la voz. Para detectar estos errores debes usar un objeto de escucha de eventos, como se describe a continuación.

Escucha eventos

Para obtener más información en tiempo real sobre el estado de la voz sintetizada, pasa un objeto de escucha de eventos en las opciones para speak(), de la siguiente manera:

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
);

Cada evento incluye un tipo de evento, el índice de caracteres de la voz actual en relación con la y, en el caso de los eventos de error, un mensaje de error opcional. Los tipos de eventos son los siguientes:

  • 'start': El motor comenzó a pronunciar la declaración.
  • 'word': Se alcanzó un límite de palabras. Usa event.charIndex para determinar la voz actual. posición.
  • 'sentence': Se alcanzó un límite de oraciones. Usa event.charIndex para determinar el valor actual posición de voz.
  • 'marker': Se alcanzó un marcador de SSML. Usa event.charIndex para determinar la voz actual. posición.
  • 'end': El motor terminó de pronunciar la declaración.
  • 'interrupted': otra llamada a speak() o stop() interrumpió esta expresión, y eso hizo no terminan.
  • 'cancelled': Esta declaración se puso en cola, pero luego se canceló con otra llamada a speak() o stop() y nunca comenzó a hablar.
  • 'error': se produjo un error específico del motor y no se puede pronunciar esta declaración. Cheque event.errorMessage para obtener más información.

Cuatro de los tipos de eventos ('end', 'interrupted', 'cancelled' y 'error') son finales. Después del uno de esos eventos es recibido, esta declaración ya no hablará y no habrá eventos nuevos de este declaración.

Es posible que algunas voces no admitan todos los tipos de eventos y que otras no envíen ningún evento. Si no deseas utilizar una voz, a menos que envíe ciertos eventos, pasa los eventos que requieres en la requiredEventTypes es miembro del objeto de opciones, o bien usa getVoices() para elegir una voz que cumpla con según tus requisitos. Ambos se documentan a continuación.

Lenguaje de marcado de SSML

Las expresiones que se usan en esta API pueden incluir lenguaje de marcado con el lenguaje de marcación de síntesis de voz (SSML). Si usas SSML, el primer argumento para speak() debe ser un documento de SSML completo que tenga un encabezado XML y una etiqueta <speak> de nivel superior, no un fragmento de documento.

Por ejemplo:

chrome.tts.speak(
  '<?xml version="1.0"?>' +
  '<speak>' +
  '  The <emphasis>second</emphasis> ' +
  '  word of this sentence was emphasized.' +
  '</speak>'
);

No todos los motores de voz admiten todas las etiquetas de SSML y es posible que algunos no admitan SSML en absoluto, pero todos los motores deben ignorar cualquier SSML que no admitan y que sigan pronunciando el texto subyacente.

Cómo elegir una voz

De forma predeterminada, Chrome elige la voz más apropiada para cada frase que deseas pronunciar, en función de el idioma. En la mayoría de los sistemas Windows, Mac OS X y ChromeOS, la síntesis de voz proporcionada por el sistema operativo debería poder hablar cualquier texto en al menos un idioma. Algunos usuarios pueden tener un una variedad de voces disponibles desde su sistema operativo y desde los motores de voz implementados por otras extensiones de Chrome. En esos casos, puedes implementar código personalizado para elegir su voz o presentarle al usuario una lista de opciones.

Para obtener una lista de todas las voces, llama a getVoices() y pásale una función que reciba un array de TtsVoice como su argumento:

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);
    }
  }
);

Tipos

EventType

Chrome 54 y versiones posteriores

Enum

“start”

“end”

"palabra"

“sentence”

“marker”

“interrumpido”

“cancelado”

“error”

“pause”

“reanudar”

TtsEvent

Un evento del motor de TTS para comunicar el estado de una declaración.

Propiedades

  • charIndex

    número opcional

    El índice del carácter actual en la declaración. En el caso de los eventos de palabras, el evento se activa al final de una palabra y antes del comienzo de la siguiente. El elemento charIndex representa un punto en el texto al comienzo de la siguiente palabra que se leerá.

  • errorMessage

    string opcional

    La descripción del error, si el tipo de evento es error.

  • longitud

    número opcional

    Chrome 74 y versiones posteriores

    La extensión de la siguiente parte de la declaración. Por ejemplo, en un evento word, la longitud de la palabra que se pronunciará a continuación. Si el motor de voz no la establece, se establecerá en -1.

  • tipo

    El tipo puede ser start apenas comienza la voz, word cuando se alcanza un límite de palabras, sentence cuando se alcanza un límite de oración, marker cuando se alcanza un elemento de marca de SSML, end cuando se alcanza el final de la declaración, interrupted cuando el enunciado se detiene o se interrumpe antes de llegar al final, cancelled cuando se quita de la cola antes de sintetizarse, o error cuando se produce cualquier otro error. Cuando se pausa la voz, se activa un evento pause si un enunciado en particular se detiene en el medio y resume si se reanuda un discurso. Ten en cuenta que es posible que los eventos de pausa y reanudación no se activen si se pausa la voz entre palabras.

TtsOptions

Chrome 77 y versiones posteriores

Las opciones de voz para el motor de TTS.

Propiedades

  • desiredEventTypes

    string[] opcional

    Tipos de eventos de TTS que te interesa escuchar. Si falta, es posible que se envíen todos los tipos de eventos.

  • poner en cola

    booleano opcional

    Si es verdadero, pone en cola esta declaración si el TTS ya está en curso. Si es falso (el valor predeterminado), interrumpe cualquier voz actual y vacía la cola de voz antes de pronunciar esta nueva frase.

  • extensionId

    string opcional

    El ID de extensión del motor de voz que se utilizará, si se conoce.

  • género

    VoiceGender opcional

    Obsoleto desde Chrome 77

    Género ya no está disponible y se ignorará.

    Género de voz para voz sintetizada.

  • lang

    string opcional

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

  • pitch

    número opcional

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

  • de conversiones

    número opcional

    Velocidad de habla en relación con la velocidad predeterminada de esta voz. 1.0 es la tasa predeterminada, normalmente alrededor de 180 a 220 palabras por minuto. 2.0 es el doble de rápido y 0.5 es la mitad. Los valores inferiores a 0.1 o superiores a 10.0 no están permitidos, pero muchas voces limitarán aún más las frecuencias mínima y máxima. Por ejemplo, es posible que una voz en particular no hable más rápido que 3 veces lo normal, incluso si especificas un valor superior a 3.0.

  • requiredEventTypes

    string[] opcional

    Son los tipos de eventos de TTS que debe admitir la voz.

  • voiceName

    string opcional

    Es el nombre de la voz que se usará para la síntesis. Si está vacía, se usará cualquier voz disponible.

  • Volumen

    número opcional

    Volumen de habla 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.

  • onEvent

    void optional

    Esta función se llama con eventos que tienen lugar en el proceso de decir la declaración.

    La función onEvent se ve de la siguiente manera:

    (event: TtsEvent) => {...}

    • evento

      El evento de actualización del motor de texto a voz que indica el estado de esta declaración.

TtsVoice

Es la descripción de una voz disponible para síntesis de voz.

Propiedades

  • eventTypes

    EventType[] opcional

    Todos los tipos de eventos de devolución de llamada que esta voz puede enviar.

  • extensionId

    string opcional

    El ID de la extensión que proporciona esta voz.

  • género

    VoiceGender opcional

    Obsoleto desde Chrome 70

    Género ya no está disponible y se ignorará.

    Género de esta voz.

  • lang

    string opcional

    Es el idioma que admite esta voz, en el formato idioma-región. Ejemplos: "en", "en-US", "en-GB", "zh-CN".

  • remoto

    booleano opcional

    Si es verdadero, el motor de síntesis es un recurso de red remoto. Puede ser mayor latencia y, además, incurrir en costos de ancho de banda.

  • voiceName

    string opcional

    El nombre de la voz.

VoiceGender

Chrome 54 y versiones posteriores Obsoleto desde Chrome 70

Género ya no está disponible y se ignora.

Enum

“hombre”

“mujer”

Métodos

getVoices()

Promesa
chrome.tts.getVoices(
  callback?: function,
)

Obtiene un array de todas las voces disponibles.

Parámetros

  • callback

    función opcional

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

    (voices: TtsVoice[]) => void

    • voces

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

Muestra

  • Promise&lt;TtsVoice[]&gt;

    Chrome 101 y versiones posteriores

    Las promesas solo son compatibles con Manifest V3 y versiones posteriores; otras plataformas deben usar devoluciones de llamada.

isSpeaking()

Promesa
chrome.tts.isSpeaking(
  callback?: function,
)

Comprueba si el motor está hablando en ese momento. En Mac OS X, el resultado es verdadero cada vez que el motor de voz del sistema está hablando, incluso si Chrome no inició la voz.

Parámetros

  • callback

    función opcional

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

    (speaking: boolean) => void

    • hablando

      boolean

      Es verdadero si está hablando; de lo contrario, es falso.

Muestra

  • Promise&lt;boolean&gt;

    Chrome 101 y versiones posteriores

    Las promesas solo son compatibles con Manifest V3 y versiones posteriores; otras plataformas deben usar devoluciones de llamada.

pause()

chrome.tts.pause()

Pausa la síntesis de voz, posiblemente en medio de una declaración. Si realizas una llamada para reanudar o detener la voz, se reanudará la voz.

resume()

chrome.tts.resume()

Si se detuvo la voz, se reanudará el proceso desde donde se interrumpió.

speak()

Promesa
chrome.tts.speak(
  utterance: string,
  options?: TtsOptions,
  callback?: function,
)

Habla texto con un motor de texto a voz.

Parámetros

  • declaración

    string

    El texto que se debe hablar, ya sea un texto sin formato o un documento SSML completo y con el formato correcto. Los motores de voz que no sean compatibles con SSML quitarán las etiquetas y dirán el texto. La longitud máxima del texto es de 32,768 caracteres.

  • opciones

    TtsOptions opcionales

    Las opciones de voz.

  • callback

    función opcional

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

    () => void

Muestra

  • Promesa<void>

    Chrome 101 y versiones posteriores

    Las promesas solo son compatibles con Manifest V3 y versiones posteriores; otras plataformas deben usar devoluciones de llamada.

stop()

chrome.tts.stop()

Detiene cualquier voz actual y vacía la cola de declaraciones pendientes. Además, si se pausó la voz, ahora se reanudará para que hable la próxima llamada.

Eventos

onVoicesChanged

Chrome 124 y versiones posteriores
chrome.tts.onVoicesChanged.addListener(
  callback: function,
)

Se llama cuando cambia la lista de tts.TtsVoice que devolvería getVoices.

Parámetros

  • callback

    función

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

    () => void