GUIDE PRATIQUE · PIPER TTS

Des enregistrements
à une voix.

Les étapes essentielles pour préparer vos données vocales et entraîner un modèle Piper. Les limites Kaggle peuvent évoluer : vérifiez votre quota avant un long entraînement.

01STRUCTURE DE L’ARCHIVE

Créer un jeu de données LJSpeech pour Piper TTS

LJSpeech est le format standard attendu par Piper. Chaque phrase est un fichier WAV séparé, associé à sa transcription dans metadata.csv.

data.zip
├── metadata.csv   # nom_du_fichier|transcription
└── wavs/
    ├── 000001.wav
    └── ...
  1. 01

    Récupérer les fichiers audio

    Utilisez des enregistrements que vous pouvez traiter et redistribuer. Les sources peuvent être des wikis de jeux, des médias que vous possédez, ou des jeux de données publics.

  2. 02

    Découper en phrases

    Préparez un fichier WAV par phrase. Pour le découpage automatique ou l’alignement, vous pouvez utiliser :

    • audiosplitter · découpage automatique
    • Montreal Forced Aligner (MFA) · alignement forcé
    • faster-whisper + VAD · transcription et horodatages
    • Audacity · découpage manuel pour les petits volumes
  3. 03

    Créer metadata.csv

    Une ligne par fichier. Le séparateur est une barre verticale ; le nom doit correspondre exactement au fichier présent dans wavs/.

    000001.wav|Ceci est une phrase d'exemple.
    000002.wav|Voici une autre phrase pour l'entraînement.
  4. 04

    Compresser l’archive

    Placez metadata.csv et le dossier wavs/ à la racine de l’archive.

    zip -r data.zip metadata.csv wavs/
  5. 05

    Téléverser sur Hugging Face

    Créez un dépôt de jeu de données, par exemple user/wheatley-english-ljspeech. Ajoutez data.zip et un README.md contenant la configuration :

    ---
    configs:
    - config_name: default
      data_files:
      - split: train
        path: data.zip
    ---
  6. 06

    Publier sur le forum Piper

    Créez un fil dans le canal de jeux de données et d’entraînement avec le lien Hugging Face et le tag approprié.

    Ouvrir le canal Discord ↗
02KAGGLE · GPU

Entraîner une voix sur Kaggle

Le quota GPU est attribué par Kaggle au compte et peut varier selon la disponibilité. Consultez le compteur avant de lancer une session longue.

Quota GPU hebdomadaire30 h · parfois davantage

Kaggle indique une base de 30 heures par semaine, susceptible d’être supérieure selon la demande et les ressources disponibles. Le quota se réinitialise le samedi à 00:00 UTC.

Durée maximale d’une session12 heures

La documentation Kaggle indique une limite continue de 12 heures pour les sessions CPU et GPU. Un notebook CPU ne consomme pas le quota GPU, mais sa durée de session reste limitée.

Accélérateur disponibleT4 x2

Kaggle a retiré le Tesla P100 le 15 septembre 2026. Le T4 x2 reste proposé dans les notebooks ; choisissez-le pour l’entraînement Piper plutôt que de suivre d’anciens guides P100.

↻

Reprendre après une coupure

Un entraînement complet dépasse souvent les 12 heures d’une session. Le notebook Piper de ce projet reprend depuis un checkpoint Hugging Face : après une coupure ou un quota épuisé, relancez-le pour continuer depuis le dernier checkpoint enregistré.

Avant un entraînement long

  • Vérifiez le quota restant dans les paramètres du notebook, votre profil ou la page d’usage des accélérateurs.
  • Arrêtez les sessions GPU quand vous ne les utilisez pas.
  • Utilisez le T4 x2 ; le P100 n’est plus disponible sur Kaggle.

Les quotas, accélérateurs et interfaces de Kaggle peuvent changer. Vérifiez toujours les informations affichées dans votre compte avant un entraînement.

03PIPER · LOCAL TTS

Utiliser une voix Piper

