Kaggle indica una base de 30 horas por semana, que puede ser mayor según la demanda y los recursos disponibles. La cuota se restablece el sábado a las 00:00 UTC.
GUÍA PRÁCTICA · PIPER TTS
De las grabaciones
a una voz.
Los pasos esenciales para preparar tus datos de voz y entrenar un modelo Piper. Los límites de Kaggle pueden cambiar: revisa tu cuota antes de un entrenamiento largo.
Crear un dataset LJSpeech para Piper TTS
LJSpeech es el formato estándar que espera Piper. Cada frase es un archivo WAV separado, con su transcripción en metadata.csv.
data.zip
├── metadata.csv # nom_du_fichier|transcription
└── wavs/
├── 000001.wav
└── ...- 01
Conseguir los archivos de audio
Usa grabaciones que puedas procesar y redistribuir. Las fuentes pueden ser wikis de juegos, medios propios o datasets públicos.
Buscar datasets LJSpeech en Hugging Face ↗Descargar un vídeo de origen con yt-dlp - 02
Recortar por frases
Prepara un archivo WAV por frase. Para el recorte automático o la alineación puedes usar:
- audiosplitter · recorte automático
- Montreal Forced Aligner (MFA) · alineación forzada
- faster-whisper + VAD · transcripción y marcas de tiempo
- Audacity · recorte manual para volúmenes pequeños
- 03
Crear metadata.csv
Una línea por archivo. El separador es una barra vertical; el nombre debe coincidir exactamente con el archivo en wavs/.
000001.wav|Esta es una frase de ejemplo. 000002.wav|Aquí tienes otra frase para el entrenamiento. - 04
Comprimir el archivo
Coloca metadata.csv y la carpeta wavs/ en la raíz del archivo.
zip -r data.zip metadata.csv wavs/ - 05
Subir a Hugging Face
Crea un repositorio de dataset, por ejemplo user/wheatley-english-ljspeech. Añade data.zip y un README.md con esta configuración:
--- configs: - config_name: default data_files: - split: train path: data.zip --- - 06
Publicar en el foro de Piper
Crea un hilo en el canal de datasets y entrenamiento con el enlace de Hugging Face y la etiqueta adecuada.
Abrir el canal de Discord ↗
Entrenar una voz en Kaggle
Kaggle asigna la cuota de GPU a tu cuenta y puede variar según la disponibilidad. Revisa el contador antes de lanzar una sesión larga.
La documentación de Kaggle indica un límite continuo de 12 horas para las sesiones de CPU y GPU. Un notebook solo de CPU no consume cuota de GPU, pero su duración sigue limitada.
Kaggle retiró el Tesla P100 el 15 de septiembre de 2026. El T4 x2 sigue disponible en los notebooks; elígelo para entrenar Piper en lugar de seguir guías antiguas del P100.
Continuar tras un corte
Un entrenamiento completo suele superar las 12 horas de una sesión. El notebook Piper de este proyecto continúa desde un checkpoint de Hugging Face: tras un corte o una cuota agotada, vuelve a lanzarlo para seguir desde el último checkpoint guardado.
Antes de un entrenamiento largo
- Revisa la cuota restante en los ajustes del notebook, en tu perfil o en la página de uso de aceleradores.
- Detén las sesiones de GPU cuando no las uses.
- Usa el T4 x2; el P100 ya no está disponible en Kaggle.
Las cuotas, los aceleradores y las interfaces de Kaggle pueden cambiar. Revisa siempre la información de tu cuenta antes de entrenar.
Usar una voz Piper
Instala Piper, consigue los dos archivos de la voz elegida y genera un WAV en local. Los comandos siguientes usan la versión mantenida por Open Home Foundation.
- 01
Instalar Piper
Piper se distribuye como paquete Python. Las guías antiguas que usan el repositorio rhasspy/piper o su archivo binario corresponden a la versión histórica.
python -m pip install piper-ttspython -m piper.download_voices en_US-lessac-medium - 02
Descargar una voz
Elige una voz del catálogo y descarga su modelo ONNX y su archivo de configuración JSON asociado. Guarda ambos archivos juntos; la ruta JSON es la ruta del modelo seguida de .json.
voice.onnx
voice.onnx.json - 03
Generar un archivo WAV
Descarga primero una voz del catálogo Piper, o sustituye el nombre siguiente por la ruta de tu archivo .onnx.
python -m piper -m ./voice.onnx -f output.wav -- "Bonjour, ceci est un test." - 04
Leer el texto desde un archivo
python -m piper -m ./voice.onnx -f output.wav --input-file mon_texte.txtEscuchar el sonido en salida directa
La frecuencia de muestreo depende de la voz. Revisa voice.onnx.json y cambia 22050 si hace falta.
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
Con Home Assistant
Piper se integra en Home Assistant mediante Wyoming. Añade Piper en Ajustes → Dispositivos y servicios y usa luego la acción tts.speak con la entidad TTS de Piper.
Configurar Piper en Home Assistant ↗Con Node-RED
El paquete node-red-contrib-piper-tts citado en algunas guías no aparece confirmado en el catálogo público. Una opción es llamar al comando Piper desde el nodo Exec integrado; adapta rutas y permisos a tu instalación.
- 07
Ajustar el resultado
La calidad depende en parte de los datos de entrenamiento y de la voz elegida. Un valor length-scale más alto ralentiza el habla; uno más bajo la acelera. noise-scale y noise-w modifican la variación de la generación.
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 Piper en un proyecto Node.js con pipertts
pipertts lleva Piper a Node.js, con escritura de archivos o audio en memoria. El modo recomendado es PiperNativeTTS: inferencia 100 % nativa en proceso (ONNX más puente espeak compilado), sin Python, unas 10 veces más rápida que el wrapper. Las voces (.onnx más .onnx.json) siguen siendo archivos separados.
- 01
Instalar las dependencias
La documentación anuncia Node.js 18+ y TypeScript 5+. El modo nativo no pide nada más: basta un npm install. El modo wrapper clásico (PiperTTS con python3 -m piper) exige además Python y el módulo Piper. La selección por identificador de catálogo puede descargar el modelo y su configuración en models/.
npm install pipertts # mode wrapper uniquement : python3 -m pip install piper-tts - 02
Inicio rápido con una voz del 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 un modelo local
Para una voz descargada a mano, pasa la ruta del archivo ONNX. Su archivo .onnx.json asociado debe estar al lado; puedes indicar configPath si está en otro lugar.
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 y formatos
synthesize() devuelve audio (Buffer), sampleRate y text; outputFile también escribe en disco. Opciones: speakerId (varias voces y estilos), lengthScale (> 1 ralentiza, < 1 acelera), noiseScale, noiseWScale, sentenceSilence, normalizeAudio, volumen y outputFormat (wav, raw, mp3, ogg u opus). mp3 y opus tienen soluciones JS puras; ogg pide FFmpeg. phonemize() y synthesizeChunks() dan acceso de bajo nivel, frase por frase.
- 05
Wrapper heredado (PiperTTS)
PiperTTS lanza python3 -m piper, un proceso por síntesis: unas 10 veces más lento, solo para entornos donde el motor nativo no funciona. Exige Python y el 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");
