Kaggle indica una base di 30 ore a settimana, che può essere superiore secondo domanda e risorse disponibili. La quota si azzera il sabato alle 00:00 UTC.
GUIDA PRATICA · PIPER TTS
Dalle registrazioni
alla voce.
I passi essenziali per preparare i dati vocali e addestrare un modello Piper. I limiti di Kaggle possono cambiare: controlla la quota prima di un addestramento lungo.
Creare un dataset LJSpeech per Piper TTS
LJSpeech è il formato standard atteso da Piper. Ogni frase è un file WAV separato, con la trascrizione in metadata.csv.
data.zip
├── metadata.csv # nom_du_fichier|transcription
└── wavs/
├── 000001.wav
└── ...- 01
Procurarsi i file audio
Usa registrazioni che puoi elaborare e ridistribuire. Le fonti possono essere wiki di giochi, media propri o dataset pubblici.
Cercare dataset LJSpeech su Hugging Face ↗Scaricare un video di origine con yt-dlp - 02
Ritagliare per frasi
Prepara un file WAV per frase. Per il ritaglio automatico o l'allineamento puoi usare:
- audiosplitter · ritaglio automatico
- Montreal Forced Aligner (MFA) · allineamento forzato
- faster-whisper + VAD · trascrizione e marche temporali
- Audacity · ritaglio manuale per piccoli volumi
- 03
Creare metadata.csv
Una riga per file. Il separatore è una barra verticale; il nome deve corrispondere esattamente al file in wavs/.
000001.wav|Questa è una frase di esempio. 000002.wav|Ecco un'altra frase per l'addestramento. - 04
Comprimere l'archivio
Metti metadata.csv e la cartella wavs/ nella radice dell'archivio.
zip -r data.zip metadata.csv wavs/ - 05
Caricare su Hugging Face
Crea un repository di dataset, per esempio user/wheatley-english-ljspeech. Aggiungi data.zip e un README.md con questa configurazione:
--- configs: - config_name: default data_files: - split: train path: data.zip --- - 06
Pubblicare nel forum Piper
Crea un thread nel canale dei dataset e dell'addestramento con il link Hugging Face e il tag appropriato.
Apri il canale Discord ↗
Addestrare una voce su Kaggle
Kaggle assegna la quota GPU al tuo account e può variare secondo la disponibilità. Controlla il contatore prima di avviare una sessione lunga.
La documentazione Kaggle indica un limite continuo di 12 ore per le sessioni CPU e GPU. Un notebook solo CPU non consuma quota GPU, ma la sua durata resta limitata.
Kaggle ha ritirato il Tesla P100 il 15 settembre 2026. Il T4 x2 resta disponibile nei notebook; sceglilo per addestrare Piper invece di seguire vecchie guide sul P100.
Riprendere dopo un'interruzione
Un addestramento completo supera spesso le 12 ore di una sessione. Il notebook Piper di questo progetto riparte da un checkpoint Hugging Face: dopo un'interruzione o una quota esaurita, rilancialo per continuare dall'ultimo checkpoint salvato.
Prima di un addestramento lungo
- Controlla la quota restante nelle impostazioni del notebook, nel tuo profilo o nella pagina di uso degli acceleratori.
- Interrompi le sessioni GPU quando non le usi.
- Usa il T4 x2; il P100 non è più disponibile su Kaggle.
Quote, acceleratori e interfacce di Kaggle possono cambiare. Controlla sempre le informazioni del tuo account prima di addestrare.
Usare una voce Piper
Installa Piper, recupera i due file della voce scelta e genera un WAV in locale. I comandi seguenti usano la versione mantenuta da Open Home Foundation.
- 01
Installare Piper
Piper è distribuito come pacchetto Python. Le vecchie guide che usano il repository rhasspy/piper o il suo archivio binario si riferiscono alla versione storica.
python -m pip install piper-ttspython -m piper.download_voices en_US-lessac-medium - 02
Scaricare una voce
Scegli una voce nel catalogo e scarica il suo modello ONNX con il file di configurazione JSON associato. Tieni i due file insieme; il percorso JSON è il percorso del modello seguito da .json.
voice.onnx
voice.onnx.json - 03
Generare un file WAV
Scarica prima una voce dal catalogo Piper, o sostituisci il nome seguente con il percorso del tuo file .onnx.
python -m piper -m ./voice.onnx -f output.wav -- "Bonjour, ceci est un test." - 04
Leggere il testo da un file
python -m piper -m ./voice.onnx -f output.wav --input-file mon_texte.txtAscoltare l'audio in uscita diretta
La frequenza di campionamento dipende dalla voce. Controlla voice.onnx.json e cambia 22050 se serve.
echo "Bonjour." | python -m piper -m ./voice.onnx --output-raw | aplay -r 22050 -f S16_LE -c 1 -t raw - 05
Da 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 si integra in Home Assistant tramite Wyoming. Aggiungi Piper in Impostazioni → Dispositivi e servizi, poi usa l'azione tts.speak con l'entità TTS di Piper.
Configurare Piper in Home Assistant ↗Con Node-RED
Il pacchetto node-red-contrib-piper-tts citato in alcune guide non risulta confermato nel catalogo pubblico. Un'opzione è chiamare il comando Piper dal nodo Exec integrato; adatta percorsi e permessi alla tua installazione.
- 07
Regolare la resa
La qualità dipende in parte dai dati di addestramento e dalla voce scelta. Un valore length-scale più alto rallenta il parlato, uno più basso lo accelera. noise-scale e noise-w modificano la variazione della generazione.
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."
Integrare Piper in un progetto Node.js con pipertts
pipertts porta Piper in Node.js, con scrittura di file o audio in memoria. La modalità consigliata è PiperNativeTTS: inferenza 100 % nativa in processo (ONNX più ponte espeak compilato), senza Python, circa 10 volte più veloce del wrapper. Le voci (.onnx più .onnx.json) restano file separati.
- 01
Installare le dipendenze
La documentazione indica Node.js 18+ e TypeScript 5+. La modalità nativa non chiede altro: basta un npm install. La modalità wrapper classica (PiperTTS con python3 -m piper) richiede in più Python e il modulo Piper. La selezione per identificativo di catalogo può scaricare modello e configurazione in models/.
npm install pipertts # mode wrapper uniquement : python3 -m pip install piper-tts - 02
Avvio rapido con una voce del catalogo
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
Usare un modello locale
Per una voce scaricata a mano, passa il percorso del file ONNX. Il file .onnx.json associato deve stare accanto; puoi indicare configPath se si trova altrove.
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 formati
synthesize() restituisce audio (Buffer), sampleRate e text; outputFile scrive anche su disco. Opzioni: speakerId (più voci e stili), lengthScale (> 1 rallenta, < 1 accelera), noiseScale, noiseWScale, sentenceSilence, normalizeAudio, volume e outputFormat (wav, raw, mp3, ogg o opus). mp3 e opus hanno soluzioni JS pure; ogg richiede FFmpeg. phonemize() e synthesizeChunks() danno accesso di basso livello, frase per frase.
- 05
Wrapper legacy (PiperTTS)
PiperTTS avvia python3 -m piper, un processo per sintesi: circa 10 volte più lento, solo per ambienti dove il motore nativo non gira. Richiede Python e il modulo 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");
