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.
Chrome ofrece esta función 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.
Permisos
tts
Conceptos y uso
Generar 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()
. 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 en la siguiente sección.
Cómo escuchar 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. Usaevent.charIndex
para determinar la voz actual. posición.'sentence'
: Se alcanzó un límite de oraciones. Usaevent.charIndex
para determinar el valor actual posición de voz.'marker'
: Se alcanzó un marcador de SSML. Usaevent.charIndex
para determinar la voz actual. posición.'end'
: El motor terminó de pronunciar la declaración.'interrupted'
: otra llamada aspeak()
ostop()
interrumpió esta expresión, y eso hizo no terminan.'cancelled'
: Esta declaración se puso en cola, pero luego se canceló con otra llamada aspeak()
ostop()
y nunca comenzó a hablar.'error'
: se produjo un error específico del motor y no se puede pronunciar esta declaración. Chequeevent.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 quieres usar una voz, a menos que envíe ciertos eventos, pasa los eventos que solicitas en el
requiredEventTypes
es miembro del objeto de opciones, o bien usa getVoices()
para elegir una voz que cumpla con
según tus requisitos. Ambas se describen 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.
Elige 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
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 posterioresLa 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, oerror
cuando se produce cualquier otro error. Cuando se pausa la voz, se activa un eventopause
si un enunciado en particular se detiene en el medio yresume
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
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 77Gé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 70Gé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
Género ya no está disponible y se ignora.
Enum
“hombre”
“mujer”
Métodos
getVoices()
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
TtsVoice[]
Es el array de objetos
tts.TtsVoice
que representan las voces disponibles para la síntesis de voz.
-
Muestra
-
Promise<TtsVoice[]>
Chrome 101 y versiones posterioresLas promesas son compatibles con Manifest V3 y versiones posteriores, pero se proporcionan devoluciones de llamada para retrocompatibilidad. No puedes usar ambos en la misma llamada a función. El se resuelve con el mismo tipo que se pasa a la devolución de llamada.
isSpeaking()
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<boolean>
Chrome 101 y versiones posterioresLas promesas son compatibles con Manifest V3 y versiones posteriores, pero se proporcionan devoluciones de llamada para retrocompatibilidad. No puedes usar ambos en la misma llamada a función. El se resuelve con el mismo tipo que se pasa a la devolución 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()
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 posterioresLas promesas son compatibles con Manifest V3 y versiones posteriores, pero se proporcionan devoluciones de llamada para retrocompatibilidad. No puedes usar ambos en la misma llamada a función. El se resuelve con el mismo tipo que se pasa a la devolución 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.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