Installez Piper, récupérez les deux fichiers de la voix choisie, puis générez un WAV en local. Les commandes ci-dessous utilisent la version maintenue par Open Home Foundation.

  1. 01

    Installer Piper

    Piper est distribué comme paquet Python. Les anciens guides qui utilisent le dépôt rhasspy/piper ou son archive binaire correspondent à la version historique.

    python -m pip install piper-tts
    python -m piper.download_voices en_US-lessac-medium
  2. 02

    Télécharger une voix

    Choisissez une voix dans le catalogue puis téléchargez son modèle ONNX et son fichier de configuration JSON associé. Gardez les deux fichiers ensemble ; le chemin JSON est le chemin du modèle suivi de .json.

    voice.onnx
    voice.onnx.json
  3. 03

    Générer un fichier WAV

    Téléchargez d’abord une voix depuis le catalogue Piper, ou remplacez le nom ci-dessous par le chemin de votre fichier .onnx.

    python -m piper -m ./voice.onnx -f output.wav -- "Bonjour, ceci est un test."
  4. 04

    Lire le texte depuis un fichier

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

    Lire le son en sortie directe

    La fréquence d’échantillonnage dépend de la voix. Vérifiez voice.onnx.json et remplacez 22050 si nécessaire.

    echo "Bonjour." | python -m piper -m ./voice.onnx --output-raw | aplay -r 22050 -f S16_LE -c 1 -t raw
  5. 05

    Depuis 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

    Avec Home Assistant

    Piper s’intègre à Home Assistant via Wyoming. Ajoutez Piper dans Paramètres → Appareils et services, puis utilisez l’action tts.speak avec l’entité TTS Piper.

    Configurer Piper dans Home Assistant ↗

    Avec Node-RED

    Le paquet node-red-contrib-piper-tts cité dans certains guides n’est pas confirmé dans le catalogue public. Une option consiste à appeler la commande Piper depuis le nœud Exec intégré ; adaptez les chemins et droits d’accès à votre installation.

  7. 07

    Ajuster le rendu

    La qualité dépend notamment des données d’entraînement et de la voix choisie. Une valeur length-scale plus élevée ralentit la parole ; une valeur plus basse l’accélère. noise-scale et noise-w modifient la variation de la génération.

    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

Intégrer Piper dans un projet Node.js avec pipertts

pipertts expose Piper dans Node.js, avec écriture de fichiers ou retour audio en mémoire. Le mode recommandé est PiperNativeTTS : inférence 100 % native en processus (ONNX + pont espeak compilé), sans Python, environ 10 fois plus rapide que le wrapper. Les voix (.onnx + .onnx.json) restent des fichiers séparés.

  1. 01

    Installer les dépendances

    La documentation annonce Node.js 18+ et TypeScript 5+. Le mode natif ne demande rien d’autre : un npm install suffit. Le mode wrapper classique (PiperTTS via python3 -m piper) exige en plus Python et le module Piper. La sélection par identifiant de catalogue peut télécharger le modèle et sa configuration dans models/.

    npm install pipertts
    # mode wrapper uniquement : python3 -m pip install piper-tts
  2. 02

    Démarrage avec une voix du catalogue

    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

    Utiliser un modèle local

    Pour une voix téléchargée manuellement, passez le chemin du fichier ONNX. Le fichier .onnx.json associé doit être placé à côté ; vous pouvez préciser configPath si son emplacement diffère.

    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 et formats

    synthesize() retourne audio (Buffer), sampleRate et text ; outputFile écrit aussi sur disque. Options : speakerId (multi-voix et multi-styles), lengthScale (> 1 ralentit, < 1 accélère), noiseScale, noiseWScale, sentenceSilence, normalizeAudio, volume et outputFormat (wav, raw, mp3, ogg ou opus). mp3 et opus ont des solutions JS pures ; ogg demande FFmpeg. phonemize() et synthesizeChunks() donnent accès au bas niveau, phrase par phrase.

  5. 05

    Wrapper legacy (PiperTTS)

    PiperTTS lance python3 -m piper, un processus par synthèse : environ 10 fois plus lent, à réserver aux environnements où le moteur natif ne tourne pas. Exige Python et le module 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");