«Когда текст уже написал, а говорить лень — это не прокрастинация, это стратегическая оптимизация голосовых связок». И вот под такую стратегию идеально заходит Sopro — лёгкая английская TTS‑модель, которая превращает текст в речь, пока вы экономите дыхание на что‑нибудь поважнее.

Sopro (от португальского «дуновение») — проект одного энтузиаста, обученный без дата‑центров и сотни A100. Всего одна L40S, примерно 169 млн параметров — и при этом вполне рабочий набор фич:

  • стриминг‑синтез,
  • zero‑shot клон голосов по 3–12 секундам эталонного аудио,
  • скорость около 0.25 RTF на CPU (на M3: 30 секунд речи за 7.5 секунд).

Вместо модного трансформера здесь композиция из дилатированных свёрток в стиле WaveNet и лёгких слоёв кросс‑внимания. Архитектура попроще, но практичная, особенно если у вас не кластер, а скромная машина под столом (как у большинства разработчиков и исследователей, в том числе в России, где умение выжать максимум из «железа» — отдельный вид искусства).

Как запустить

Зависимости минимальны — автор сознательно не завинчивал версии до последнего числа. Установка классическая:

pip install sopro
# или из репозитория
git clone https://github.com/samuel-vitorino/sopro
cd sopro
pip install -e .

На macOS с M‑процессорами автор рекомендует torch==2.6.0 без torchvision — так TTS заметно ускоряется.

Использование: от CLI до Python

Через CLI:

soprotts \
  --text "Sopro is a lightweight 169 million parameter text-to-speech model." \
  --ref_audio ref.wav \
  --out out.wav

Помимо temperature и top_p, есть полезные штуки:

  • --style_strength — насколько сильно модель тянется к стилю эталонного голоса;
  • --no_stop_head, --stop_threshold, --stop_patience — управление ранней остановкой, чтобы фраза не обрывалась и не затягивалась.

В Python всё так же просто:

from sopro import SoproTTS

tts = SoproTTS.from_pretrained("samuel-vitorino/sopro", device="cpu")
wav = tts.synthesize(
    "Hello! This is a non-streaming Sopro TTS example.",
    ref_audio_path="ref.wav",
)
tts.save_wav("out.wav", wav)

Или потоковый режим с постепенной отдачей чанков — удобно для веб‑сервисов и ботов.

Веб‑демо и Docker

Для интерактивной игрушки есть демо‑сервер:

pip install -r demo/requirements.txt
uvicorn demo.server:app --host 0.0.0.0 --port 8000
# либо
docker build -t sopro-demo .
docker run --rm -p 8000:8000 sopro-demo

Дальше — в браузер на http://localhost:8000 и можно кликать, слушать и крутить параметры.

Ограничения и перспектива

Sopro честно предупреждает:

  • модель не всегда стабильна — иногда придётся поиграть с параметрами;
  • клон голоса сильно зависит от качества микрофона и шумов;
  • лучше писать слова, а не «1 + 2», хотя аббревиатуры уровня «CPU», «TTS» она переваривает;
  • стриминг даёт чуть другое качество, чем нестриминговый режим;
  • генерация сейчас ограничена примерно 32 секундами, дальше начинаются привычные для нейросетей «галлюцинации».

Датасеты — открытые: Emilia YODAS, LibriTTS‑R, Mozilla Common Voice 22, MLS. Код тренировки автор обещает выложить, как только разберёт «творческий хаос» в репозитории.

Всё это делает Sopro отличным примером того, как даже без безумных бюджетов можно собрать рабочий, быстрый TTS — который легко адаптировать, интегрировать в свои сервисы и, при желании, дообучить под собственные голоса и акценты.