Ferramentas · No ar

Piper TTS

Texto vira voz neural, sem sair do seu navegador.

Texto para voz em português do Brasil com o Piper rodando no navegador (WebAssembly): vozes melhores que a do sistema e nenhum texto enviado a servidor.

Sobre o projeto

O que é Piper TTS

O Piper TTS transforma texto em fala com vozes neurais em português do Brasil. O Piper é um motor de síntese de voz de código aberto, baseado na arquitetura VITS e feito para rodar rápido em máquinas modestas. Aqui ele roda dentro do navegador, em WebAssembly: o texto vira fonemas, passa pelo modelo e sai como áudio no seu computador ou celular, sem passar por servidor nenhum.

Você escolhe entre 5 vozes (Faber, Cadu, Jeff, Edresson, Dii), ajusta a velocidade, a expressividade e a pausa entre as frases, ouve a fala começar enquanto o resto ainda é gerado e baixa o resultado em WAV. Um botão compara com a voz padrão do sistema. Cada voz tem cerca de 63 MB e é baixada uma vez só: depois fica guardada no navegador.

O motor é um módulo reutilizável (piper-tts.js, com um tocador à parte): o mesmo código dá a voz do locutor da Rádio No Ar, outro projeto deste portfólio, e pode ser copiado para qualquer página.

Recursos

O que o Piper TTS faz

Vozes neurais em pt-BR

5 vozes, de tom grave a agudo, com a licença de cada uma à vista. A Dii é a voz feminina.

O texto não sai do navegador

A fonetização, o modelo e o áudio rodam no seu aparelho. O servidor só conta, de forma anônima, quantas falas foram geradas.

Começa a falar antes de acabar

O texto é cortado em frases: a primeira toca enquanto a segunda é gerada, e assim por diante, sem esperar o texto inteiro.

Rápido sem placa de vídeo

Na medição feita para este projeto, no Chrome de um computador, 8 segundos de fala saíram em cerca de 3 segundos. O tempo muda de aparelho para aparelho.

Ajustes de voz

Velocidade de 0,5x a 2x, expressividade, variação de ritmo e pausa entre as frases, além do volume.

Compare com a voz do sistema

Um botão fala o mesmo texto com a voz padrão do seu aparelho, para você ouvir a diferença.

WAV para levar

Baixe a fala em WAV de 16 bits, mono, para usar num vídeo, numa apresentação ou num aviso.

Baixa uma vez só

Motor e voz somam uns 93 MB na primeira vez. Depois a voz fica guardada no navegador, e a tela mostra quais já estão e deixa remover.

Voz conferida

O arquivo da voz vem de uma revisão fixa do repositório e só é aceito se a soma de verificação (SHA-256) for a esperada.

Tecnologias

Por dentro do Piper TTS

WebAssembly: espeak-ng e ONNX Runtime

O espeak-ng, compilado para WebAssembly, transforma o texto em fonemas. O onnxruntime-web executa o modelo VITS em formato ONNX e devolve as amostras de áudio. Os dois arquivos moram em /vendor/piper, sem CDN.

Tudo num Web Worker

Baixar a voz, fonetizar e rodar o modelo acontecem num worker: a página não trava. Uma fila serializa as sínteses, e a frase seguinte já está sendo gerada enquanto a atual toca.

Cache API com conferência

A voz baixada vai para o armazenamento do navegador. Na primeira vez, o SHA-256 do arquivo precisa bater com o do catálogo. Depois, abrir a voz de novo não usa a rede.

O mapa de fonemas é de cada voz

Cada voz traz o seu próprio mapa de símbolos fonéticos para números, e eles diferem entre as vozes. O módulo converte pelo mapa da voz carregada, e um teste confere o resultado com o do fonetizador oficial.

Inglês dentro da frase

Uma fala pode misturar trechos em idiomas diferentes: o título de uma música em inglês é fonetizado como inglês e o resto como português, na mesma frase.

Web Audio sem estalo

As frases são agendadas no relógio do áudio, emendadas sem silêncio indevido, com pausa configurável e um analisador que anima a tela.

Módulo reutilizável

piper-tts.js (motor), piper-player.js (tocador), piper-voices.js (catálogo) e piper-text.js (peças puras, testadas no Node). A Rádio No Ar usa os mesmos arquivos.

FAQ

Perguntas frequentes

Meu texto vai para algum servidor?

Não. A fonetização, o modelo e o áudio rodam no seu navegador. O servidor só conta, de forma anônima, quantas falas foram geradas e quantos WAV foram baixados, nunca o texto, e nada é enviado com Não rastrear ligado.

Por que a primeira vez demora?

O navegador baixa o motor (uns 30 MB) e a voz (cerca de 63 MB). Depois a voz fica guardada, e só o motor volta do cache normal do navegador.

Posso usar as vozes em projetos comerciais?

Depende da voz. Faber, Cadu e Jeff são CC0. A Edresson é CC BY 4.0 e pede atribuição. A Dii é CC BY-NC-ND 4.0: uso não comercial e sem modificação. A licença de cada uma aparece na tela de escolha da voz.

Funciona no celular?

Deve funcionar em navegadores recentes com WebAssembly, mas só foi testado no Chrome do computador. O download inicial é grande: prefira uma rede Wi-Fi.

Por que algumas palavras saem estranhas?

O texto passa por um fonetizador (espeak-ng) que erra siglas, nomes estrangeiros e abreviações. Escreva por extenso ("Rádio" em vez de "Rd.") ou separe a sigla em letras.

Posso usar o módulo no meu site?

O código do portfólio é este mesmo: piper-tts.js e os arquivos ao lado. O motor traz as licenças dele, listadas no arquivo NOTICE.txt da pasta /vendor/piper.

O que o servidor conta?

Só três números: falas geradas, arquivos WAV baixados e vozes baixadas pela primeira vez. Nunca o texto.

Gostou do Piper TTS? Dá para apoiar o trabalho:

Continue explorando

Veja também

Todos os projetos