O Kaggle indica uma base de 30 horas por semana, que pode ser superior conforme a procura e os recursos disponíveis. A cota é reposta ao sábado às 00:00 UTC.
GUIA PRÁTICO · PIPER TTS
Das gravações
à voz.
As etapas essenciais para preparares os teus dados de voz e treinares um modelo Piper. Os limites do Kaggle podem mudar: verifica a tua cota antes de um treino longo.
Criar um dataset LJSpeech para Piper TTS
LJSpeech é o formato padrão esperado pelo Piper. Cada frase é um ficheiro WAV separado, associado à sua transcrição em metadata.csv.
data.zip
├── metadata.csv # nom_du_fichier|transcription
└── wavs/
├── 000001.wav
└── ...- 01
Obter os ficheiros de áudio
Usa gravações que possas processar e redistribuir. As fontes podem incluir wikis de jogos, multimédia que possuis ou datasets públicos.
Procurar datasets LJSpeech no Hugging Face ↗Descarregar uma fonte de vídeo com yt-dlp - 02
Dividir em frases
Prepara um ficheiro WAV por frase. Para a divisão automática ou o alinhamento, podes usar:
- audiosplitter · divisão automática
- Montreal Forced Aligner (MFA) · alinhamento forçado
- faster-whisper + VAD · transcrição e marcas temporais
- Audacity · divisão manual para volumes pequenos
- 03
Criar metadata.csv
Uma linha por ficheiro. O separador é uma barra vertical; o nome deve corresponder exatamente ao ficheiro presente em wavs/.
000001.wav|Esta é uma frase de exemplo. 000002.wav|Aqui está outra frase para o treino. - 04
Comprimir o arquivo
Coloca metadata.csv e a pasta wavs/ na raiz do arquivo.
zip -r data.zip metadata.csv wavs/ - 05
Enviar para Hugging Face
Cria um repositório de dataset, por exemplo user/wheatley-english-ljspeech. Adiciona data.zip e um README.md com a configuração:
--- configs: - config_name: default data_files: - split: train path: data.zip --- - 06
Publicar no fórum Piper
Cria um tópico no canal de datasets e treino com a ligação Hugging Face e a etiqueta adequada.
Abrir o canal Discord ↗
Treinar uma voz no Kaggle
A cota de GPU é atribuída pelo Kaggle à conta e pode variar conforme a disponibilidade. Consulta o contador antes de iniciares uma sessão longa.
A documentação do Kaggle indica um limite contínuo de 12 horas para sessões de CPU e GPU. Um notebook só de CPU não consome a cota de GPU, mas a duração da sessão continua limitada.
O Kaggle retirou o Tesla P100 em 15 de setembro de 2026. O T4 x2 continua disponível nos notebooks; escolhe-o para o treino Piper em vez de seguir guias antigos do P100.
Retomar após uma interrupção
Um treino completo ultrapassa muitas vezes as 12 horas de uma sessão. O notebook Piper deste projeto retoma a partir de um checkpoint Hugging Face: após uma interrupção ou cota esgotada, reinicia-o para continuares desde o último checkpoint gravado.
Antes de um treino longo
- Verifica a cota restante nas definições do notebook, no teu perfil ou na página de utilização de aceleradores.
- Para as sessões de GPU quando não as estiveres a usar.
- Usa o T4 x2; o P100 já não está disponível no Kaggle.
As cotas, aceleradores e interfaces do Kaggle podem mudar. Verifica sempre as informações apresentadas na tua conta antes de um treino.
Usar uma voz Piper
Instala o Piper, obtém os dois ficheiros da voz escolhida e gera um WAV localmente. Os comandos abaixo usam a versão mantida pela Open Home Foundation.
- 01
Instalar o Piper
O Piper é distribuído como pacote Python. Os guias antigos que usam o repositório rhasspy/piper ou o seu arquivo binário correspondem à versão histórica.
python -m pip install piper-ttspython -m piper.download_voices en_US-lessac-medium - 02
Descarregar uma voz
Escolhe uma voz no catálogo e descarrega o seu modelo ONNX e o ficheiro de configuração JSON associado. Mantém os dois ficheiros juntos; o caminho JSON é o caminho do modelo seguido de .json.
voice.onnx
voice.onnx.json - 03
Gerar um ficheiro WAV
Descarrega primeiro uma voz do catálogo Piper ou substitui o nome abaixo pelo caminho do teu ficheiro .onnx.
python -m piper -m ./voice.onnx -f output.wav -- "Bonjour, ceci est un test." - 04
Ler o texto a partir de um ficheiro
python -m piper -m ./voice.onnx -f output.wav --input-file mon_texte.txtLer o som em saída direta
A frequência de amostragem depende da voz. Verifica voice.onnx.json e substitui 22050 se necessário.
echo "Bonjour." | python -m piper -m ./voice.onnx --output-raw | aplay -r 22050 -f S16_LE -c 1 -t raw - 05
Desde Python
import wave from piper import PiperVoice voice = PiperVoice.load("./voice.onnx") with wave.open("output.wav", "wb") as wav_file: voice.synthesize_wav("Bonjour le monde.", wav_file) - 06
Com Home Assistant
O Piper integra-se com Home Assistant via Wyoming. Adiciona o Piper em Definições → Dispositivos e serviços e usa a ação tts.speak com a entidade TTS Piper.
Configurar o Piper no Home Assistant ↗Com Node-RED
O pacote node-red-contrib-piper-tts citado em alguns guias não foi confirmado no catálogo público. Uma opção é chamar o comando Piper a partir do nó Exec integrado; adapta os caminhos e permissões à tua instalação.
- 07
Ajustar a reprodução
A qualidade depende, entre outros, dos dados de treino e da voz escolhida. Um valor length-scale mais alto torna a fala mais lenta; um valor mais baixo acelera-a. noise-scale e noise-w alteram a variação da geração.
python -m piper -m ./voice.onnx --length-scale 1.5 --noise-scale 0.667 --noise-w 0.8 -f lent.wav -- "Texte lent." python -m piper -m ./voice.onnx --length-scale 0.7 --noise-scale 0.667 --noise-w 0.8 -f rapide.wav -- "Texte rapide."
Integrar o Piper num projeto Node.js com pipertts
O pipertts expõe o Piper em Node.js, com escrita de ficheiros ou áudio em memória. O modo recomendado é PiperNativeTTS: inferência 100% nativa em processo (ONNX + ponte espeak compilada), sem Python, cerca de 10 vezes mais rápida que o wrapper. As vozes (.onnx + .onnx.json) continuam a ser ficheiros separados.
- 01
Instalar as dependências
A documentação anuncia Node.js 18+ e TypeScript 5+. O modo nativo não exige mais nada: basta um npm install. O modo wrapper clássico (PiperTTS via python3 -m piper) exige ainda Python e o módulo Piper. A seleção por identificador de catálogo pode descarregar o modelo e a sua configuração para models/.
npm install pipertts # mode wrapper uniquement : python3 -m pip install piper-tts - 02
Início rápido com uma voz do catálogo
import { PiperNativeTTS, resolveModelPathFromOptions } from "pipertts"; import * as fs from "node:fs"; const modelPath = await resolveModelPathFromOptions({ model: "en_US-lessac-medium", modelsDir: "./models", }); const tts = await PiperNativeTTS.load({ modelPath }); const { audio } = await tts.synthesize("Hello from Piper."); fs.writeFileSync("./hello.wav", audio); - 03
Usar um modelo local
Para uma voz descarregada manualmente, passa o caminho do ficheiro ONNX. O ficheiro .onnx.json associado deve estar ao lado; podes indicar configPath se a localização for diferente.
import { PiperNativeTTS } from "pipertts"; const tts = await PiperNativeTTS.load({ modelPath: "./models/my-voice.onnx", }); const { audio, sampleRate } = await tts.synthesize("Hello.", { speakerId: 0 }); - 04
API e formatos
synthesize() devolve audio (Buffer), sampleRate e text; outputFile também grava em disco. Opções: speakerId (várias vozes e estilos), lengthScale (> 1 torna mais lento, < 1 acelera), noiseScale, noiseWScale, sentenceSilence, normalizeAudio, volume e outputFormat (wav, raw, mp3, ogg ou opus). mp3 e opus têm soluções JS puras; ogg exige FFmpeg. phonemize() e synthesizeChunks() dão acesso de baixo nível, frase a frase.
- 05
Wrapper legado (PiperTTS)
O PiperTTS lança python3 -m piper, um processo por síntese: cerca de 10 vezes mais lento, a reservar para ambientes onde o motor nativo não funciona. Exige Python e o módulo Piper.
import { PiperTTS } from "pipertts"; const tts = await PiperTTS.create({ modelPath: "./models/en_US-lessac-medium.onnx", }); await tts.synthesizeToFile("Hello from the legacy wrapper.", "./hello.wav");
