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 contienen una expresión que se debe pronunciar y otros parámetros cuando cualquier extensión o app de Chrome use la API de tts para generar voz. Luego, tu extensión puede usar cualquier tecnología web disponible para sintetizar y generar el discurso, y enviar eventos de vuelta a la función de llamada para informar el estado.
Permisos
ttsEngineConceptos y uso
Una extensión puede registrarse 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, incluido el audio de transmisión
desde un servidor y el 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 permiso "ttsEngine" y, luego, todas las voces que proporciona en el manifiesto de la extensión, 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 que se usaron. En el caso poco probable de que dos extensiones registren voces
con el mismo nombre, un cliente puede especificar el ID de la extensión que debe 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 registrar fácilmente una voz independiente para cada uno. En las raras circunstancias en las que una sola voz puede
controlar más de un idioma, lo más fácil es enumerar dos voces separadas y controlarlas con
la misma lógica de forma interna. Sin embargo, si quieres crear una voz que controle las expresiones en cualquier
idioma, omite el parámetro lang del manifiesto de tu extensión.
Por último, el parámetro event_types es obligatorio si el motor puede enviar eventos para actualizar al cliente sobre el progreso de la síntesis de voz. Como mínimo, se recomienda admitir el tipo de evento 'end' para indicar cuándo finaliza la voz; de lo contrario, Chrome no puede programar las expresiones en cola.
Una vez cargada, una extensión puede reemplazar la lista de voces declaradas llamando a browser.ttsEngine.updateVoices. (Ten en cuenta que los parámetros que se usan en la llamada programática a 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 recibe el método
speak():
'start': El motor comenzó a pronunciar la expresión.'word': Se alcanzó un límite de palabra. Usaevent.charIndexpara determinar la posición actual de la voz.'sentence': Se alcanzó el límite de una oración. Usaevent.charIndexpara determinar la posición actual de la voz.'marker': Se alcanzó un marcador de SSML. Usaevent.charIndexpara determinar la posición actual de la voz.'end': El motor terminó de pronunciar el enunciado.'error': Se produjo un error específico del motor y no se puede pronunciar este enunciado. Pasa más información enevent.errorMessage.
El motor de voz no envía los eventos 'interrupted' ni 'cancelled', sino que Chrome los genera automáticamente.
Los clientes de texto a voz pueden obtener la información de voz del manifiesto de tu extensión llamando a tts.getVoices, siempre que hayas registrado 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 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)
};
browser.ttsEngine.onSpeak.addListener(speakListener);
browser.ttsEngine.onStop.addListener(stopListener);
La decisión de enviar o no una solicitud de voz determinada a una extensión se basa únicamente en
si la extensión admite los parámetros de voz dados en su manifiesto y tiene objetos de escucha registrados
para onSpeak y onStop. En otras palabras, no hay forma de que una extensión reciba una solicitud de voz y decida de forma dinámica si la controla.
Tipos
AudioBuffer
Son parámetros que contienen un búfer de audio y datos asociados.
Propiedades
-
audioBuffer
ArrayBuffer
Es el búfer de audio del motor de texto a voz. Debe tener una longitud exacta de audioStreamOptions.bufferSize y estar codificado como mono, en audioStreamOptions.sampleRate, y como PCM lineal, con un número de punto flotante de 32 bits con signo, es decir, el tipo Float32Array en JavaScript.
-
charIndex
number opcional
Es el índice de caracteres asociado a este búfer de audio.
-
isLastBuffer
booleano opcional
Es verdadero si este búfer de audio es el último para el texto que se está hablando.
AudioStreamOptions
Contiene el formato de transmisión de audio que se espera que produzca un motor.
Propiedades
-
bufferSize
número
Es la cantidad de muestras dentro de un búfer de audio.
-
sampleRate
número
Es la tasa de muestreo esperada en un búfer de audio.
LanguageInstallStatus
Es el estado de instalación de una voz.
Enum
"notInstalled"
"installing"
"installed"
"failed"
LanguageStatus
Es el estado de instalación de un idioma.
Propiedades
-
error
string opcional
Detalles sobre los errores de instalación. Se propaga de forma opcional si no se pudo instalar el idioma.
-
installStatus
Estado de la instalación
-
lang
string
Es la cadena de idioma en forma de código de idioma-código de región, donde se puede omitir la región. Algunos ejemplos son en, en-AU, zh-CH.
LanguageUninstallOptions
Son las opciones para desinstalar un idioma determinado.
Propiedades
-
uninstallImmediately
booleano
Es verdadero si el cliente de TTS quiere que el idioma se desinstale de inmediato. El motor puede elegir si desinstalar el idioma o cuándo hacerlo, según este parámetro y la información del solicitante. Si es falso, es posible que se usen otros criterios, como el uso reciente, para determinar cuándo desinstalar.
SpeakOptions
Son las opciones especificadas para el método tts.speak().
Propiedades
-
género
VoiceGender opcional
Obsoleto desde Chrome 92El género dejó de estar disponible y se ignorará.
Es el género de la voz para la voz sintetizada.
-
lang
string opcional
Es el idioma que se usará para la síntesis, en el formato idioma-región. Ejemplos: "en", "en-US", "en-GB", "zh-CN".
-
pitch
number opcional
Es el tono de voz, entre 0 y 2 inclusive, donde 0 es el más bajo y 2 es el más alto. El valor 1.0 corresponde al tono predeterminado de esta voz.
-
de conversiones
number opcional
Es la velocidad de habla en relación con la velocidad predeterminada para 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. Se garantiza que este valor esté entre 0.1 y 10.0, inclusive. Cuando una voz no admita este rango completo de velocidades, no devuelvas un error. En su lugar, recorta la velocidad al rango que admite la voz.
-
voiceName
string opcional
Es el nombre de la voz que se usará para la síntesis.
-
Volumen
number 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.
TtsClient
Es el identificador del cliente que solicita el estado.
Propiedades
-
id
string
Es el cliente que realiza una solicitud de administración de idiomas. En el caso de una extensión, este es el ID único de la extensión. En el caso de las funciones de Chrome, este es el nombre legible por humanos de la función.
-
source
Es el tipo de solicitante.
TtsClientSource
Es el tipo de solicitante.
Enum
"chromefeature"
"extension"
VoiceGender
El género dejó de estar disponible y se ignorará.
Enum
"male"
"female"
Métodos
updateLanguage()
browser.ttsEngine.updateLanguage(
status: LanguageStatus,
): void
Se llama por un motor cuando se intenta instalar un idioma y cuando se desinstala un idioma. También se llama en respuesta a una solicitud de estado de un cliente. Cuando se instala o desinstala una voz, el motor también debe llamar a ttsEngine.updateVoices para registrarla.
Parámetros
-
estado
Es el estado de instalación del idioma.
updateVoices()
browser.ttsEngine.updateVoices(
voices: TtsVoice[],
): void
Un motor lo llama para actualizar su lista de voces. Esta lista anula las voces declaradas en el manifiesto de esta extensión.
Parámetros
-
voces
TtsVoice[]
Es un array de objetos
tts.TtsVoiceque representan las voces disponibles para la síntesis de voz.
Eventos
onInstallLanguageRequest
browser.ttsEngine.onInstallLanguageRequest.addListener(
callback: function,
)
Se activa cuando un cliente de TTS solicita instalar un idioma nuevo. El motor debería intentar descargar e instalar el idioma, y llamar a ttsEngine.updateLanguage con el resultado. Si se ejecuta correctamente, el motor también debería llamar a ttsEngine.updateVoices para registrar las voces nuevas disponibles.
Parámetros
-
callback
función
El parámetro
callbackse ve de la siguiente manera:(requestor: TtsClient, lang: string) => void
-
solicitante
-
lang
string
-
onLanguageStatusRequest
browser.ttsEngine.onLanguageStatusRequest.addListener(
callback: function,
)
Se activa cuando un cliente de TTS solicita el estado de instalación de un idioma.
Parámetros
-
callback
función
El parámetro
callbackse ve de la siguiente manera:(requestor: TtsClient, lang: string) => void
-
solicitante
-
lang
string
-
onPause
browser.ttsEngine.onPause.addListener(
callback: function,
)
Opcional: Si un motor admite el evento de pausa, debe pausar la expresión actual que se está pronunciando, si la hay, hasta que reciba un evento de reanudación o de detención. Ten en cuenta que un evento de detención también debería borrar el estado de pausa.
Parámetros
-
callback
función
El parámetro
callbackse ve de la siguiente manera:() => void
onResume
browser.ttsEngine.onResume.addListener(
callback: function,
)
Opcional: Si un motor admite el evento de pausa, también debería admitir el evento de reanudación para seguir pronunciando la expresión actual, si la hay. Ten en cuenta que un evento de detención también debería borrar el estado de pausa.
Parámetros
-
callback
función
El parámetro
callbackse ve de la siguiente manera:() => void
onSpeak
browser.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 que coincide con el objeto de opciones.
Parámetros
-
callback
función
El parámetro
callbackse ve de la siguiente manera:(utterance: string, options: SpeakOptions, sendTtsEvent: function) => void
-
enunciado
string
-
opciones
-
sendTtsEvent
función
El parámetro
sendTtsEventse ve de la siguiente manera:(event: tts.TtsEvent) => void
-
evento
Es el evento del motor de texto a voz que indica el estado de este enunciado.
-
-
onSpeakWithAudioStream
browser.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 que coincide 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 de TTS.
Parámetros
-
callback
función
El parámetro
callbackse ve de la siguiente manera:(utterance: string, options: SpeakOptions, audioStreamOptions: AudioStreamOptions, sendTtsAudio: function, sendError: function) => void
-
enunciado
string
-
opciones
-
audioStreamOptions
-
sendTtsAudio
función
El parámetro
sendTtsAudiose ve de la siguiente manera:(audioBufferParams: AudioBuffer) => void
-
audioBufferParams
Son parámetros que contienen un búfer de audio y datos asociados.
-
-
sendError
función
Chrome 94 y versiones posteriores browser.* desde Chrome 148El parámetro
sendErrorse ve de la siguiente manera:(errorMessage?: string) => void
-
errorMessage
string opcional
Una cadena que describe el error.
-
-
onStop
browser.ttsEngine.onStop.addListener(
callback: function,
)
Se activa cuando se realiza una llamada a tts.stop y es posible que esta extensión esté en medio de una conversación. Si una extensión recibe una llamada a onStop y la voz ya se detuvo, no debería hacer nada (no generar un error). Si la voz está en estado de pausa, se debería cancelar ese estado.
Parámetros
-
callback
función
El parámetro
callbackse ve de la siguiente manera:() => void
onUninstallLanguageRequest
browser.ttsEngine.onUninstallLanguageRequest.addListener(
callback: function,
)
Se activa cuando un cliente de TTS indica que ya no se necesita un idioma.
Parámetros
-
callback
función
El parámetro
callbackse ve de la siguiente manera:(requestor: TtsClient, lang: string, uninstallOptions: LanguageUninstallOptions) => void
-
solicitante
-
lang
string
-
uninstallOptions
-