Синтез речи на обычном процессоре без мучений с GPU
Знакомая история: хочется добавить в проект озвучку текста, но как только доходит до дела, начинаются проблемы. Либо ты привязываешься к платному API, которое может отвалиться или подорожать, либо пытаешься запустить нейронку локально и тонешь в зависимостях CUDA, пытаясь подружить веса модели с видеокартой. А если у пользователя вообще нет дискретной графики?
Недавно наткнулся на проект Pocket TTS от ребят из Kyutai Labs. Идея простая: сделать качественный Text-to-Speech, который летает на обычном процессоре и ставится одной командой. Кажется, это именно то, чего не хватало для пет-проектов и локальных утилит.
Что под капотом
Разработчики не стали гнаться за миллиардами параметров. В Pocket TTS их всего 100 миллионов. Для сравнения: современные LLM начинаются от 7-8 миллиардов. Благодаря такому компактному размеру модель потребляет минимум ресурсов и выдает первый кусочек аудио уже через 200 миллисекунд после запроса.
На моем MacBook Air с процессором M4 генерация идет в шесть раз быстрее реального времени. То есть длинный абзац текста превращается в аудио почти мгновенно. При этом библиотека использует всего два ядра процессора, так что остальная система не превращается в тыкву во время работы скрипта.
Чем проект интересен на практике
Самое приятное — здесь не нужно возиться с драйверами. Нужен Python 3.10+ и PyTorch версии 2.5 или выше. Причем подойдет обычная CPU-версия торча, что экономит кучу места на диске.
Голосовой клонинг из коробки
Меня зацепило, что в Pocket TTS можно не просто выбирать из встроенного списка голосов, но и подсовывать свои. Достаточно передать путь к короткому WAV-файлу с примером речи, и модель попытается скопировать тембр и интонацию. Конечно, это не студийное качество DeepFake, но для игровых персонажей или личного ассистента звучит вполне убедительно.
Стриминг аудио
Модель умеет отдавать аудио потоком. Это критично, если вы озвучиваете длинные тексты или книги: не нужно ждать, пока сгенерируется весь файл целиком, можно начинать воспроизведение сразу.
Мультиязычность
На текущий момент поддерживаются английский, французский, немецкий, португальский, итальянский и испанский. Русского пока нет, но архитектура позволяет добавлять новые языки. Для не-английских языков есть версии потяжелее (на 24 слоя), они звучат чище, но работают чуть медленнее.
Как это запустить
Самый быстрый способ потыкать библиотеку — использовать uv. Если он у вас стоит, просто выполните:
uvx pocket-tts generate --text "Hello, how are you today?" --voice alba
Эта команда скачает веса (они подтягиваются автоматически с Hugging Face) и создаст файл tts_output.wav.
Если вы хотите встроить это в свой Python-код, API выглядит максимально лаконично:
from pocket_tts import TTSModel
import scipy.io.wavfile
# Загружаем модель один раз
tts_model = TTSModel.load_model()
# Готовим голос (предустановленный или из файла)
voice_state = tts_model.get_state_for_audio_prompt("alba")
# Генерируем тензор с данными
audio = tts_model.generate_audio(voice_state, "This is a simple test.")
# Сохраняем результат
scipy.io.wavfile.write("output.wav", tts_model.sample_rate, audio.numpy())
Кстати, операции load_model и get_state_for_audio_prompt довольно тяжелые. Если планируете генерировать много фраз, держите модель в памяти. Для ускорения загрузки конкретного голоса его состояние можно экспортировать в формат .safetensors — тогда в следующий раз он подгрузится мгновенно.
Где это использовать
Помимо очевидных ботов для Discord или Telegram, сообщество уже напридумывало массу применений:
- Моды для игр. Например, есть проект Sonorus для Hogwarts Legacy, где персонажи озвучиваются этим движком.
- Читалки книг и экранные дикторы.
- Интеграции с Home Assistant для умного дома.
- Локальные AI-агенты, которым нужен «голос» без задержек на сетевые запросы.
Интересно, что проект уже начали портировать на всё подряд: есть версии на Rust, C++, C# и даже реализации для WebAssembly, которые работают прямо в браузере.
Итоги
Pocket TTS — это отличный пример того, что нейронки не обязательно должны требовать серверную стойку с H100. Если вам нужно быстрое, локальное и бесплатное решение для озвучки, которое заведется даже на ноутбуке пятилетней давности, это ваш выбор.
Из минусов: пока нет официальной поддержки русского языка и нельзя просто так добавить паузы в текст через спецсимволы (хотя разработчики обещают это поправить). В остальном — это, пожалуй, самый дружелюбный вход в мир локального TTS на сегодня.
Попробовать демо без установки можно на сайте Kyutai.