Web Speech API - Reconhecimento de fala em JavaScript
O reconhecimento de fala é gerenciado pelo objeto SpeechRecognition. Para acessá-lo, utiliza-se a propriedade webkitSpeechRecognition do objeto global window. Essa abordagem também pode ser usada para verificar se o navegador atual oferece suporte ao reconhecimento de fala:
if (window.webkitSpeechRecognition) {
console.log("Reconhecimento de fala é suportado.");
} else {
console.log("Reconhecimento de fala NÃO é suportado.");
}
// Outra forma de verificação
if ("webkitSpeechRecognition" in window) {
console.log("Reconhecimento de fala é suportado.");
} else {
console.log("Reconhecimento de fala NÃO é suportado.");
}O prefixo webkit indica que essa funcionalidade é suportada apenas em navegadores baseados no motor WebKit, como o Google Chrome e o Safari. Por isso, em tais navegadores, o reconhecimento é realizado com o objeto webkitSpeechRecognition, em vez de SpeechRecognition.
Configuração do SpeechRecognition
O SpeechRecognition oferece várias propriedades para configuração do reconhecimento:
grammars: define ou retorna uma coleção de objetosSpeechGrammar, que representam as gramáticas utilizadas.lang: define ou retorna o idioma para reconhecimento. Caso não especificado, utiliza o valor do atributolangdo elemento<html>.continuous: determina se os resultados devem ser contínuos (true) ou limitados a um único resultado (false).interimResults: define se resultados intermediários devem ser retornados (true) ou não (false).maxAlternatives: estabelece o número máximo de alternativas para cada resultado. O padrão é 1.
Métodos para Controle
O SpeechRecognition oferece os seguintes métodos para controle do reconhecimento:
abort(): interrompe o reconhecimento sem tentar retornar resultados.start(): inicia o reconhecimento.stop(): finaliza o reconhecimento e tenta retornar resultados baseados no áudio já capturado.
Eventos do Reconhecimento
O SpeechRecognition emite vários eventos durante o processo de reconhecimento. Os principais são:
audiostart: captura de áudio iniciado.audioend: captura de áudio finalizada.end: serviço de reconhecimento desligado.error: erro ocorrido.nomatch: resultado final não corresponde ao esperado.result: resultado retornado (palavra ou frase).soundstart: som detectado (ruído ou fala).soundend: detecção de som finalizada.speechstart: fala detectada.speechend: detecção de fala finalizada.start: início da escuta pelo serviço de reconhecimento.
Acessando os Resultados
Para acessar os resultados, é necessário adicionar um manipulador para o evento result. No exemplo abaixo, o evento fornece uma lista de resultados que podem ser explorados para acessar o texto reconhecido e o nível de confiança:
const recognition = new webkitSpeechRecognition();
recognition.onresult = function (event) {
const results = event.results; // Lista de resultados
const firstResult = results[0]; // Primeiro resultado
const firstAlternative = firstResult[0]; // Primeira alternativa
const transcript = firstAlternative.transcript; // Texto reconhecido
const confidence = firstAlternative.confidence; // Nível de confiança (0-1)
console.log(transcript);
console.log(confidence);
};Exemplo Prático
Abaixo está uma página de exemplo que demonstra o uso do SpeechRecognition:
<!DOCTYPE html>
<html lang="pt-BR">
<head>
<meta charset="utf-8" />
<title>Reconhecimento de Fala</title>
</head>
<body>
<button id="startBtn">Iniciar</button>
<button id="stopBtn">Parar</button>
<script>
const recognition = new webkitSpeechRecognition();
let index = 0;
recognition.onresult = function (event) {
const results = event.results;
const firstResult = results[index++];
const firstAlternative = firstResult[0];
const transcript = firstAlternative.transcript;
const confidence = firstAlternative.confidence;
console.log(transcript);
console.log(confidence);
};
document.getElementById("startBtn").addEventListener("click", () => {
if (window.webkitSpeechRecognition) {
recognition.continuous = true;
recognition.lang = "pt-BR"; // Define o idioma para português
recognition.start();
} else {
console.log("Reconhecimento de fala NÃO é suportado.");
}
});
document.getElementById("stopBtn").addEventListener("click", () => {
recognition.stop();
index = 0;
});
</script>
</body>
</html>Neste exemplo, ao clicar no botão Iniciar, o reconhecimento de fala em português é ativado, e os resultados são exibidos no console. O botão Parar interrompe o reconhecimento. Um contador index é utilizado para acessar resultados sucessivos, permitindo o gerenciamento adequado do evento result.
Ao iniciar o reconhecimento, o navegador solicitará permissão para usar o microfone. O usuário deve conceder acesso para que o reconhecimento funcione corretamente.

Documentação oficial: