Atualizado: 21/06/2025

Este conteúdo é original e não foi gerado por inteligência artificial.

Web Speech API - Síntese de fala em JavaScript

A Web Speech API permite que desenvolvedores web gerem e reconheçam fala de forma programática em páginas web. Ela define dois principais interfaces: SpeechRecognition (para reconhecimento de fala) e SpeechSynthesis (para síntese de fala). No momento da escrita deste artigo, a Web Speech API ainda não é um padrão oficial do W3C, e sua compatibilidade pode variar entre navegadores. Aqui, exploraremos o recurso de síntese de fala.

A síntese de fala está disponível no navegador por meio da propriedade speechSynthesis do objeto window, que representa a interface SpeechSynthesis. Para verificar se o navegador suporta essa funcionalidade, use o seguinte código:

if (window.speechSynthesis) {
  console.log("A síntese de fala é suportada.");
} else {
  console.log("A síntese de fala NÃO é suportada.");
}

// Alternativamente:
if ("speechSynthesis" in window) {
  console.log("A síntese de fala é suportada.");
} else {
  console.log("A síntese de fala NÃO é suportada.");
}

Criando e configurando a fala

A síntese de fala é realizada usando o objeto SpeechSynthesisUtterance, que representa uma declaração individual e permite configurar propriedades como:

  • lang: define o idioma da fala.
  • pitch: ajusta a altura do som.
  • rate: controla a velocidade da fala.
  • text: define o texto que será sintetizado.
  • voice: seleciona a voz usada na fala.
  • volume: ajusta o volume da fala.

Por exemplo, para gerar uma fala básica, basta configurar o texto:

const utterance = new SpeechSynthesisUtterance();
utterance.text = "Hello World";

A execução da fala e seu controle são realizados pelos métodos da interface SpeechSynthesis, incluindo:

  • cancel(): remove todas as declarações da fila.
  • getVoices(): retorna uma lista das vozes disponíveis no dispositivo.
  • pause(): pausa a síntese em andamento.
  • resume(): retoma a síntese pausada.
  • speak(): adiciona uma declaração à fila para ser sintetizada.

Um exemplo prático de síntese em um formulário HTML seria:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <title>Síntese de Fala</title>
  </head>
  <body>
    <input id="text" value="Hello World" />
    <button id="btn">Falar</button>
    <script>
      document.getElementById("btn").addEventListener("click", speak);

      function speak() {
        if (window.speechSynthesis) {
          const utterance = new SpeechSynthesisUtterance();
          utterance.text = document.getElementById("text").value;
          window.speechSynthesis.speak(utterance);
        } else {
          console.log("A funcionalidade não é suportada.");
        }
      }
    </script>
  </body>
</html>

Neste caso, o texto inserido no campo será sintetizado ao clicar no botão. Alguns navegadores, como o Google Chrome, podem impor restrições exigindo que a síntese seja ativada apenas por uma ação do usuário, como um clique em botão.

Personalizando configurações de fala

É possível personalizar a fala ajustando as propriedades:

document.getElementById("btn").addEventListener("click", speak);

function speak() {
  if (window.speechSynthesis) {
    const utterance = new SpeechSynthesisUtterance();
    utterance.text = "Olá";
    utterance.lang = "pt-BR";
    utterance.volume = 0.7; // Volume da fala (0.0 a 1.0)
    utterance.rate = 1.0; // Velocidade da fala (0.1 a 10.0)
    utterance.pitch = 1.2; // Altura da voz (0.0 a 2.0)
    window.speechSynthesis.speak(utterance);
  }
}

Seleção de vozes disponíveis

O navegador pode oferecer várias opções de vozes, que podem ser acessadas usando o método getVoices(). Cada voz possui atributos como nome e idioma:

const voices = window.speechSynthesis.getVoices();
voices.forEach((voice) => {
  console.log(voice.name);
  console.log(voice.lang);
});

Após identificar a voz desejada, ela pode ser configurada na propriedade voice do objeto SpeechSynthesisUtterance:

document.getElementById("btn").addEventListener("click", speak);

function speak() {
  if (window.speechSynthesis) {
    const utterance = new SpeechSynthesisUtterance();
    utterance.text = "Olá";
    const voices = window.speechSynthesis.getVoices();
    utterance.voice = voices[0]; // Seleciona a primeira voz
    window.speechSynthesis.speak(utterance);
  }
}

Eventos de síntese de fala

Durante a síntese de fala, vários eventos podem ser disparados para monitorar ou controlar o processo:

  • boundary: acionado ao alcançar limites de palavras ou frases.
  • end: acionado ao final da fala.
  • error: acionado em caso de erro.
  • mark: acionado ao alcançar uma marca nomeada no SSML.
  • pause: acionado quando a fala é pausada.
  • resume: acionado ao retomar a fala.
  • start: acionado ao iniciar a fala.

Por exemplo, para capturar os eventos de início e término da fala:

document.getElementById("btn").addEventListener("click", speak);

function speak() {
  if (window.speechSynthesis) {
    const utterance = new SpeechSynthesisUtterance();
    utterance.text = "Olá";
    utterance.onstart = () => console.log("Início da fala.");
    utterance.onend = () => console.log("Fim da fala.");
    window.speechSynthesis.speak(utterance);
  }
}

Documentação oficial:

Política de Privacidade

Copyright © www.programicio.com Todos os direitos reservados

É proibida a reprodução do conteúdo desta página sem autorização prévia do autor.

Contato: programicio@gmail.com