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.
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.
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
└── ...- 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.
Tìm tập dữ liệu LJSpeech trên Hugging Face ↗Tải phương tiện nguồn bằng yt-dlp - 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ỏ
- 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. - 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/ - 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 --- - 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 ↗
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.
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.
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.
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ì.
- 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-ttspython -m piper.download_voices en_US-lessac-medium - 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 - 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." - 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 - 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) - 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.
- 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."
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.
- 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 - 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); - 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 }); - 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.
- 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");
