СейчасЧто такое OmniVoice
- Что такое OmniVoice
- Основные возможности
- Что нужно для запуска
- Установка
- Быстрый старт без кода
- Интеграция через Python API и командную строку
- Клонирование голоса через Python API
- Переиспользование клона между сессиями
- Voice Design: голос по описанию
- Auto Voice: автоматический выбор голоса
- Параметры генерации
- Нормализация чисел и дат
- Управление произношением
- Командная строка
- Как проверить результат
- Лицензия и ограничения
- Полезные сценарии
- Аудиоверсии статей собственным голосом
- Многоязычные версии материала
- Аудиокниги и подкасты
- Локальные уведомления и голосовые интерфейсы
- Прототипы персонажей и дубляжа
- Наш контур озвучки pimenov.ai на Mac mini
- Официальные ссылки
- Следующий шаг
- Связанные материалы
Локальная open-source модель синтеза речи (TTS) на 600+ языков: клонирует голос по образцу длительностью 3–10 секунд и после загрузки моделей может работать на своём железе. Здесь — возможности OmniVoice, установка, основные режимы генерации и практический контур озвучки pimenov.ai на Mac mini.
Что такое OmniVoice
OmniVoice — open-source TTS-модель команды k2-fsa. Среди авторов проекта — Daniel Povey. Модель построена на архитектуре в стиле диффузионной языковой модели и поддерживает синтез на 600+ языках, клонирование голоса и создание голоса по текстовому описанию.
Главное практическое отличие от облачных сервисов вроде Yandex SpeechKit или ElevenLabs — возможность выполнять синтез локально. Для самого инференса не нужны API-ключи, оплата за символы или отправка озвучиваемого текста во внешний сервис.
Основные возможности
| Возможность | Что даёт |
| 600+ языков | Широкое языковое покрытие для zero-shot-синтеза |
| Клонирование голоса | Использует образец длительностью 3–10 секунд без отдельного дообучения |
| Voice Design | Создаёт голос по атрибутам: пол, возраст, высота тона, акцент или шёпот |
| Управление произношением | Поддерживает невербальные вставки и коррекцию произношения |
| Быстрый инференс | В официальных тестах заявлен RTF (коэффициент реального времени, отношение времени генерации к длительности аудио) от 0.025, то есть до 40 раз быстрее реального времени |
Что нужно для запуска
- Python и свежее виртуальное окружение (
conda,venv). - PyTorch под выбранное оборудование.
- Ускоритель: NVIDIA GPU через CUDA, Apple Silicon через MPS или Intel Arc GPU через XPU. CUDA, MPS и XPU — варианты ускорения PyTorch для соответствующих платформ.
- Образец голоса длительностью 3–10 секунд для клонирования. Для Voice Design и Auto Voice образец не нужен.
Установка
Шаг 1. Установите PyTorch под вашу платформу.
# NVIDIA GPU: пример для CUDA 12.8
pip install torch==2.8.0+cu128 torchaudio==2.8.0+cu128 --extra-index-url https://download.pytorch.org/whl/cu128
# Apple Silicon
pip install torch==2.8.0 torchaudio==2.8.0Для Intel Arc установите драйверы Intel и сборку PyTorch с поддержкой XPU:
pip install torch torchaudio --index-url https://pytorch-extension.intel.com/release-whl/stable/xpu/us/
python -c "import torch; print(torch.xpu.is_available(), torch.xpu.device_count())"Шаг 2. Установите OmniVoice одним из способов.
# Стабильный релиз с PyPI
pip install omnivoice
# Последняя версия из исходников без предварительного клонирования
pip install git+https://github.com/k2-fsa/OmniVoice.git
# Установка для разработки
git clone https://github.com/k2-fsa/OmniVoice.git
cd OmniVoice
pip install -e .Репозиторий также поддерживает установку через uv:
git clone https://github.com/k2-fsa/OmniVoice.git
cd OmniVoice
uv syncexport HF_ENDPOINT="https://hf-mirror.com".Быстрый старт без кода
Модель можно попробовать через готовые интерфейсы:
- Локальный веб-интерфейс:
omnivoice-demo --ip 0.0.0.0 --port 8001 - Hugging Face Space: huggingface.co/spaces/k2-fsa/OmniVoice
- Google Colab: ноутбук OmniVoice.ipynb
Интеграция через Python API и командную строку
Основные точки интеграции — Python API и команды командной строки. Для локального инференса внешний API-ключ не нужен: после установки и загрузки моделей приложение передаёт текст локальному процессу и получает аудиомассив или файл.
Клонирование голоса через Python API
Все три режима генерации используют метод model.generate().
from omnivoice import OmniVoice
import soundfile as sf
import torch
model = OmniVoice.from_pretrained(
"k2-fsa/OmniVoice",
device_map="cuda:0", # Apple Silicon: "mps", Intel Arc: "xpu"
dtype=torch.float16,
)
audio = model.generate(
text="Привет, это тест клонирования голоса.",
ref_audio="ref.wav",
ref_text="Расшифровка образца аудио.",
)
sf.write("out.wav", audio[0], 24000)Результат generate() — список одномерных массивов np.ndarray. Обычная частота дискретизации модели составляет 24 кГц.
ref_text можно не передавать: OmniVoice использует Whisper ASR (автоматическое распознавание речи) для расшифровки образца. Чтобы загрузить ASR заранее, передайте load_asr=True в from_pretrained() или вызовите model.load_asr_model(). Это удобнее, но требует доступной модели распознавания и добавляет отдельный этап обработки.
Переиспользование клона между сессиями
Образец можно закодировать один раз, сохранить результат и использовать его в следующих запусках:
prompt = model.create_voice_clone_prompt(
ref_audio="ref.wav",
ref_text="Расшифровка образца аудио.",
)
prompt.save("my_voice.pt")
# Позже, в новой сессии
from omnivoice import VoiceClonePrompt
prompt = VoiceClonePrompt.load("my_voice.pt")
audio = model.generate(
text="И снова здравствуйте!",
voice_clone_prompt=prompt,
)VoiceClonePrompt позволяет использовать один и тот же закодированный образец во всех фрагментах и не повторять загрузку, обработку и расшифровку исходного аудио. Итоговую однородность тембра и темпа всё равно стоит проверять прослушиванием.Voice Design: голос по описанию
В режиме Voice Design образец не требуется. Атрибуты перечисляются через запятую: пол, возраст, высота тона, шёпот, английский акцент или китайский диалект.
audio = model.generate(
text="Это тест дизайна голоса.",
instruct="female, low pitch, british accent",
)Auto Voice: автоматический выбор голоса
Если не передать образец или описание голоса, модель выберет голос автоматически:
audio = model.generate(
text="Предложение без голосового промпта."
)Параметры генерации
audio = model.generate(
text="...",
num_step=32, # число шагов; 16 ускоряет генерацию
speed=1.0, # >1.0 быстрее, <1.0 медленнее
duration=10.0, # фиксированная длительность; перекрывает speed
)Метод также принимает параметр language. Можно передать название языка, например "English", или код, например "en". По документации указание языка может немного улучшить работу модели по сравнению с автоматическим режимом.
Для длинного текста OmniVoice умеет делить материал на фрагменты. По умолчанию порог составляет 30 секунд оценочной длительности, а длительность отдельного фрагмента — 15 секунд. Эти значения задаются через audio_chunk_threshold и audio_chunk_duration.
Нормализация чисел и дат
По умолчанию модель может прочитать число 2345 по отдельным цифрам. Для озвучки статей включите нормализацию:
audio = model.generate(
text="У меня 2345 файлов.",
normalize_text=True,
)Установите дополнительные зависимости:
pip install "omnivoice[tn]"На macOS с Apple Silicon сначала установите pynini через Conda:
conda install -c conda-forge pyniniДля китайского и английского используется WeTextProcessing. Для других языков доступна обработка целых чисел через num2words, если пакет установлен. Управляющие вставки в квадратных скобках при нормализации сохраняются.
Управление произношением
OmniVoice понимает управляющие вставки внутри текста:
- Невербальные звуки:
[laughter],[sigh],[surprise-ah]. - Китайское произношение: пиньинь с номером тона для коррекции отдельных иероглифов.
- Английское произношение: фонемная запись в формате словаря CMU, например
[B EY1 S].
audio = model.generate(
text="[laughter] Вот это поворот, я такого не ожидал."
)Командная строка
Три команды покрывают основные возможности Python API.
| Команда | Назначение |
omnivoice-demo | Интерактивный веб-интерфейс на Gradio |
omnivoice-infer | Одиночная генерация |
omnivoice-infer-batch | Пакетная генерация, в том числе на нескольких GPU |
Пример одиночного клонирования:
omnivoice-infer \
--model k2-fsa/OmniVoice \
--text "Это тест синтеза речи." \
--ref_audio ref.wav \
--ref_text "Расшифровка образца аудио." \
--output hello.wavПакетная генерация принимает задания в JSONL (по одной JSON-записи на строку). Для автоматического выбора голоса достаточно id и text; для клонирования добавьте образец и его расшифровку:
{"id": "sample_001", "text": "Привет, мир", "ref_audio": "/path/ref.wav", "ref_text": "Образец", "speed": 1.0}Как проверить результат
После выполнения примера проверьте, что файл out.wav появился и открывается в аудиоплеере. Дополнительно прослушайте:
- совпадает ли произнесённый текст с исходным;
- нет ли обрывов на начале и конце;
- сохраняются ли тембр и темп между фрагментами;
- корректно ли читаются числа, даты и специальные термины.
Для программной проверки можно прочитать параметры файла:
import soundfile as sf
audio, sample_rate = sf.read("out.wav")
print(audio.shape, sample_rate)Ожидаемый признак успешной генерации — непустой одномерный аудиомассив и частота дискретизации 24 000 Гц для стандартной модели.
Лицензия и ограничения
- Код опубликован под лицензией Apache 2.0.
- Веса модели: перед коммерческим использованием проверьте актуальные условия на странице OmniVoice в Hugging Face. Лицензия кода не должна автоматически восприниматься как подтверждение условий использования весов.
Полезные сценарии
Аудиоверсии статей собственным голосом
Задача: массово озвучивать тексты без оплаты за каждый символ и отправки материалов в облачный TTS-сервис.
Подготовьте чистый образец голоса, сохраните VoiceClonePrompt, разделите материал на удобные фрагменты и используйте один prompt для всей статьи.
Наблюдаемый результат: готовые аудиофрагменты с единым клонированным голосом, которые можно прослушать и сопоставить с исходным текстом.
Ограничение: перед публикацией отдельно контролируйте произношение имён, чисел, дат и специальных терминов.
Многоязычные версии материала
Задача: сохранить узнаваемый голос в нескольких языковых версиях.
Передайте переведённый текст и используйте клон разрешённого голоса. Для более естественного произношения желательно подготовить образец на языке озвучки.
Наблюдаемый результат: отдельная аудиоверсия материала на каждом выбранном языке.
Ограничение: при кросс-языковом клонировании может проявляться акцент исходной записи, поэтому результат нужно проверять для каждого языка.
Аудиокниги и подкасты
Задача: пакетно обработать длинный текст одним голосом.
Сохраните VoiceClonePrompt, подготовьте задания в JSONL и запускайте их через omnivoice-infer-batch.
Наблюдаемый результат: набор аудиофайлов для всех записей.
Ограничение: перед сборкой финального выпуска проверьте переходы между фрагментами, уровень громкости и стабильность голоса.
Локальные уведомления и голосовые интерфейсы
Задача: синтезировать сообщения внутри локального сервиса или умного дома.
Приложение передаёт текст в локальный процесс OmniVoice и получает аудиомассив или файл. Такой контур подходит, когда важны контроль над данными и возможность выполнять инференс без внешнего TTS API.
Наблюдаемый результат: локальный сервис получает готовое аудио для уведомления или голосового интерфейса.
Ограничение: заранее учитывайте время запуска модели и доступную память.
Прототипы персонажей и дубляжа
Задача: быстро подобрать голос до записи актёра.
Используйте Voice Design с комбинацией допустимых атрибутов или Auto Voice для чернового варианта. Результат можно оценить прослушиванием нескольких реплик.
Наблюдаемый результат: несколько озвученных реплик для сравнения вариантов голоса.
Ограничение: для языков кроме китайского и английского Voice Design может быть нестабилен, поэтому этот режим не стоит считать заменой финальному кастингу и записи.
Наш контур озвучки pimenov.ai на Mac mini
Мы держим OmniVoice на Mac mini и озвучиваем материалы сайта клоном авторского голоса.
flowchart LR
A[VPS: задача на озвучку] --> B[Mac mini: OmniVoice]
B --> C[Синтез аудио клоном голоса]
C --> D[VPS: сохранение и публикация]Как это устроено:
- Клон создан по 10-секундной записи, начитанной в QuickTime.
- Задача поступает с VPS на Mac mini.
- Mac mini синтезирует аудио и отправляет готовый файл обратно на VPS для публикации на сайте.
- На нашем оборудовании минута готового аудио генерируется примерно за 23 секунды.
- Контур можно переключать между Yandex SpeechKit и локальным OmniVoice, а затем при необходимости пересобирать аудио для материалов сайта.
Официальные ссылки
- Репозиторий: github.com/k2-fsa/OmniVoice
- README и руководство: github.com/k2-fsa/OmniVoice/blob/master/README.md
- История релизов: github.com/k2-fsa/OmniVoice/releases
- Модель: huggingface.co/k2-fsa/OmniVoice
- Демо: huggingface.co/spaces/k2-fsa/OmniVoice
- Полный список языков: docs/languages.md
- Научная статья: arxiv.org/abs/2604.00688
Следующий шаг
Я научил сайт говорить, и он первым делом переврал собственное имя
Связанные материалы
- Блог: Голосовые ИИ-агенты — тихая возможность, пока все строят чат-ботов
- База знаний: Yandex SpeechKit: API, цены, синтез и распознавание речи
- База знаний: Fish Audio S2-Pro — локальное клонирование голоса и синтез речи
Если у вас есть длинные тексты или база знаний, локальный TTS-контур поможет оценить требования к оборудованию, качеству клона и процессу проверки аудио.
Если захотите обсудить, как это применить у себя или в команде — пишите в Telegram @pimenov
Если хотите разобрать свою задачу — напишите мне Если хотите разобрать свою задачу — напишите мне.
Можно прийти с идеей, черновым контекстом или уже живой задачей. Помогу быстро понять, где реальный следующий шаг, а где лишний шум.
Обычно хватает 2–3 сообщений, чтобы понять, могу ли я здесь реально помочь и в каком формате лучше двигаться дальше.
Дальше по теме
Paperclip — open-source инструмент для оркестрации команд AI-агентов. Не один ассистент, а целая организация: с ролями, бюджетами, аудитом и структурой подчинения.