pimenov.ai

База знаний

OmniVoice — локальный синтез речи и клонирование голоса на 600+ языков

Локальная open-source TTS-модель на 600+ языков: клонирует голос по образцу в 3–10 секунд, работает офлайн. Установка, API, сценарии и наш кейс озвучки сайта на Mac mini.

Опубликовано Обновлено
🗓️
Актуальность: проверено 6 сентября 2026 года по официальному репозиторию k2-fsa/OmniVoice: README, Python API и история релизов. На дату проверки последний опубликованный релиз — 0.2.1 от 16 июля 2026 года. Перед установкой сверяйте команды и параметры с репозиторием.

Локальная open-source модель синтеза речи (TTS) на 600+ языков: клонирует голос по образцу длительностью 3–10 секунд и после загрузки моделей может работать на своём железе. Здесь — возможности OmniVoice, установка, основные режимы генерации и практический контур озвучки pimenov.ai на Mac mini.

💡
TTS (text-to-speech) — синтез речи: текст превращается в аудио. Zero-shot означает, что модели не нужно дообучение под новый голос: она использует короткий образец прямо во время генерации.

Что такое 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 раз быстрее реального времени
⚙️
Про скорость: показатель RTF 0.025 относится к серверному GPU. В опубликованном разработчиками тесте использовался NVIDIA H100, FP16 и 32 шага генерации. На Apple Silicon скорость ниже: в нашем контуре на Mac mini минута готового аудио генерируется примерно за 23 секунды. Для пакетной офлайн-озвучки этого достаточно.

Что нужно для запуска

  • 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 sync
💡
Если модель не скачивается из Hugging Face, перед запуском можно задать зеркало: export HF_ENDPOINT="https://hf-mirror.com".

Быстрый старт без кода

Модель можно попробовать через готовые интерфейсы:

Интеграция через 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",
)
⚖️
Voice Design обучен на китайских и английских данных. Он может работать с другими языками, но на языках с небольшим объёмом обучающих данных и в пограничных случаях результат бывает нестабильным. Основным и наиболее стабильным режимом разработчики называют клонирование голоса.

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.

💡
Используйте 3–10 секунд чистой записи. Более длинный образец замедляет обработку и может ухудшить качество клона. Для обычного произношения лучше брать образец на том же языке, что и целевая речь: при кросс-языковом клонировании в результате может сохраниться акцент языка образца.

Нормализация чисел и дат

По умолчанию модель может прочитать число 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 Гц для стандартной модели.

📌
Команды и примеры в этом материале сверены по официальным источникам OmniVoice; фактический запуск в рамках этой проверки не выполнялся. Используйте этот раздел для проверки результата после установки.

Лицензия и ограничения

  • Код опубликован под лицензией 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, а затем при необходимости пересобирать аудио для материалов сайта.
📌
Итог: локальный контур уменьшает зависимость от облачного TTS и оплаты за символы. Готовые записи всё равно требуют проверки произношения, соответствия тексту и однородности голоса перед публикацией.

Официальные ссылки


Следующий шаг

Я научил сайт говорить, и он первым делом переврал собственное имя

Связанные материалы

Если у вас есть длинные тексты или база знаний, локальный TTS-контур поможет оценить требования к оборудованию, качеству клона и процессу проверки аудио.

Если захотите обсудить, как это применить у себя или в команде — пишите в Telegram @pimenov