PANDUAN PRAKTIS · PIPER TTS

Dari rekaman
menjadi suara.

Langkah-langkah penting untuk menyiapkan data suara Anda dan melatih model Piper. Batas Kaggle dapat berubah: periksa kuota Anda sebelum pelatihan yang lama.

01STRUKTUR ARSIP

Membuat dataset LJSpeech untuk Piper TTS

LJSpeech adalah format standar yang diharapkan Piper. Setiap kalimat adalah file WAV terpisah, dipasangkan dengan transkripsinya di metadata.csv.

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

    Mengumpulkan file audio

    Gunakan rekaman yang boleh Anda proses dan distribusikan ulang. Sumbernya dapat berupa wiki game, media yang Anda miliki, atau dataset publik.

  2. 02

    Memotong audio menjadi kalimat

    Siapkan 1 file WAV per kalimat. Untuk pemotongan otomatis atau penjajaran, Anda dapat menggunakan:

    • audiosplitter · pemotongan otomatis
    • Montreal Forced Aligner (MFA) · penjajaran paksa
    • faster-whisper + VAD · transkripsi dan penanda waktu
    • Audacity · pemotongan manual untuk volume kecil
  3. 03

    Membuat metadata.csv

    1 baris per file. Pemisahnya adalah garis vertikal; nama harus sama persis dengan file di folder wavs/.

    000001.wav|Ini adalah kalimat contoh.
    000002.wav|Ini kalimat lain untuk pelatihan.
  4. 04

    Mengompres arsip

    Letakkan metadata.csv dan folder wavs/ di akar arsip.

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

    Mengunggah ke Hugging Face

    Buat repositori dataset, misalnya user/wheatley-english-ljspeech. Tambahkan data.zip dan README.md berisi konfigurasi:

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

    Mempublikasikan di forum Piper

    Buat utas di kanal dataset dan pelatihan dengan tautan Hugging Face dan tag yang sesuai.

    Membuka kanal Discord ↗
02KAGGLE · GPU

Melatih suara di Kaggle

Kuota GPU diberikan oleh Kaggle ke akun dan dapat bervariasi menurut ketersediaan. Periksa penghitung sebelum memulai sesi yang lama.

Kuota GPU mingguan30 jam · terkadang lebih

Kaggle menyebutkan dasar 30 jam per minggu, yang dapat lebih tinggi tergantung permintaan dan sumber daya yang tersedia. Kuota diatur ulang pada hari Sabtu pukul 00:00 UTC.

Durasi maksimum satu sesi12 jam

Dokumentasi Kaggle menyebutkan batas berkelanjutan 12 jam untuk sesi CPU dan GPU. Notebook CPU tidak memakai kuota GPU, tetapi durasi sesinya tetap terbatas.

Akselerator yang tersediaT4 x2

Kaggle telah menghapus Tesla P100 pada 15 September 2026. T4 x2 tetap tersedia di notebook; pilih itu untuk pelatihan Piper daripada mengikuti panduan lama P100.

↻

Melanjutkan setelah terputus

Pelatihan penuh sering melebihi 12 jam dalam satu sesi. Notebook Piper proyek ini melanjutkan dari checkpoint Hugging Face: setelah terputus atau kuota habis, jalankan ulang untuk melanjutkan dari checkpoint terakhir yang tersimpan.

Sebelum pelatihan yang lama

  • Periksa sisa kuota di pengaturan notebook, profil Anda, atau halaman penggunaan akselerator.
  • Hentikan sesi GPU saat tidak digunakan.
  • Gunakan T4 x2; P100 tidak lagi tersedia di Kaggle.

Kuota, akselerator, dan antarmuka Kaggle dapat berubah. Selalu periksa informasi yang ditampilkan di akun Anda sebelum pelatihan.

03PIPER · LOCAL TTS

Menggunakan suara Piper

