Kaggle указывает базовые 30 часов в неделю, но при наличии ресурсов и в зависимости от спроса объём может быть больше. Квота сбрасывается в субботу в 00:00 UTC.
ПРАКТИЧЕСКОЕ РУКОВОДСТВО · PIPER TTS
От записей
к голосу.
Основные шаги по подготовке голосовых данных и обучению модели Piper. Ограничения Kaggle могут меняться, поэтому проверьте свою квоту перед долгим обучением.
Создать набор данных LJSpeech для Piper TTS
LJSpeech: стандартный формат, который ожидает Piper. Каждое предложение, отдельный файл WAV с расшифровкой в metadata.csv.
data.zip
├── metadata.csv # nom_du_fichier|transcription
└── wavs/
├── 000001.wav
└── ...- 01
Соберите аудиофайлы
Используйте записи, которые вы вправе обрабатывать и распространять. Источниками могут быть игровые вики, принадлежащие вам медиа или публичные наборы данных.
Найти наборы LJSpeech на Hugging Face ↗Скачать исходное видео с помощью yt-dlp - 02
Разделите аудио на предложения
Подготовьте по одному файлу WAV на предложение. Для автоматического разделения или выравнивания вы можете использовать:
- audiosplitter · автоматическое разделение
- Montreal Forced Aligner (MFA) · принудительное выравнивание
- faster-whisper + VAD · расшифровка и временные метки
- Audacity · ручная нарезка для небольших объёмов
- 03
Создайте metadata.csv
Одна строка на файл. Разделитель: вертикальная черта; имя должно точно совпадать с файлом в папке wavs/.
000001.wav|Это пример предложения. 000002.wav|Вот ещё одно предложение для обучения. - 04
Упакуйте архив
Поместите metadata.csv и папку wavs/ в корень архива.
zip -r data.zip metadata.csv wavs/ - 05
Загрузите на Hugging Face
Создайте репозиторий набора данных, например user/wheatley-english-ljspeech. Добавьте data.zip и файл README.md с такой конфигурацией:
--- configs: - config_name: default data_files: - split: train path: data.zip --- - 06
Опубликуйте на форуме Piper
Создайте тему в канале наборов данных и обучения со ссылкой на Hugging Face и подходящим тегом.
Открыть канал Discord ↗
Обучить голос на Kaggle
Квота GPU назначается Kaggle вашей учётной записи и может меняться в зависимости от доступности. Проверьте счётчик перед запуском долгой сессии.
Документация Kaggle указывает непрерывный лимит в 12 часов для сессий CPU и GPU. Блокнот только на CPU не расходует квоту GPU, но длительность его сессии всё равно ограничена.
Kaggle вывел Tesla P100 из эксплуатации 15 сентября 2026 года. T4 x2 по-прежнему доступен в блокнотах; выберите его для обучения Piper вместо устаревших руководств по P100.
Продолжение после прерывания
Полное обучение часто превышает 12-часовую сессию. Блокнот Piper этого проекта продолжает работу с контрольной точки Hugging Face: после прерывания или исчерпания квоты перезапустите его, чтобы продолжить с последней сохранённой контрольной точки.
Перед долгим обучением
- Проверьте оставшуюся квоту в настройках блокнота, в своём профиле или на странице использования ускорителей.
- Останавливайте сессии GPU, когда вы их не используете.
- Используйте T4 x2; P100 больше недоступен на Kaggle.
Квоты, ускорители и интерфейсы Kaggle могут меняться. Перед обучением всегда проверяйте сведения, показанные в вашей учётной записи.
Использовать голос Piper
Установите Piper, получите два файла выбранного голоса и создайте WAV локально. Приведённые ниже команды используют версию, поддерживаемую Open Home Foundation.
- 01
Установить Piper
Piper распространяется как пакет Python. Старые руководства, использующие репозиторий rhasspy/piper или его бинарный архив, относятся к исторической версии.
python -m pip install piper-ttspython -m piper.download_voices en_US-lessac-medium - 02
Скачать голос
Выберите голос в каталоге и скачайте его модель ONNX и соответствующий файл конфигурации JSON. Храните оба файла вместе; путь JSON: путь модели с добавлением .json.
voice.onnx
voice.onnx.json - 03
Создать файл WAV
Сначала скачайте голос из каталога Piper или замените имя ниже путём к вашему файлу .onnx.
python -m piper -m ./voice.onnx -f output.wav -- "Bonjour, ceci est un test." - 04
Читать текст из файла
python -m piper -m ./voice.onnx -f output.wav --input-file mon_texte.txtВыводить звук напрямую
Частота дискретизации зависит от голоса. Проверьте voice.onnx.json и при необходимости замените 22050.
echo "Bonjour." | python -m piper -m ./voice.onnx --output-raw | aplay -r 22050 -f S16_LE -c 1 -t raw - 05
Из 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
С Home Assistant
Piper подключается к Home Assistant через Wyoming. Добавьте Piper в разделе «Настройки → Устройства и службы», затем используйте действие tts.speak с сущностью TTS Piper.
Настроить Piper в Home Assistant ↗С Node-RED
Пакет node-red-contrib-piper-tts, упомянутый в некоторых руководствах, не найден в публичном каталоге. Один из вариантов: вызывать команду Piper из встроенного узла Exec; адаптируйте пути и права доступа к вашей установке.
- 07
Настроить звучание
Качество зависит, среди прочего, от обучающих данных и выбранного голоса. Более высокое значение length-scale замедляет речь, более низкое ускоряет её. Параметры noise-scale и noise-w меняют вариативность генерации.
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 в проекте Node.js с pipertts
pipertts открывает Piper для Node.js: запись в файлы или аудио в памяти. Рекомендуемый режим: PiperNativeTTS, полностью нативный внутрипроцессный инференс (ONNX и скомпилированный мост espeak), без Python, примерно в 10 раз быстрее обёртки. Голоса (.onnx и .onnx.json) остаются отдельными файлами.
- 01
Установить зависимости
В документации указаны Node.js 18+ и TypeScript 5+. Нативный режим больше ничего не требует: достаточно npm install. Классический режим обёртки (PiperTTS через python3 -m piper) дополнительно требует Python и модуль Piper. Выбор по идентификатору каталога может скачать модель и её конфигурацию в models/.
npm install pipertts # mode wrapper uniquement : python3 -m pip install piper-tts - 02
Быстрый старт с голосом из каталога
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
Использовать локальную модель
Для голоса, скачанного вручную, передайте путь к файлу ONNX. Соответствующий файл .onnx.json должен лежать рядом; если конфигурация находится в другом месте, укажите configPath.
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 и форматы
synthesize() возвращает audio (Buffer), sampleRate и text; outputFile также записывает на диск. Параметры: speakerId (несколько голосов и стилей), lengthScale (> 1 замедляет, < 1 ускоряет), noiseScale, noiseWScale, sentenceSilence, normalizeAudio, volume и outputFormat (wav, raw, mp3, ogg или opus). Для mp3 и opus есть чисто JS-решения; для ogg нужен FFmpeg. Функции phonemize() и synthesizeChunks() дают низкоуровневый доступ, предложение за предложением.
- 05
Устаревшая обёртка (PiperTTS)
PiperTTS запускает python3 -m piper, по одному процессу на синтез: примерно в 10 раз медленнее, подходит только для окружений, где нативный движок не работает. Требует Python и модуль 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");
