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 frase que se hablará y otros parámetros cuando cualquier extensión o app de Chrome use la API de tts
para generar voz. Luego, la extensión puede usar cualquier tecnología web disponible para sintetizar y emitir la voz, y enviar eventos a la función de llamada para informar el estado.
Permisos
ttsEngine
Conceptos y uso
Una extensión puede registrarse por sí misma 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 pueden usar cualquier tecnología web disponible para proporcionar voz, incluida la transmisión de audio
desde un servidor, 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 atributo "ttsEngine" permiso y, luego, declarar todos voces que proporciona en el manifiesto de extensiones, 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 improbable caso 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. Casi siempre, una voz puede sintetizar
la voz en un solo idioma. Cuando un motor admite más de un idioma, puede
una voz independiente para cada idioma. En raras ocasiones, cuando una sola voz puede
manejar más de un idioma, es más fácil enumerar dos voces distintas y manejarlas usando
la misma lógica internamente. Sin embargo, si deseas crear una voz que se encargue de las declaraciones en cualquier
idioma, omite el parámetro lang
del manifiesto de tu extensión.
Por último, se requiere el parámetro event_types
si el motor puede enviar eventos para actualizar el cliente
sobre el progreso de la síntesis de voz. Como mínimo, debes admitir el tipo de evento 'end'
para indicar
cuando finaliza la voz es muy recomendable. De lo contrario, Chrome no podrá programar las declaraciones en cola.
Una vez cargada, la extensión puede reemplazar la lista de voces declaradas llamando
chrome.ttsEngine.updateVoices
Ten en cuenta que los parámetros que se usan en la llamada programática para
updateVoices
están en mayúsculas mediales: p.ej., voiceName
, a diferencia del archivo de manifiesto, que usa
voice_name
).
Los posibles tipos de eventos que puedes enviar corresponden a los tipos de eventos que el método speak()
recibe:
'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.'error'
: se produjo un error específico del motor y no se puede pronunciar esta declaración. Pasar más información enevent.errorMessage
.
El motor de voz no envía los eventos 'interrupted'
y 'cancelled'
. se generan
automáticamente.
Los clientes de texto a voz pueden obtener la información de voz del manifiesto de tu extensión llamando
tts.getVoices
, suponiendo que registraste objetos de escucha de eventos de voz como se describe a continuación.
Cómo controlar eventos de voz
Para generar voz a pedido de los clientes, tu extensión debe registrar objetos de escucha para ambos
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 determinada solicitud de voz a una extensión se basa únicamente en
si la extensión admite los parámetros de voz indicados en su manifiesto y se registró
objetos de escucha para onSpeak
y onStop
. En otras palabras, no hay forma de que una extensión reciba una
una solicitud de voz y decidir
de forma dinámica si la manejará o no.
Tipos
AudioBuffer
Parámetros que contienen un búfer de audio y los datos asociados.
Propiedades
-
audioBuffer
ArrayBuffer
El búfer de audio del motor de texto a voz. Debería tener una longitud exacta de audioStreamOptions.bufferSize y codificada como mono, en audioStreamOptions.sampleRate, y como PCM lineal, flotante de 32 bits con firma, 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 para el texto que se pronuncia.
AudioStreamOptions
Contiene el formato de transmisión de audio que se espera que produzca un motor.
Propiedades
-
bufferSize
número
La cantidad de muestras dentro de un búfer de audio.
-
sampleRate
número
La tasa de muestreo esperada en un búfer de audio.
SpeakOptions
Opciones especificadas para el método tts.speak().
Propiedades
-
género
VoiceGender opcional
Obsoleto desde Chrome 92Gé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 esta 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. Se garantiza que este valor esté entre 0.1 y 10.0, inclusive. Si una voz no admite este rango completo de tarifas, no muestres un error. En su lugar, recorta la velocidad según el rango que admita la voz.
-
voiceName
string opcional
Es el nombre de la voz que se usará para la síntesis.
-
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.
VoiceGender
Género ya no está disponible y se ignorará.
Enum
“hombre”
“mujer”
Métodos
updateVoices()
chrome.ttsEngine.updateVoices(
voices: TtsVoice[],
)
Lo llama un motor para actualizar su lista de voces. Esta lista anula cualquier voz declarada en el manifiesto de esta extensión.
Parámetros
-
voces
TtsVoice[]
Es el 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 la frase que se está pronunciando, si la hay, hasta recibir 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
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 continuar hablando de la declaración actual, si la hubiera. Ten en cuenta que un evento de detención también debe borrar el estado de pausa.
Parámetros
-
callback
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 realiza una llamada 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
función
El parámetro
callback
se ve de la siguiente manera:(utterance: string, options: SpeakOptions, sendTtsEvent: function) => void
-
declaración
string
-
opciones
-
sendTtsEvent
función
El parámetro
sendTtsEvent
se ve de la siguiente manera:(event: tts.TtsEvent) => void
-
evento
El evento del motor de texto a voz que indica el estado de esta declaración.
-
-
onSpeakWithAudioStream
chrome.ttsEngine.onSpeakWithAudioStream.addListener(
callback: function,
)
Se llama cuando el usuario realiza una llamada 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 tts.
Parámetros
-
callback
función
El parámetro
callback
se ve de la siguiente manera:(utterance: string, options: SpeakOptions, audioStreamOptions: AudioStreamOptions, sendTtsAudio: function, sendError: function) => void
-
declaración
string
-
opciones
-
audioStreamOptions
-
sendTtsAudio
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 los datos asociados.
-
-
sendError
función
Chrome 94 y versiones posterioresEl parámetro
sendError
se ve de la siguiente manera:(errorMessage?: string) => void
-
errorMessage
string opcional
Es una cadena que describe el error.
-
-
onStop
chrome.ttsEngine.onStop.addListener(
callback: function,
)
Se activa cuando se hace una llamada a tts.stop y es posible que esta extensión esté hablando. Si una extensión recibe una llamada a onStop y la voz ya se detuvo, no debe hacer nada (no generar un error). Si la voz está pausada, esta acción debería cancelarse.
Parámetros
-
callback
función
El parámetro
callback
se ve de la siguiente manera:() => void