ПРАКТИЧЕСКОЕ РУКОВОДСТВО · PIPER TTS

От записей
к голосу.

Основные шаги по подготовке голосовых данных и обучению модели Piper. Ограничения Kaggle могут меняться, поэтому проверьте свою квоту перед долгим обучением.

01СТРУКТУРА АРХИВА

Создать набор данных LJSpeech для Piper TTS

LJSpeech: стандартный формат, который ожидает Piper. Каждое предложение, отдельный файл WAV с расшифровкой в metadata.csv.

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

    Соберите аудиофайлы

    Используйте записи, которые вы вправе обрабатывать и распространять. Источниками могут быть игровые вики, принадлежащие вам медиа или публичные наборы данных.

  2. 02

    Разделите аудио на предложения

    Подготовьте по одному файлу WAV на предложение. Для автоматического разделения или выравнивания вы можете использовать:

    • audiosplitter · автоматическое разделение
    • Montreal Forced Aligner (MFA) · принудительное выравнивание
    • faster-whisper + VAD · расшифровка и временные метки
    • Audacity · ручная нарезка для небольших объёмов
  3. 03

    Создайте metadata.csv

    Одна строка на файл. Разделитель: вертикальная черта; имя должно точно совпадать с файлом в папке wavs/.

    000001.wav|Это пример предложения.
    000002.wav|Вот ещё одно предложение для обучения.
  4. 04

    Упакуйте архив

    Поместите metadata.csv и папку wavs/ в корень архива.

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

    Загрузите на Hugging Face

    Создайте репозиторий набора данных, например user/wheatley-english-ljspeech. Добавьте data.zip и файл README.md с такой конфигурацией:

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

    Опубликуйте на форуме Piper

    Создайте тему в канале наборов данных и обучения со ссылкой на Hugging Face и подходящим тегом.

    Открыть канал Discord ↗
02KAGGLE · GPU

Обучить голос на Kaggle

Квота GPU назначается Kaggle вашей учётной записи и может меняться в зависимости от доступности. Проверьте счётчик перед запуском долгой сессии.

Недельная квота GPU30 ч · иногда больше

Kaggle указывает базовые 30 часов в неделю, но при наличии ресурсов и в зависимости от спроса объём может быть больше. Квота сбрасывается в субботу в 00:00 UTC.

Максимальная длительность сессии12 часов

Документация Kaggle указывает непрерывный лимит в 12 часов для сессий CPU и GPU. Блокнот только на CPU не расходует квоту GPU, но длительность его сессии всё равно ограничена.

Доступный ускорительT4 x2

Kaggle вывел Tesla P100 из эксплуатации 15 сентября 2026 года. T4 x2 по-прежнему доступен в блокнотах; выберите его для обучения Piper вместо устаревших руководств по P100.

↻

Продолжение после прерывания

Полное обучение часто превышает 12-часовую сессию. Блокнот Piper этого проекта продолжает работу с контрольной точки Hugging Face: после прерывания или исчерпания квоты перезапустите его, чтобы продолжить с последней сохранённой контрольной точки.

Перед долгим обучением

  • Проверьте оставшуюся квоту в настройках блокнота, в своём профиле или на странице использования ускорителей.
  • Останавливайте сессии GPU, когда вы их не используете.
  • Используйте T4 x2; P100 больше недоступен на Kaggle.

Квоты, ускорители и интерфейсы Kaggle могут меняться. Перед обучением всегда проверяйте сведения, показанные в вашей учётной записи.

03PIPER · LOCAL TTS

Использовать голос Piper

Установите Piper, получите два файла выбранного голоса и создайте WAV локально. Приведённые ниже команды используют версию, поддерживаемую Open Home Foundation.

  1. 01

    Установить Piper

    Piper распространяется как пакет Python. Старые руководства, использующие репозиторий rhasspy/piper или его бинарный архив, относятся к исторической версии.

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

    Скачать голос

    Выберите голос в каталоге и скачайте его модель ONNX и соответствующий файл конфигурации JSON. Храните оба файла вместе; путь JSON: путь модели с добавлением .json.

    voice.onnx
    voice.onnx.json
  3. 03

    Создать файл WAV

    Сначала скачайте голос из каталога Piper или замените имя ниже путём к вашему файлу .onnx.

    python -m piper -m ./voice.onnx -f output.wav -- "Bonjour, ceci est un test."
  4. 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
  5. 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)
  6. 06

    С Home Assistant

    Piper подключается к Home Assistant через Wyoming. Добавьте Piper в разделе «Настройки → Устройства и службы», затем используйте действие tts.speak с сущностью TTS Piper.

    Настроить Piper в Home Assistant ↗

    С Node-RED

    Пакет node-red-contrib-piper-tts, упомянутый в некоторых руководствах, не найден в публичном каталоге. Один из вариантов: вызывать команду Piper из встроенного узла Exec; адаптируйте пути и права доступа к вашей установке.

  7. 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."
04NODE.JS · TYPESCRIPT

Использовать Piper в проекте Node.js с pipertts

pipertts открывает Piper для Node.js: запись в файлы или аудио в памяти. Рекомендуемый режим: PiperNativeTTS, полностью нативный внутрипроцессный инференс (ONNX и скомпилированный мост espeak), без Python, примерно в 10 раз быстрее обёртки. Голоса (.onnx и .onnx.json) остаются отдельными файлами.

  1. 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
  2. 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);
  3. 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 });
  4. 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() дают низкоуровневый доступ, предложение за предложением.

  5. 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");