Descrição
Use a API chrome.ttsEngine
para implementar um mecanismo de conversão de texto em voz(TTS) usando uma extensão. Se a extensão for registrada usando essa API, ela receberá eventos com um enunciado a ser falado e outros parâmetros quando qualquer extensão ou app do Chrome usar a API tts
para gerar voz. A extensão poderá usar qualquer tecnologia da Web disponível para sintetizar e gerar a fala e enviar eventos de volta à função de chamada para informar o status.
Permissões
ttsEngine
Conceitos e uso
Uma extensão pode se registrar como um mecanismo de fala. Ao fazer isso, ele pode interceptar algumas ou todas as chamadas
a funções como tts.speak()
e tts.stop()
, além de fornecer uma implementação alternativa.
As extensões podem usar qualquer tecnologia da Web disponível para fornecer voz, incluindo streaming de áudio
a partir de um servidor, áudio HTML5. Uma extensão pode até fazer algo diferente
com os enunciados, como exibir legendas em pop-up ou enviá-los como mensagens de registro
um servidor remoto.
Para implementar um mecanismo TTS, uma extensão deve declarar o mecanismo "ttsEngine" a permissão e, em seguida, declarar todas que são fornecidas no manifesto da extensão, da seguinte forma:
{
"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
}
}
Uma extensão pode especificar qualquer número de vozes.
O parâmetro voice_name
é obrigatório. O nome deve ser descritivo o suficiente para identificar
o nome da voz e do mecanismo usado. No caso improvável de duas extensões registrarem vozes
com o mesmo nome, um cliente pode especificar o ID da extensão que fará a síntese.
O parâmetro lang
é opcional, mas altamente recomendado. Quase sempre, uma voz pode sintetizar
fala em um único idioma. Quando um mecanismo aceita mais de um idioma, ele pode facilmente
registrar uma voz separada para cada idioma. Em raras circunstâncias em que uma única voz pode
lidar com mais de um idioma, é mais fácil listar duas vozes separadas e lidar com elas usando
a mesma lógica internamente. No entanto, se você quiser criar uma voz para lidar com enunciados de qualquer
desconsidere o parâmetro lang
do manifesto da sua extensão.
Por fim, o parâmetro event_types
será obrigatório se o mecanismo puder enviar eventos para atualizar o cliente.
sobre o progresso da síntese de fala. No mínimo, oferecendo suporte ao tipo de evento 'end'
para indicar
quando a fala é concluída é altamente recomendado. Caso contrário, o Chrome não pode programar falas na fila.
Depois de carregada, uma extensão pode substituir a lista de vozes declaradas chamando
chrome.ttsEngine.updateVoices
: Os parâmetros usados na chamada programática para
updateVoices
estão em letras concatenadas: por exemplo, voiceName
, ao contrário do arquivo de manifesto, que usa
voice_name
.
Os tipos de evento possíveis que você pode enviar correspondem aos tipos de evento que o método speak()
recebe:
'start'
: o mecanismo começou a falar o enunciado.'word'
: um limite de palavras foi atingido. Usarevent.charIndex
para determinar a fala atual posição'sentence'
: um limite de frases foi atingido. Useevent.charIndex
para determinar o na posição da fala.'marker'
: um marcador SSML foi atingido. Usarevent.charIndex
para determinar a fala atual posição'end'
: o mecanismo terminou de falar o enunciado.'error'
: ocorreu um erro específico do mecanismo, e este enunciado não pode ser falado. Passar mais informações emevent.errorMessage
.
Os eventos 'interrupted'
e 'cancelled'
não são enviados pelo mecanismo de fala. eles são gerados
automaticamente pelo Chrome.
Os clientes de conversão de texto em voz podem receber as informações de voz do manifesto da sua extensão chamando
tts.getVoices
, supondo que você tenha registrado listeners de eventos de fala conforme descrito abaixo.
Processar eventos de fala
Para gerar fala a pedido dos clientes, sua extensão precisa registrar listeners para ambos
onSpeak
e onStop
, assim:
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);
A decisão de enviar ou não uma determinada solicitação de fala a uma extensão é baseada apenas no
se a extensão é compatível com os parâmetros de voz fornecidos em seu manifesto e se registrou
listeners para onSpeak
e onStop
. Em outras palavras, uma extensão não pode receber uma
solicitação de fala
e decide dinamicamente se vai processá-la.
Tipos
AudioBuffer
Parâmetros que contêm um buffer de áudio e dados associados.
Propriedades
-
audioBuffer
ArrayBuffer
O buffer de áudio do mecanismo de conversão de texto em voz. Ele precisa ter o comprimento audioStreamOptions.bufferSize e codificado como mono, em audioStreamOptions.sampleRate, e como um ponto flutuante com sinal linear em pcm e de 32 bits, ou seja, o tipo Float32Array em JavaScript.
-
charIndex
número opcional
O índice de caracteres associado a este buffer de áudio.
-
isLastBuffer
booleano opcional
Verdadeiro se esse buffer de áudio for o último texto falado.
AudioStreamOptions
Contém o formato de stream de áudio que deve ser produzido por um mecanismo.
Propriedades
-
bufferSize
number
O número de amostras em um buffer de áudio.
-
sampleRate
number
A taxa de amostragem esperada em um buffer de áudio.
SpeakOptions
Opções especificadas para o método tts.speak().
Propriedades
-
gênero
VoiceGender opcional
Descontinuado desde o Chrome 92O gênero foi descontinuado e será ignorado.
Gênero de voz para fala sintetizada.
-
lang
string opcional
O idioma a ser usado para síntese, no formato idioma-região. Exemplos: "en", "en-US", "en-GB", "zh-CN".
-
pitch
número opcional
Tom de fala entre 0 e 2, sendo 0 o menor e 2 o mais alto. 1,0 corresponde ao tom padrão dessa voz.
-
taxa
número opcional
Velocidade da fala em relação à taxa padrão para esta voz. 1,0 é a taxa padrão, normalmente em torno de 180 a 220 palavras por minuto. 2,0 é duas vezes mais rápido e 0,5 é metade da velocidade nativa. Esse valor está entre 0,1 e 10,0. Quando uma voz não for compatível com essa faixa completa de taxas, não retorne um erro. Em vez disso, corte a taxa de acordo com o intervalo compatível com a voz.
-
voiceName
string opcional
O nome da voz a ser usada para síntese.
-
volume
número opcional
Volume de fala entre 0 e 1, sendo 0 o menor e 1 o mais alto, com um padrão de 1,0.
VoiceGender
O gênero foi descontinuado e será ignorado.
Enumeração
"masculino"
"feminino"
Métodos
updateVoices()
chrome.ttsEngine.updateVoices(
voices: TtsVoice[],
)
Chamado por um mecanismo para atualizar a lista de vozes. Esta lista substitui todas as vozes declaradas no manifesto desta extensão.
Parâmetros
-
vozes
TtsVoice[]
Matriz de objetos
tts.TtsVoice
que representam as vozes disponíveis para síntese de fala.
Eventos
onPause
chrome.ttsEngine.onPause.addListener(
callback: function,
)
Opcional: se um mecanismo oferecer suporte ao evento de pausa, ele deverá pausar o enunciado atual, se houver, até receber um evento de retomada ou de interrupção. Um evento de parada também deve limpar o estado de pausa.
Parâmetros
-
callback
função
O parâmetro
callback
tem esta aparência:() => void
onResume
chrome.ttsEngine.onResume.addListener(
callback: function,
)
Opcional: se um mecanismo oferecer suporte ao evento de pausa, ele também vai oferecer suporte ao evento de retomada para continuar falando o enunciado atual, se houver. Um evento de parada também deve limpar o estado de pausa.
Parâmetros
-
callback
função
O parâmetro
callback
tem esta aparência:() => void
onSpeak
chrome.ttsEngine.onSpeak.addListener(
callback: function,
)
Chamado quando o usuário faz uma chamada para tts.speak() e uma das vozes do manifesto dessa extensão é a primeira a corresponder ao objeto de opções.
Parâmetros
-
callback
função
O parâmetro
callback
tem esta aparência:(utterance: string, options: SpeakOptions, sendTtsEvent: function) => void
-
enunciado
string
-
opções
-
sendTtsEvent
função
O parâmetro
sendTtsEvent
tem esta aparência:(event: tts.TtsEvent) => void
-
evento
O evento do mecanismo de conversão de texto em voz que indica o status dessa fala.
-
-
onSpeakWithAudioStream
chrome.ttsEngine.onSpeakWithAudioStream.addListener(
callback: function,
)
Chamado quando o usuário faz uma chamada para tts.speak() e uma das vozes do manifesto dessa extensão é a primeira a corresponder ao objeto de opções. Difere de ttsEngine.onSpeak porque o Google Chrome fornece serviços de reprodução de áudio e manipula o envio de eventos tts.
Parâmetros
-
callback
função
O parâmetro
callback
tem esta aparência:(utterance: string, options: SpeakOptions, audioStreamOptions: AudioStreamOptions, sendTtsAudio: function, sendError: function) => void
-
enunciado
string
-
opções
-
audioStreamOptions
-
sendTtsAudio
função
O parâmetro
sendTtsAudio
tem esta aparência:(audioBufferParams: AudioBuffer) => void
-
audioBufferParams
Parâmetros que contêm um buffer de áudio e dados associados.
-
-
sendError
função
Chrome 94 ou versão mais recenteO parâmetro
sendError
tem esta aparência:(errorMessage?: string) => void
-
errorMessage
string opcional
String que descreve o erro.
-
-
onStop
chrome.ttsEngine.onStop.addListener(
callback: function,
)
Disparado quando uma chamada é feita para tts.stop, e esta extensão pode estar durante uma fala. Se uma extensão receber uma chamada para onStop e a fala já tiver sido interrompida, ela não deverá fazer nada (não gerar um erro). Se a fala estiver no estado pausado, isso cancelará o estado pausado.
Parâmetros
-
callback
função
O parâmetro
callback
tem esta aparência:() => void