HƯỚNG DẪN THỰC HÀNH · PIPER TTS

Từ bản ghi âm
thành giọng đọc.

Các bước thiết yếu để chuẩn bị dữ liệu giọng nói và huấn luyện mô hình Piper. Giới hạn của Kaggle có thể thay đổi: hãy kiểm tra hạn mức của bạn trước một đợt huấn luyện dài.

01CẤU TRÚC LƯU TRỮ

Tạo tập dữ liệu LJSpeech cho Piper TTS

LJSpeech là định dạng chuẩn mà Piper yêu cầu. Mỗi câu là một tệp WAV riêng, kèm bản ghi trong metadata.csv.

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

    Thu thập tệp âm thanh

    Hãy dùng các bản ghi mà bạn được phép xử lý và phân phối lại. Nguồn có thể là wiki trò chơi, phương tiện bạn sở hữu, hoặc tập dữ liệu công khai.

  2. 02

    Cắt âm thanh thành câu

    Chuẩn bị 1 tệp WAV cho mỗi câu. Để cắt tự động hoặc căn chỉnh, bạn có thể dùng:

    • audiosplitter · cắt tự động
    • Montreal Forced Aligner (MFA) · căn chỉnh cưỡng bức
    • faster-whisper + VAD · ghi lời và mốc thời gian
    • Audacity · cắt thủ công cho khối lượng nhỏ
  3. 03

    Tạo metadata.csv

    1 dòng cho mỗi tệp. Dấu phân cách là gạch đứng; tên phải khớp chính xác với tệp trong thư mục wavs/.

    000001.wav|Đây là một câu ví dụ.
    000002.wav|Đây là một câu khác để huấn luyện.
  4. 04

    Nén kho lưu trữ

    Đặt metadata.csv và thư mục wavs/ ở thư mục gốc của kho lưu trữ.

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

    Tải lên Hugging Face

    Tạo kho tập dữ liệu, ví dụ user/wheatley-english-ljspeech. Thêm data.zip và README.md chứa cấu hình:

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

    Đăng lên diễn đàn Piper

    Tạo chủ đề trong kênh tập dữ liệu và huấn luyện kèm liên kết Hugging Face và thẻ phù hợp.

    Mở kênh Discord ↗
02KAGGLE · GPU

Huấn luyện giọng đọc trên Kaggle

Kaggle cấp hạn mức GPU cho tài khoản và mức này có thể thay đổi theo tình trạng khả dụng. Hãy kiểm tra bộ đếm trước khi bắt đầu phiên dài.

Hạn mức GPU hằng tuần30 giờ · đôi khi hơn

Kaggle ghi mức cơ sở 30 giờ mỗi tuần, có thể cao hơn tùy nhu cầu và tài nguyên khả dụng. Hạn mức đặt lại vào thứ Bảy lúc 00:00 UTC.

Thời lượng tối đa một phiên12 giờ

Tài liệu Kaggle ghi giới hạn liên tục 12 giờ cho các phiên CPU và GPU. Notebook chỉ dùng CPU không tốn hạn mức GPU, nhưng thời lượng phiên vẫn bị giới hạn.

Bộ tăng tốc khả dụngT4 x2

Kaggle đã loại Tesla P100 vào ngày 15 tháng 9 năm 2026. T4 x2 vẫn có trong notebook; hãy chọn nó để huấn luyện Piper thay vì theo các hướng dẫn P100 cũ.

↻

Tiếp tục sau gián đoạn

Một đợt huấn luyện đầy đủ thường vượt quá 12 giờ của một phiên. Notebook Piper của dự án này tiếp tục từ checkpoint Hugging Face: sau gián đoạn hoặc hết hạn mức, hãy chạy lại để tiếp tục từ checkpoint đã lưu mới nhất.

Trước một đợt huấn luyện dài

  • Kiểm tra hạn mức còn lại trong cài đặt notebook, hồ sơ của bạn hoặc trang mức dùng bộ tăng tốc.
  • Dừng các phiên GPU khi bạn không dùng chúng.
  • Dùng T4 x2; P100 không còn trên Kaggle.

Hạn mức, bộ tăng tốc và giao diện của Kaggle có thể thay đổi. Luôn kiểm tra thông tin hiển thị trong tài khoản của bạn trước khi huấn luyện.

03PIPER · LOCAL TTS

