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.

01STRUTTURA DELL'ARCHIVIO

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
    └── ...
  1. 01

    Procurarsi i file audio

    Usa registrazioni che puoi elaborare e ridistribuire. Le fonti possono essere wiki di giochi, media propri o dataset pubblici.

  2. 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
  3. 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.
  4. 04

    Comprimere l'archivio

    Metti metadata.csv e la cartella wavs/ nella radice dell'archivio.

    zip -r data.zip metadata.csv wavs/
  5. 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
    ---
  6. 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 ↗
02KAGGLE · GPU

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.

Quota GPU settimanale30 ore · a volte di più

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.

Durata massima di una sessione12 ore

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.

Acceleratore disponibileT4 x2

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.

03PIPER · LOCAL TTS

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.

  1. 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-tts
    python -m piper.download_voices en_US-lessac-medium
  2. 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
  3. 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."
  4. 04

    Leggere il testo da un file

    python -m piper -m ./voice.onnx -f output.wav --input-file mon_texte.txt

    Ascoltare 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
  5. 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)
  6. 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.

  7. 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."
04NODE.JS · TYPESCRIPT

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.

  1. 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
  2. 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);
  3. 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 });
  4. 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.

  5. 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");