pyaudio / sounddevice / alsaaudio.asyncio.Queue гарантирует последовательный доступ к GPU и предсказуемое потребление VRAM.stop_event — центральный механизм:
SessionState.stop() устанавливает флаг.stop новое сообщение text автоматически сбрасывает флаг и начинает новую фразу.Цель — найти баланс между:
Параметры по умолчанию:
min_segment_length = 30max_segment_length = 200max_buffer_wait_ms = 500Для русского языка предложения обычно короче, чем на английском, поэтому max_length выбран консервативно.
models/fishaudio_fish-speech-1.5/: model.pth, firefly-gan-vq-fsq-8x1024-21hz-generator.pth, tokenizer.tiktoken, config.json, special_tokens.json.models/fish-speech-v1.5.1/ добавляется в sys.path для импорта модулей..lab рядом с референсом, затем DEFAULT_REF_TEXT, затем Whisper-транскрипция, затем placeholder.TTS_SPEED).asyncio.Lock и asyncio.to_thread.FISH_USE_MEMORY_CACHE=on — кэшировать VQ-представление референса (включено).FISH_CHUNK_LENGTH — длина LLM-чанка (100–300, по умолчанию 200). Больше = длиннее связные куски, но выше задержка.FISH_COMPILE=true — пытается включить torch.compile. Не включать по умолчанию: при повторном инференсе возникает ошибка accessing tensor output of CUDAGraphs that has been overwritten. Исследуется отдельно.DEFAULT_REF_TEXT: ~5–6 с, большая часть уходит на Whisper-транскрипцию.DEFAULT_REF_TEXT и WARMUP=true: загрузка модели + один инференс.| Показатель | Fish Speech 1.5 | XTTS-v2 |
|---|---|---|
| RTF | ~1.4 | ~0.34 |
| Русская интонация | естественнее | приемлемо, акцент чаще |
| Английская речь | хорошо | хорошо |
| Размер weights | ~2 ГБ LLM + VQGAN | ~3 ГБ |
| Sample rate | 44,1 кГц | 24 кГц |
| Требует ref transcript | да, точный | да, но терпимее |
torch.compile |
нестабилен | не применяется |
tts_models/multilingual/multi-dataset/xtts_v2.TTS_BACKEND=xtts_v2.TTS_MODEL_PATH.examples/client_*.py/examples/client_browser.html настроены на динамический sample rate из сообщений audio.Базовая модель F5TTS_v1_Base поддерживает несколько языков из коробки. Инференс на коротких тестовых фразах работает для:
При этом важные нюансы:
language токен; язык определяется по тексту. Для смешанных текстов (ru + en) возможны переключения произношения.voice_refs по эмоциям; можно добавить language в профиль голоса и выбирать референс в зависимости от языка.MeloTTS или другой TTS, который лучше произносит конкретный язык.Сейчас оставляем Fish Speech 1.5 как бэкенд по умолчанию для en/ru, XTTS-v2 — как быстрый резерв. Архитектура (TTSEngine + _BACKEND_MAP) позволяет добавить fallback позже.
stop во время CUDA kernel не прервёт уже запущенный kernel, но предотвратит отправку результата.main.py создаёт engine до старта uvicorn; при TTS_BACKEND=fish_speech первый запуск занимает десяток секунд из-за загрузки LLM и VQ-GAN.