Atualizado: 07/12/2024

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);
    }
}
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