PRAXISLEITFADEN · PIPER TTS

Von Aufnahmen
zur Stimme.

Die wichtigsten Schritte, um Sprachdaten vorzubereiten und ein Piper-Modell zu trainieren. Die Kaggle-Limits können sich ändern: Prüf dein Kontingent vor einem langen Training.

01ARCHIVSTRUKTUR

Einen LJSpeech-Datensatz für Piper TTS erstellen

LJSpeech ist das Standardformat, das Piper erwartet. Jeder Satz ist eine eigene WAV-Datei, mit Transkript in metadata.csv.

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

    Audiodateien besorgen

    Nutz Aufnahmen, die du verarbeiten und weitergeben darfst. Quellen können Spiel-Wikis, eigene Medien oder öffentliche Datensätze sein.

  2. 02

    In Sätze schneiden

    Bereit eine WAV-Datei pro Satz vor. Für automatisches Schneiden oder Alignment helfen diese Tools:

    • audiosplitter · automatisches Schneiden
    • Montreal Forced Aligner (MFA) · erzwungenes Alignment
    • faster-whisper + VAD · Transkription und Zeitstempel
    • Audacity · manuelles Schneiden für kleine Mengen
  3. 03

    metadata.csv erstellen

    Eine Zeile pro Datei. Trennzeichen ist ein senkrechter Strich; der Name muss exakt der Datei in wavs/ entsprechen.

    000001.wav|Dies ist ein Beispielsatz.
    000002.wav|Hier ist ein weiterer Satz für das Training.
  4. 04

    Archiv packen

    Leg metadata.csv und den Ordner wavs/ in die Archivwurzel.

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

    Auf Hugging Face hochladen

    Erstell ein Datensatz-Repository, zum Beispiel user/wheatley-english-ljspeech. Füg data.zip und eine README.md mit dieser Konfiguration hinzu:

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

    Im Piper-Forum veröffentlichen

    Erstell einen Beitrag im Kanal für Datensätze und Training, mit Link zu Hugging Face und passendem Tag.

    Discord-Kanal öffnen ↗
02KAGGLE · GPU

Eine Stimme auf Kaggle trainieren

Das GPU-Kontingent wird von Kaggle pro Konto vergeben und kann je nach Verfügbarkeit variieren. Prüf den Zähler vor einer langen Sitzung.

Wöchentliches GPU-Kontingent30 Std. · manchmal mehr

Kaggle nennt eine Basis von 30 Stunden pro Woche, je nach Nachfrage und verfügbaren Ressourcen auch mehr. Das Kontingent wird samstags um 00:00 UTC zurückgesetzt.

Maximale Sitzungsdauer12 Stunden

Die Kaggle-Dokumentation nennt ein durchgehendes Limit von 12 Stunden für CPU- und GPU-Sitzungen. Ein reines CPU-Notebook verbraucht kein GPU-Kontingent, bleibt aber zeitlich begrenzt.

Verfügbarer BeschleunigerT4 x2

Kaggle hat den Tesla P100 am 15. September 2026 abgeschaltet. T4 x2 bleibt in Notebooks verfügbar; wähl ihn für das Piper-Training, statt alten P100-Anleitungen zu folgen.

↻

Nach Abbruch fortsetzen

Ein komplettes Training dauert oft länger als die 12 Stunden einer Sitzung. Das Piper-Notebook dieses Projekts setzt ab einem Checkpoint auf Hugging Face fort: Start es nach Abbruch oder verbrauchtem Kontingent neu, um ab dem letzten gespeicherten Checkpoint weiterzumachen.

Vor einem langen Training

  • Prüf das Restkontingent in den Notebook-Einstellungen, in deinem Profil oder auf der Beschleuniger-Nutzungsseite.
  • Beend GPU-Sitzungen, wenn du sie nicht nutzt.
  • Nutz T4 x2; der P100 ist auf Kaggle nicht mehr verfügbar.

Kontingente, Beschleuniger und Oberflächen von Kaggle können sich ändern. Prüf vor einem Training immer die Angaben in deinem Konto.

03PIPER · LOCAL TTS

Eine Piper-Stimme nutzen

