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.
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.
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
└── ...- 01
Audiodateien besorgen
Nutz Aufnahmen, die du verarbeiten und weitergeben darfst. Quellen können Spiel-Wikis, eigene Medien oder öffentliche Datensätze sein.
LJSpeech-Datensätze auf Hugging Face suchen ↗Quellvideo mit yt-dlp herunterladen - 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
- 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. - 04
Archiv packen
Leg metadata.csv und den Ordner wavs/ in die Archivwurzel.
zip -r data.zip metadata.csv wavs/ - 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 --- - 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 ↗
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.
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.
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.
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.
- 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-ttspython -m piper.download_voices en_US-lessac-medium - 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 - 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." - 04
Text aus einer Datei lesen
python -m piper -m ./voice.onnx -f output.wav --input-file mon_texte.txtTon 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 - 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) - 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.
- 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."
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.
- 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 - 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); - 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 }); - 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.
- 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");
