chrome.tts (original) (raw)

Descripción

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

Chrome proporciona esta capacidad en Windows (con SAPI 5), Mac OS X y ChromeOS, a través de las capacidades de síntesis de voz que proporciona el sistema operativo. En todas las plataformas, el usuario puede instalar extensiones que se registren como motores de voz alternativos.

Permisos

tts

Conceptos y uso

Genera voz

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

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

Para detener el habla de inmediato, solo llama a stop():

chrome.tts.stop();

Puedes proporcionar opciones que controlen varias propiedades del habla, como la velocidad, la tonalidad y mucho más. Por ejemplo:

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

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

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

De forma predeterminada, cada llamada a speak() interrumpe cualquier discurso en curso y habla de inmediato. Para determinar si una llamada interrumpiría algo, puedes llamar a isSpeaking(). Además, puedes usar la opción enqueue para agregar esta expresión a una cola de expresiones que se pronunciarán cuando termine la expresión 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(). No todos los motores de voz admitirán 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 tome argumentos. Dentro de la devolución de llamada, verifica runtime.lastError para ver si hubo errores.

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

La devolución de llamada se realiza de inmediato, antes de que el motor comience a generar voz. El propósito de la devolución de llamada es alertarte sobre errores de sintaxis en el uso de la API de TTS, no detectar todos los errores posibles que podrían ocurrir en el proceso de sintetizar y generar voz. Para detectar estos errores también, debes usar un objeto de escucha de eventos, que se describe en la siguiente sección.

Cómo detectar eventos

Para obtener más información en tiempo real sobre el estado del habla sintetizada, pasa un objeto de escucha de eventos en las opciones a 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 del discurso actual en relación con la expresión y, para los eventos de error, un mensaje de error opcional. Los tipos de eventos son los siguientes:

Cuatro de los tipos de eventos ('end', 'interrupted', 'cancelled' y 'error') son finales. Después de recibir uno de esos eventos, esta expresión ya no se pronunciará y no se recibirán eventos nuevos de esta expresión.

Es posible que algunas voces no admitan todos los tipos de eventos y que otras no envíen ningún evento. Si no quieres usar una voz a menos que envíe ciertos eventos, pasa los eventos que necesites en el miembro requiredEventTypes del objeto de opciones o usa getVoices() para elegir una voz que cumpla con tus requisitos. Ambos se describen a continuación.

Lenguaje de marcado de SSML

Las expresiones que se usan en esta API pueden incluir marcas con el lenguaje de marcado de síntesis de voz (SSML). Si usas SSML, el primer argumento para speak() debe ser un documento SSML completo con 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 admitirán 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 seguir pronunciando el texto subyacente.

Elige una voz

De forma predeterminada, Chrome elige la voz más adecuada para cada expresión que quieras decir, según el idioma. En la mayoría de los sistemas operativos Windows, Mac OS X y ChromeOS, la síntesis de voz proporcionada por el sistema operativo debería poder leer cualquier texto en al menos un idioma. Sin embargo, algunos usuarios pueden tener una variedad de voces disponibles, tanto desde su sistema operativo como desde los motores de voz implementados por otras extensiones de Chrome. En esos casos, puedes implementar código personalizado para elegir la voz adecuada o para 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 objetos TtsVoice como 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

“comenzar”

"end"

"word"

"sentence"

"marker"

"interrupted"

"cancelled"

"error"

"pause"

"resume"

TtsEvent

Es un evento del motor de TTS para comunicar el estado de una expresión.

Propiedades

TtsOptions

Chrome 77 y versiones posteriores

Son las opciones de voz del motor de TTS.

Propiedades

TtsVoice

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

Propiedades

VoiceGender

Chrome 54 y versiones posteriores Obsoleto desde Chrome 70

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

Enum

Métodos

getVoices()

chrome.tts.getVoices(): Promise<TtsVoice[]>

Obtiene un array de todas las voces disponibles.

Muestra

isSpeaking()

chrome.tts.isSpeaking(): Promise

Comprueba si el motor está hablando en este momento. En Mac OS X, el resultado es verdadero siempre que el motor de voz del sistema esté hablando, incluso si Chrome no inició el discurso.

Muestra

pause()

chrome.tts.pause(): void

Pausa la síntesis de voz, posiblemente en medio de una expresión. Una llamada para reanudar o detener la voz anulará la pausa.

resume()

chrome.tts.resume(): void

Si se pausó el discurso, se reanuda donde se detuvo.

speak()

chrome.tts.speak(
  utterance: string,
  options?: TtsOptions,
): Promise

Habla texto con un motor de texto a voz.

Parámetros

Muestra

stop()

chrome.tts.stop(): void

Detiene la voz actual y vacía la cola de las expresiones pendientes. Además, si se pausó el habla, ahora se reanudará para la próxima llamada a speak.

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