Instal Piper, ambil 2 file suara pilihan, lalu hasilkan WAV secara lokal. Perintah di bawah menggunakan versi yang dikelola oleh Open Home Foundation.

  1. 01

    Menginstal Piper

    Piper didistribusikan sebagai paket Python. Panduan lama yang menggunakan repositori rhasspy/piper atau arsip binernya merujuk pada versi historis.

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

    Mengunduh suara

    Pilih suara di katalog lalu unduh model ONNX dan file konfigurasi JSON pasangannya. Simpan kedua file bersama; jalur JSON adalah jalur model diikuti .json.

    voice.onnx
    voice.onnx.json
  3. 03

    Menghasilkan file WAV

    Unduh dulu suara dari katalog Piper, atau ganti nama di bawah dengan jalur file .onnx Anda.

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

    Membaca teks dari file

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

    Membaca suara dalam output langsung

    Frekuensi sampel tergantung suara. Periksa voice.onnx.json dan ganti 22050 bila perlu.

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

    Dari 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

    Dengan Home Assistant

    Piper terintegrasi dengan Home Assistant melalui Wyoming. Tambahkan Piper di Pengaturan → Perangkat dan layanan, lalu gunakan tindakan tts.speak dengan entitas TTS Piper.

    Mengonfigurasi Piper di Home Assistant ↗

    Dengan Node-RED

    Paket node-red-contrib-piper-tts yang disebut dalam beberapa panduan tidak terkonfirmasi di katalog publik. Salah satu opsinya adalah memanggil perintah Piper dari node Exec bawaan; sesuaikan jalur dan hak akses dengan instalasi Anda.

  7. 07

    Menyesuaikan hasil

    Kualitas antara lain tergantung data pelatihan dan suara yang dipilih. Nilai length-scale yang lebih tinggi memperlambat ucapan; nilai yang lebih rendah mempercepatnya. noise-scale dan noise-w mengubah variasi hasil.

    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

Mengintegrasikan Piper dalam proyek Node.js dengan pipertts

pipertts menghadirkan Piper di Node.js, dengan output file atau audio dalam memori. Mode yang disarankan adalah PiperNativeTTS: inferensi 100% native dalam proses (ONNX + jembatan espeak terkompilasi), tanpa Python, sekitar 10 kali lebih cepat daripada wrapper. Suara (.onnx + .onnx.json) tetap berupa file terpisah.

  1. 01

    Menginstal dependensi

    Dokumentasi menyebutkan Node.js 18+ dan TypeScript 5+. Mode native tidak membutuhkan yang lain: cukup npm install. Mode wrapper klasik (PiperTTS via python3 -m piper) juga membutuhkan Python dan modul Piper. Pemilihan berdasarkan ID katalog dapat mengunduh model dan konfigurasinya ke models/.

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

    Mulai cepat dengan suara katalog

    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

    Menggunakan model lokal

    Untuk suara yang diunduh manual, berikan jalur file ONNX. File .onnx.json pasangan harus diletakkan di sampingnya; Anda dapat menentukan configPath jika lokasinya berbeda.

    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 dan format

    synthesize() mengembalikan audio (Buffer), sampleRate dan text; outputFile juga menulis ke disk. Opsi: speakerId (multi-suara dan multi-gaya), lengthScale (> 1 memperlambat, < 1 mempercepat), noiseScale, noiseWScale, sentenceSilence, normalizeAudio, volume dan outputFormat (wav, raw, mp3, ogg atau opus). mp3 dan opus memiliki solusi JS murni; ogg membutuhkan FFmpeg. phonemize() dan synthesizeChunks() memberi akses tingkat rendah, kalimat per kalimat.

  5. 05

    Wrapper lawas (PiperTTS)

    PiperTTS menjalankan python3 -m piper, 1 proses per sintesis: sekitar 10 kali lebih lambat, hanya untuk lingkungan tempat mesin native tidak berjalan. Membutuhkan Python dan modul 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");