Installier Piper, hol die beiden Dateien der gewählten Stimme und erzeug lokal eine WAV-Datei. Die Befehle unten nutzen die von der Open Home Foundation gepflegte Version.

  1. 01

    Piper installieren

    Piper wird als Python-Paket verteilt. Ältere Anleitungen mit dem Repository rhasspy/piper oder dessen Binärarchiv beziehen sich auf die historische Version.

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

    Eine Stimme herunterladen

    Wähl eine Stimme im Katalog und lad ihr ONNX-Modell plus die zugehörige JSON-Konfiguration herunter. Halt beide Dateien zusammen; der JSON-Pfad ist der Modellpfad plus .json.

    voice.onnx
    voice.onnx.json
  3. 03

    Eine WAV-Datei erzeugen

    Lad zuerst eine Stimme aus dem Piper-Katalog herunter, oder ersetz den Namen unten durch den Pfad deiner .onnx-Datei.

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

    Text aus einer Datei lesen

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

    Ton direkt ausgeben

    Die Abtastrate hängt von der Stimme ab. Prüf voice.onnx.json und ersetz 22050 bei Bedarf.

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

    Aus 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

    Mit Home Assistant

    Piper wird über Wyoming in Home Assistant eingebunden. Füg Piper unter Einstellungen → Geräte und Dienste hinzu und nutz dann die Aktion tts.speak mit der Entität von Piper TTS.

    Piper in Home Assistant einrichten ↗

    Mit Node-RED

    Das in manchen Anleitungen genannte Paket node-red-contrib-piper-tts ist im öffentlichen Katalog nicht bestätigt. Eine Option ist, den Piper-Befehl über den eingebauten Exec-Knoten aufzurufen; pass Pfade und Zugriffsrechte an deine Installation an.

  7. 07

    Wiedergabe anpassen

    Die Qualität hängt unter anderem von Trainingsdaten und gewählter Stimme ab. Ein höherer length-scale-Wert verlangsamt die Sprache, ein niedrigerer beschleunigt sie. noise-scale und noise-w verändern die Variation der Erzeugung.

    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

Piper mit pipertts in ein Node.js-Projekt einbinden

pipertts bringt Piper nach Node.js, mit Dateiausgabe oder Audio im Speicher. Der empfohlene Modus ist PiperNativeTTS: 100 % native prozessinterne Inferenz (ONNX plus kompilierte espeak-Brücke), ohne Python, etwa 10-mal schneller als der Wrapper. Stimmen (.onnx plus .onnx.json) bleiben getrennte Dateien.

  1. 01

    Abhängigkeiten installieren

    Die Dokumentation nennt Node.js 18+ und TypeScript 5+. Der native Modus braucht sonst nichts: Ein npm install genügt. Der klassische Wrapper-Modus (PiperTTS über python3 -m piper) braucht zusätzlich Python und das Piper-Modul. Die Auswahl per Katalogkennung kann Modell und Konfiguration nach models/ laden.

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

    Schnellstart mit einer Katalogstimme

    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

    Ein lokales Modell nutzen

    Für eine manuell heruntergeladene Stimme übergib den Pfad der ONNX-Datei. Die zugehörige .onnx.json-Datei muss daneben liegen; per configPath gibst du einen abweichenden Pfad an.

    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 und Formate

    synthesize() liefert audio (Buffer), sampleRate und text; outputFile schreibt zusätzlich auf die Platte. Optionen: speakerId (mehrere Stimmen und Stile), lengthScale (> 1 verlangsamt, < 1 beschleunigt), noiseScale, noiseWScale, sentenceSilence, normalizeAudio, volume und outputFormat (wav, raw, mp3, ogg oder opus). mp3 und opus haben native JS-Implementierungen; ogg braucht FFmpeg. phonemize() und synthesizeChunks() geben satzweisen Zugriff auf niedriger Ebene.

  5. 05

    Alter Wrapper (PiperTTS)

    PiperTTS startet python3 -m piper, ein Prozess pro Synthese: etwa 10-mal langsamer, nur für Umgebungen, in denen die native Engine nicht läuft. Braucht Python und das Piper-Modul.

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