Dùng giọng đọc Piper

Cài Piper, lấy 2 tệp của giọng đọc đã chọn, rồi tạo WAV ngay trên thiết bị. Các lệnh dưới đây dùng phiên bản do Open Home Foundation duy trì.

  1. 01

    Cài đặt Piper

    Piper được phân phối dưới dạng gói Python. Các hướng dẫn cũ dùng kho rhasspy/piper hoặc kho lưu trữ nhị phân của nó là phiên bản lịch sử.

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

    Tải xuống giọng đọc

    Chọn giọng đọc trong danh mục rồi tải mô hình ONNX và tệp cấu hình JSON đi kèm. Giữ 2 tệp cạnh nhau; đường dẫn JSON là đường dẫn mô hình kèm .json.

    voice.onnx
    voice.onnx.json
  3. 03

    Tạo tệp WAV

    Trước tiên hãy tải giọng đọc từ danh mục Piper, hoặc thay tên dưới đây bằng đường dẫn tệp .onnx của bạn.

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

    Đọc văn bản từ tệp

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

    Đọc âm thanh ở đầu ra trực tiếp

    Tần số mẫu phụ thuộc vào giọng đọc. Kiểm tra voice.onnx.json và thay 22050 nếu cần.

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

    Từ 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

    Với Home Assistant

    Piper tích hợp với Home Assistant qua Wyoming. Thêm Piper trong Cài đặt → Thiết bị và dịch vụ, rồi dùng hành động tts.speak với thực thể TTS Piper.

    Thiết lập Piper trong Home Assistant ↗

    Với Node-RED

    Gói node-red-contrib-piper-tts được nêu trong một số hướng dẫn chưa được xác nhận trong danh mục công khai. Một cách là gọi lệnh Piper từ nút Exec tích hợp; điều chỉnh đường dẫn và quyền truy cập theo cài đặt của bạn.

  7. 07

    Điều chỉnh kết quả

    Chất lượng phụ thuộc một phần vào dữ liệu huấn luyện và giọng đọc đã chọn. Giá trị length-scale cao hơn làm chậm giọng nói; giá trị thấp hơn làm nhanh hơn. noise-scale và noise-w thay đổi độ biến thiên của kết quả.

    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

Tích hợp Piper trong dự án Node.js bằng pipertts

pipertts đưa Piper vào Node.js, với đầu ra tệp hoặc âm thanh trong bộ nhớ. Chế độ khuyến nghị là PiperNativeTTS: suy luận 100% gốc trong tiến trình (ONNX + cầu espeak đã biên dịch), không cần Python, nhanh gấp khoảng 10 lần wrapper. Giọng đọc (.onnx + .onnx.json) vẫn là các tệp riêng.

  1. 01

    Cài đặt các phụ thuộc

    Tài liệu ghi Node.js 18+ và TypeScript 5+. Chế độ gốc không cần gì thêm: chỉ npm install là đủ. Chế độ wrapper cổ điển (PiperTTS qua python3 -m piper) còn cần Python và mô đun Piper. Chọn theo ID danh mục có thể tải mô hình và cấu hình của nó vào models/.

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

    Bắt đầu nhanh với giọng đọc danh mục

    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

    Dùng mô hình cục bộ

    Với giọng đọc tải xuống thủ công, hãy truyền đường dẫn tệp ONNX. Tệp .onnx.json đi kèm phải đặt cạnh bên; bạn có thể chỉ rõ configPath nếu vị trí của nó khác.

    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 và định dạng

    synthesize() trả về audio (Buffer), sampleRate và text; outputFile cũng ghi ra đĩa. Tùy chọn: speakerId (đa giọng đọc và đa phong cách), lengthScale (> 1 làm chậm, < 1 làm nhanh), noiseScale, noiseWScale, sentenceSilence, normalizeAudio, volume và outputFormat (wav, raw, mp3, ogg hoặc opus). mp3 và opus có giải pháp JS thuần; ogg cần FFmpeg. phonemize() và synthesizeChunks() cho quyền truy cập cấp thấp, từng câu một.

  5. 05

    Wrapper cũ (PiperTTS)

    PiperTTS khởi chạy python3 -m piper, 1 tiến trình cho mỗi lần tổng hợp: chậm hơn khoảng 10 lần, chỉ dành cho môi trường mà engine gốc không chạy được. Cần Python và mô đun 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");