Descrição
Use a API chrome.tts
para reproduzir a conversão de texto em voz (TTS) sintetizada. Consulte também a API ttsEngine
relacionada, que permite que uma extensão implemente um mecanismo de fala.
O Chrome oferece essa capacidade no Windows (usando SAPI 5), Mac OS X e ChromeOS, usando recursos de síntese de voz fornecidos pelo sistema operacional. Em todas as plataformas, o usuário pode instalar extensões que se registram como mecanismos de fala alternativos.
Permissões
tts
Conceitos e uso
Gerar fala
Chame speak()
na sua extensão para falar. Exemplo:
chrome.tts.speak('Hello, world.');
Para parar de falar imediatamente, chame stop()
:
chrome.tts.stop();
Você pode fornecer opções que controlam várias propriedades da fala, como taxa, tom e muito mais. Exemplo:
chrome.tts.speak('Hello, world.', {'rate': 2.0});
Também é uma boa ideia especificar o idioma para que um sintetizador compatível com ele (e com o dialeto regional, se aplicável) seja escolhido.
chrome.tts.speak('Hello, world.', {'lang': 'en-US', 'rate': 2.0});
Por padrão, cada chamada para speak()
interrompe qualquer fala em andamento e fala imediatamente. Para determinar se uma ligação interromperia algo, chame isSpeaking()
. Além disso, você pode usar a opção enqueue
para adicionar a expressão a uma fila de expressões que serão faladas quando a atual terminar.
chrome.tts.speak('Speak this first.'); chrome.tts.speak( 'Speak this next, when the first sentence is done.', {'enqueue': true});
Uma descrição completa de todas as opções pode ser encontrada em tts.speak()
. Nem todos os mecanismos de fala oferecem suporte a todas as opções.
Para detectar erros e garantir que você está chamando speak()
corretamente, transmita uma função de callback que não receba argumentos. Dentro do callback, verifique runtime.lastError
para saber se houve erros.
chrome.tts.speak( utterance, options, function() { if (chrome.runtime.lastError) { console.log('Error: ' + chrome.runtime.lastError.message); } } );
O callback retorna imediatamente, antes que o mecanismo comece a gerar a fala. A finalidade do callback é alertar sobre erros de sintaxe no uso da API TTS, não detectar todos os possíveis erros que podem ocorrer no processo de síntese e saída de fala. Para capturar esses erros também, use um listener de eventos, descrito na próxima seção.
Detectar eventos
Para receber mais informações em tempo real sobre o status da fala sintetizada, transmita um listener de eventos nas opções para speak()
, assim:
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 inclui um tipo de evento, o índice de caracteres da fala atual em relação à expressão e, para eventos de erro, uma mensagem de erro opcional. Os tipos de evento são:
'start'
: o mecanismo começou a falar a expressão.'word'
: um limite de palavra foi atingido. Useevent.charIndex
para determinar a posição atual da fala.'sentence'
: um limite de frase foi atingido. Useevent.charIndex
para determinar a posição atual da fala.'marker'
: um marcador SSML foi alcançado. Useevent.charIndex
para determinar a posição atual da fala.'end'
: o mecanismo terminou de falar a frase.'interrupted'
: a declaração foi interrompida por outra chamada paraspeak()
oustop()
e não foi concluída.'cancelled'
: essa declaração foi colocada na fila, mas cancelada por outra chamada paraspeak()
oustop()
e nunca começou a ser falada.'error'
: ocorreu um erro específico do mecanismo, e a expressão não pode ser falada. Confiraevent.errorMessage
para mais detalhes.
Quatro dos tipos de eventos ('end'
, 'interrupted'
, 'cancelled'
e 'error'
) são finais. Depois que um desses eventos for recebido, a expressão não será mais falada e nenhum novo evento dela será recebido.
Algumas vozes podem não ser compatíveis com todos os tipos de eventos, e algumas podem não enviar nenhum evento. Se você não quiser usar uma voz a menos que ela envie determinados eventos, transmita os eventos necessários no membro requiredEventTypes
do objeto de opções ou use getVoices()
para escolher uma voz que atenda aos seus requisitos. Ambos são descritos a seguir.
Marcação SSML
As frases usadas nessa API podem incluir marcação usando a Linguagem de marcação de síntese de fala (SSML). Se você usar SSML, o primeiro argumento de speak()
precisa ser um documento SSML completo com um cabeçalho XML e uma tag <speak>
de nível superior, não um fragmento de documento.
Exemplo:
chrome.tts.speak( '<?xml version="1.0"?>' + '<speak>' + ' The <emphasis>second</emphasis> ' + ' word of this sentence was emphasized.' + '</speak>' );
Nem todos os mecanismos de fala são compatíveis com todas as tags SSML, e alguns podem não ser compatíveis com SSML. No entanto, todos os mecanismos precisam ignorar qualquer SSML que não seja compatível e ainda falar o texto subjacente.
Escolha uma voz
Por padrão, o Chrome escolhe a voz mais adequada para cada frase que você quer falar, com base no idioma. Na maioria dos sistemas Windows, Mac OS X e ChromeOS, a síntese de voz fornecida pelo sistema operacional consegue falar qualquer texto em pelo menos um idioma. Alguns usuários podem ter uma variedade de vozes disponíveis no sistema operacional e nos mecanismos de fala implementados por outras extensões do Chrome. Nesses casos, é possível implementar um código personalizado para escolher a voz adequada ou apresentar ao usuário uma lista de opções.
Para receber uma lista de todas as vozes, chame getVoices()
e transmita uma função que receba uma matriz 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
Enumeração
"start"
"end"
"word"
"sentence"
"marker"
"interrupted"
"cancelled"
"error"
"pause"
"resume"
TtsEvent
Um evento do mecanismo TTS para comunicar o status de uma expressão.
Propriedades
- charIndex
number optional
O índice do caractere atual na expressão. Para eventos de palavras, o evento é acionado no final de uma palavra e antes do início da próxima. O
charIndex
representa um ponto no texto no início da próxima palavra a ser falada. - errorMessage
string opcional
A descrição do erro, se o tipo de evento for
error
. - comprimento
number optional
Chrome 74 ou mais recenteO tamanho da próxima parte da expressão. Por exemplo, em um evento
word
, esse é o comprimento da palavra que será falada em seguida. Ele será definido como -1 se não for definido pelo mecanismo de fala. - tipo
O tipo pode ser
start
assim que a fala começa,word
quando um limite de palavra é alcançado,sentence
quando um limite de frase é alcançado,marker
quando um elemento de marcação SSML é alcançado,end
quando o fim da expressão é alcançado,interrupted
quando a expressão é interrompida antes de chegar ao fim,cancelled
quando é removida da fila antes de ser sintetizada ouerror
quando ocorre qualquer outro erro. Ao pausar a fala, um eventopause
é acionado se uma determinada expressão for pausada no meio, eresume
se uma expressão retomar a fala. Os eventos de pausa e retomada podem não ser acionados se a fala for pausada entre as frases.
TtsOptions
As opções de fala para o mecanismo de TTS.
Propriedades
- desiredEventTypes
string[] opcional
Os tipos de eventos de TTS que você quer ouvir. Se estiver faltando, todos os tipos de evento poderão ser enviados.
- enqueue
booleano opcional
Se for verdadeiro, enfileira essa expressão se a TTS já estiver em andamento. Se for "false" (o padrão), interrompe qualquer fala atual e limpa a fila de fala antes de falar essa nova expressão.
- extensionId
string opcional
O ID da extensão do mecanismo de fala a ser usado, se conhecido.
- gênero
VoiceGender opcional
Suspensas desde o Chrome 77O gênero foi descontinuado e será ignorado.
Gênero da 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
number optional
Tom de voz entre 0 e 2, sendo 0 o mais baixo e 2 o mais alto. 1,0 corresponde ao tom padrão de uma voz.
- taxa
number optional
Taxa de fala relativa à taxa padrão dessa voz. 1,0 é a taxa padrão, normalmente entre 180 e 220 palavras por minuto. 2,0 é duas vezes mais rápido e 0,5 é metade da velocidade nativa. Valores abaixo de 0,1 ou acima de 10,0 são estritamente proibidos, mas muitas vozes restringem ainda mais as taxas mínima e máxima. Por exemplo, uma voz específica pode não falar mais rápido do que três vezes o normal, mesmo que você especifique um valor maior que 3,0.
- requiredEventTypes
string[] opcional
Os tipos de eventos de TTS que a voz precisa oferecer suporte.
- voiceName
string opcional
O nome da voz a ser usada para síntese. Se estiver vazio, vai usar qualquer voz disponível.
- volume
number optional
Volume da fala entre 0 e 1, sendo 0 o mais baixo e 1 o mais alto, com um padrão de 1,0.
- onEvent
void optional
Essa função é chamada com eventos que ocorrem no processo de fala da expressão.
A função
onEvent
é assim:(event: TtsEvent) => {...}
- evento
O evento de atualização do mecanismo de conversão de texto em voz que indica o status dessa declaração.
-
TtsVoice
Uma descrição de uma voz disponível para síntese de voz.
Propriedades
- eventTypes
EventType[] opcional
Todos os tipos de eventos de callback que essa voz pode enviar.
- extensionId
string opcional
O ID da extensão que fornece essa voz.
- gênero
VoiceGender opcional
Suspensas desde o Chrome 70O gênero foi descontinuado e será ignorado.
O gênero desta voz.
- lang
string opcional
O idioma compatível com essa voz, no formato idioma-região. Exemplos: "en", "en-US", "en-GB", "zh-CN".
- controle remoto
booleano opcional
Se for verdadeiro, o mecanismo de síntese será um recurso de rede remota. Pode haver maior latência e custos de largura de banda.
- voiceName
string opcional
Nome da voz.
VoiceGender
O gênero foi descontinuado e é ignorado.
Enumeração
"male"
"female"
Métodos
getVoices()
chrome.tts.getVoices(): Promise<TtsVoice[]>
Recebe uma matriz de todas as vozes disponíveis.
Retorna
-
Promise<TtsVoice[]>
Chrome 101 ou mais recente
isSpeaking()
chrome.tts.isSpeaking(): Promise<boolean>
Verifica se o mecanismo está falando no momento. No Mac OS X, o resultado é verdadeiro sempre que o mecanismo de fala do sistema está falando, mesmo que a fala não tenha sido iniciada pelo Chrome.
Retorna
-
Promise<boolean>
Chrome 101 ou mais recente
pause()
chrome.tts.pause(): void
Pausa a síntese de voz, possivelmente no meio de uma expressão. Uma chamada para retomar ou parar vai remover a pausa da fala.
resume()
chrome.tts.resume(): void
Se a fala foi pausada, ela é retomada de onde parou.
speak()
chrome.tts.speak(
utterance: string,
options?: TtsOptions,
): Promise<void>
Fala texto usando um mecanismo de conversão de texto em voz.
Parâmetros
- enunciado
string
O texto a ser falado, seja texto simples ou um documento SSML completo e bem formado. Os mecanismos de fala que não são compatíveis com SSML removem as tags e falam o texto. O tamanho máximo do texto é de 32.768 caracteres.
- opções
TtsOptions opcional
As opções de fala.
Retorna
-
Promise<void>
Chrome 101 ou mais recente
stop()
chrome.tts.stop(): void
Interrompe a fala atual e limpa a fila de expressões pendentes. Além disso, se a fala estiver pausada, ela será retomada para a próxima chamada.
Eventos
onVoicesChanged
chrome.tts.onVoicesChanged.addListener(
callback: function,
)
Chamado quando a lista de tts.TtsVoice
que seria retornada por getVoices muda.
Parâmetros
- callback
função
O parâmetro
callback
tem esta aparência:() => void