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:
'start'
: El motor comenzó a pronunciar la expresión.'word'
: Se alcanzó el límite de una palabra. Usaevent.charIndex
para determinar la posición actual del habla.'sentence'
: Se alcanzó el límite de una oración. Usaevent.charIndex
para determinar la posición actual del discurso.'marker'
: Se alcanzó un marcador de SSML. Usaevent.charIndex
para determinar la posición actual del habla.'end'
: El motor terminó de pronunciar la expresión.'interrupted'
: Esta expresión se interrumpió con otra llamada aspeak()
ostop()
y no se completó.'cancelled'
: Esta expresión se puso en cola, pero luego se canceló con otra llamada aspeak()
ostop()
, y nunca se comenzó a hablar.'error'
: Se produjo un error específico del motor y no se puede pronunciar esta expresión. Consultaevent.errorMessage
para obtener más información.
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
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
-
charIndex
número opcional
Índice del carácter actual en la expresió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
charIndex
representa un punto en el texto al comienzo de la siguiente palabra que se pronunciará. -
errorMessage
cadena opcional
Es la descripción del error si el tipo de evento es
error
. -
longitud
número opcional
Chrome 74 y versiones posterioresEs la longitud de la siguiente parte de la expresión. Por ejemplo, en un evento
word
, esta es la longitud de la palabra que se pronunciará a continuación. Se establecerá en -1 si el motor de voz no lo establece. -
tipo
El tipo puede ser
start
en cuanto comienza el discurso,word
cuando se alcanza el límite de una palabra,sentence
cuando se alcanza el límite de una oración,marker
cuando se alcanza un elemento de marca de SSML,end
cuando se alcanza el final de la expresión,interrupted
cuando se detiene o interrumpe la expresión antes de llegar al final,cancelled
cuando se quita de la cola antes de sintetizarse oerror
cuando ocurre cualquier otro error. Cuando se pausa el discurso, se activa un eventopause
si se pausa una expresión en particular en el medio yresume
si se reanuda el discurso de una expresión. Ten en cuenta que es posible que no se activen los eventos de pausa y reanudación si se pausa el discurso entre las expresiones.
TtsOptions
Son las opciones de voz del motor de TTS.
Propiedades
-
desiredEventTypes
string[] opcional
Son los tipos de eventos de TTS que te interesa escuchar. Si falta, se pueden enviar todos los tipos de eventos.
-
enqueue
booleano opcional
Si es verdadero, pone en cola esta expresión si ya se está ejecutando la conversión de texto a voz. Si es falso (valor predeterminado), interrumpe cualquier discurso actual y vacía la cola de voz antes de pronunciar esta nueva expresión.
-
extensionId
cadena opcional
ID de extensión del motor de voz que se usará, si se conoce.
-
género
VoiceGender opcional
Obsoleto desde Chrome 77El 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 una 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 velocidad 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. Los valores inferiores a 0.1 o superiores a 10.0 están estrictamente prohibidos, pero muchas voces restringirán aún más las tasas mínimas y máximas. Por ejemplo, es posible que una voz en particular no hable más rápido que 3 veces la velocidad 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
cadena opcional
Nombre de la voz que se usará para la síntesis. Si está vacío, se usa cualquier voz disponible.
-
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.
-
onEvent
void optional
Se llama a esta función con los eventos que ocurren en el proceso de pronunciación de la expresión.
La función
onEvent
se ve de la siguiente manera:(event: TtsEvent) => {...}
-
evento
Es el evento de actualización del motor de texto a voz que indica el estado de esta expresión.
-
TtsVoice
Es la descripción de una voz disponible para la síntesis de voz.
Propiedades
-
eventTypes
EventType[] opcional
Son todos los tipos de eventos de devolución de llamada que esta voz puede enviar.
-
extensionId
cadena opcional
ID de la extensión que proporciona esta voz.
-
género
VoiceGender opcional
Obsoleto desde Chrome 70El género dejó de estar disponible y se ignorará.
Es el género de esta voz.
-
lang
cadena opcional
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 tener una latencia más alta y generar costos de ancho de banda.
-
voiceName
cadena opcional
El nombre de la voz.
VoiceGender
El género dejó de estar disponible y se ignora.
Enum
"male"
"female"
Métodos
getVoices()
chrome.tts.getVoices(): Promise<TtsVoice[]>
Obtiene un array de todas las voces disponibles.
Muestra
-
Promise<TtsVoice[]>
Chrome 101 y versiones posteriores
isSpeaking()
chrome.tts.isSpeaking(): Promise<boolean>
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
-
Promise<boolean>
Chrome 101 y versiones posteriores
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<void>
Habla texto con un motor de texto a voz.
Parámetros
-
expresión
string
Es el texto que se pronunciará, ya sea texto sin formato o un documento SSML completo y bien formado. Los motores de voz que no admiten SSML quitarán las etiquetas y leerán el texto. La longitud máxima del texto es de 32,768 caracteres.
-
opciones
TtsOptions opcional
Son las opciones de voz.
Muestra
-
Promise<void>
Chrome 101 y versiones posteriores
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.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