Newer
Older
voice / docs / 05_usage.md

Использование и развёртывание

Установка

python3.11 -m venv .venv
source .venv/bin/activate
pip install torch torchaudio --index-url https://download.pytorch.org/whl/cu126
pip install -r requirements.txt
cp .env.example .env
# отредактировать .env под свой бэкенд

Запуск: S2-Pro INT4 (рекомендуемый)

Требуется PyTorch 2.4.0+cu121 (установлен). S2-сервер и WebSocket-прокси запускаются в разных терминалах:

# Терминал 1: S2 API сервер
cd models/fish-speech
PYTHONPATH=. /home/gmikcon/Projects/voice/.venv/bin/python tools/api_server.py \
  --llama-checkpoint-path checkpoints/fs-1.2-int4-g128-s2-pro-nf4 \
  --decoder-checkpoint-path checkpoints/s2-pro/codec.pth \
  --listen 127.0.0.1:8081 --compile
# Первый запуск ~3.5 мин (компиляция), потом ~50 tok/s, ~9.6 GB VRAM

# Терминал 2: WebSocket прокси
cd /home/gmikcon/Projects/voice
TTS_BACKEND=s2 python -m voice_tts.main

S2 без компиляции (меньше VRAM, медленнее)

# Без --compile: ~6 tok/s
cd models/fish-speech && PYTHONPATH=. /home/gmikcon/Projects/voice/.venv/bin/python \
  tools/api_server.py \
  --llama-checkpoint-path checkpoints/fs-1.2-int4-g128-s2-pro-nf4 \
  --decoder-checkpoint-path checkpoints/s2-pro/codec.pth \
  --listen 127.0.0.1:8081

Обновление чекпоинта S2

Если выходит новая версия S2-Pro:

  1. Скачать новый чекпоинт с HuggingFace
  2. Запустить квантизацию: python tools/llama/quantize.py --checkpoint-path ... --mode int4 --groupsize 128
  3. Обновить --llama-checkpoint-path на новый квантизованный чекпоинт

Запуск: Fish Speech 1.5

TTS_BACKEND=fish_speech \
DEFAULT_VOICE_REF=voices/default_ref.wav \
DEFAULT_REF_TEXT="текст референса" \
WARMUP=true \
python -m voice_tts.main

Запуск: XTTS-v2

TTS_BACKEND=xtts_v2 \
DEFAULT_VOICE_REF=voices/default_ref.wav \
python -m voice_tts.main

Модель скачивается автоматически при первом запуске.

Запуск: тестовый dummy

TTS_BACKEND=dummy python -m voice_tts.main

Проверка

curl http://localhost:8765/health
# {"status":"ok","backend":"s2"}

Клиенты

В examples/:

  • client_python.py — Python-клиент с sounddevice
  • client_browser.html — браузерный клиент
pip install websockets sounddevice
python examples/client_python.py --uri ws://localhost:8765/ws "Привет, мир!"

Референсные аудио

Поместите в voices/:

voices/
├── product_voice_sample_clean.wav
├── product_voice_sample_clean.lab  (точный транскрипт для Fish Speech)
└── ...

Требования:

  • WAV, моно, 16+ кГц
  • 5–15 секунд чистой речи одного спикера
  • Для Fish Speech рядом с .wav можно положить .lab с транскриптом

Тесты

pytest tests/ -v

Добавление нового бэкенда

  1. Создать файл src/voice_tts/tts/my_model.py
  2. Унаследоваться от TTSEngine, добавить декоратор:
from voice_tts.tts import register as _register_backend
from voice_tts.tts.engine import TTSEngine

@_register_backend("my_model")
class MyEngine(TTSEngine):
    def __init__(self):
        # читать настройки из voice_tts.config.settings

    async def synthesize(self, text, ref_audio_path, language, speed, emotion, ref_text=None):
        ...

    async def warm_up(self):
        ...
  1. Готово — бэкенд доступен через TTS_BACKEND=my_model

Переменные окружения

Полный список — в .env.example.