Введение
Предыдущие статьи про TTS:
https://habr.com/ru/companies/raft/articles/991844/
https://habr.com/ru/companies/raft/articles/1023206/
Еще несколько лет назад синтез речи в бизнесе часто воспринимался как компромисс: быстро, но не всегда естественно. Чтобы качественно озвучивать что‑либо — компании прибегали к стандартному пути: диктор, студия, запись, монтаж. Необходимо было учесть множество нюансов, чтобы свести издержки ресурсов компании к минимуму и быстрее выдать качественный продукт. Это неплохо работало для финальных этапов создания продуктов, но в любом случае такая бизнес модель плохо масштабировалась, то есть если нужно быстро озвучивать десятки или сотни фраз, обновлять тексты, тестировать разные варианты подачи или делать мультиязычные версии, процесс становился дорогим и медленным.

Сейчас TTS модели стали заметно сильнее: они звучат естественнее, умеют клонировать голос, подбирать тембр по описанию и быстро генерировать речь (Ссылка на внешнее исследование. Поэтому бизнес все чаще смотрит на синтез речи не как на экспериментальную технологию, а как на практический инструмент для IVR(Interactive Voice Response), голосовых ботов, обучения, маркетинга и озвучки контента.
Привет, Хабр! Меня зовут Музафаров Данил, я работаю DS инженером в компании Raft. В этой статье я протестирую OmniVoice — Open Source TTS модель, вокруг которой сейчас много внимания, и проверю, насколько хорошо она справляется с русскоязычными бизнес‑сценариями: числами, датами, ФИО, аббревиатурами, смешанным русско‑английским текстом, а также длинной озвучкой.
Основная часть
OmniVoice появилась в open‑source‑сегменте TTS сравнительно недавно и быстро привлекла к себе внимание. Авторы заявляют поддержку более чем 600 языков, возможность клонирования голоса по короткому референсному аудио, генерацию голоса по текстовому описанию и автоматический выбор голоса без дополнительных настроек.
На бумаге это выглядит очень привлекательно для бизнеса. Если модель действительно хорошо справляется с разными языками, короткими фразами, числами, аббревиатурами и клонированием голоса, ее можно использовать не только для экспериментов, но и как основу для прикладных сценариев: голосовых ассистентов, озвучки внутренних материалов или быстрого прототипирования брендового голоса.
При этом для бизнеса важны не только красивые примеры из репозитория. В реальных текстах почти всегда встречаются даты, суммы, ФИО, сокращения, английские термины, названия продуктов и длинные абзацы. Поэтому я решил проверить OmniVoice не на абстрактных фразах, а на русскоязычных сценариях, которые ближе к реальным задачам компаний.
Возможности модели
У OmniVoice заявлены следующие возможности: клонирование голоса, создание собственного голоса, автоматический выбор голоса. Давайте рассмотрим эти возможности.
Voice Cloning
Клонирование голоса спикера по референсному аудио с расшифровкой. Озвучка текста клонированным голосом.
audio = model.generate( text="Привет! Это тест синтеза голоса на русском языке с помощью OmnyVoice.", ref_audio="refs/ref_danil.ogg", ref_text="Всем привет, меня зовут Музафаров Данил и сейчас я тестирую новый аудиоформат", ) sf.write("output/voice_cloning.wav", audio[0], 24000)
Результат генерации
Voice Design
Описание тембра голоса спикера с помощью текстовых инструкций. Но здесь не получится из головы создать описание, здесь есть ограниченный набор параметров, которые ожидаются в поле «instruct», поэтому важно это учесть.
audio = model.generate( text="Тестирую voice design на русском языке с помощью OmniVoice. Хочу услышать низкий голос профессионального диктора мужчины среднего возраста", instruct="male, low pitch, russian accent", ) sf.write("output/voice_design.wav", audio[0], 24000)
Результат генерации
AutoSpeech
Голос выбирается автоматически, указывается только текст, который нужно озвучить
audio = model.generate(text="Давайте узнаем, какой голос у нас получился, если не указать ни один параметр. До этого я не встречался с таким функционалом в синтезе голоса.") sf.write("output/auto_voice.wav", audio[0], 24000)
Результат генерации
Генерация длинного текста
Часто при генерации длинных текстов можно увидеть как проседает качество модели. Могут появляться различные звуковые артефакты и искажаться тембр голоса. Поэтому для кейсов, где преобладают длинные аудио важно оценивать и такую возможность модели.
Традиционно попробуем озвучить отрывок из рассказа «Господин из Сан‑Франциско».
audio = model.generate( text=text, language="ru", denoise=True, num_step=32, guidance_scale=2.0, # long-form audio_chunk_duration=15.0, audio_chunk_threshold=1.0, postprocess_output=True, ) sf.write("output/long_text.wav", audio[0], 24000)
Всего символов: 4868
Всего слов: 728
Итоговая длина аудио: 5 мин
Время генерации аудио: 44 сек
Результат генерации
Вывод: Хорошая генерация, но встречаются артефакты по типу обрыва окончания предложения, проглатывания слов. Также встречаются неверные ударения.Возможно, если подобрать оптимальные гиперпараметры, то с этим можно будет бороться и улучшить качество еще сильнее.
Невербальные символы в тексте
Невербальные символы — это эмоции, которые не передаются обычными словами, но помогают сделать речь более естественной: смех, вздох, пауза, удивление, задумчивость, радость или напряжение.
OmniVoice поддерживает невербальные символы в тексте и если научиться их грамотно использовать, то можно сделать озвучку текста более живой и интересной.
import os out_dir = "output_postprocess" os.makedirs(out_dir, exist_ok=True) sample_rate = getattr(model, "sample_rate", 24000) examples = [ ( "06_nonverbal_tags", ( "[laughter] Серьёзно, ты это сейчас весь отчёт прогоняешь одним батчем? " "[sigh] Ладно, давай спокойно: мы просто проверяем качество озвучки. " "[surprise-oh] Вот это рост — конверсия воронки подскочила после правок. " "[question-ah] Это реально эффект новой посадочной или мы что-то не так в метриках посчитали? " "[dissatisfaction-hnn] В конце всё равно проседает: в третьем квартале слишком много пауз и обрывов. " "Дальше обычный нейтральный текст без спецмаркеров, чтобы сравнить возврат " "к деловому тону после эмоциональных вставок." ), dict(instruct="male, young adult, moderate pitch", speed=1.0), ) ] for name, text, kwargs in examples: audio = model.generate(text=text, **kwargs) path = os.path.join(out_dir, f"{name}.wav") sf.write(path, audio[0], sample_rate) print("saved:", path)
Результат генерации
Сильные и слабые стороны OmniVoice

Мы увидели возможности модели, примеры того, как ее можно использовать и возможно на этом моменте вы уже сложили картину того как можно еще интересным способом использовать данную модель. Но я решил провести дополнительную аналитику модели и прогнать ее по популярным сценариям, а именно: как модель произносит ФИО, дату и время, числа и проценты, аббревиатуры, омографы и английские слова в русском тексте.
Для такого тестирования я подготовил собственный бенчмарк. Для каждого раздела я подготовил по 10 предложений и оценивал их от 0 до 5. Где «0», это когда модель озвучила максимально плохо, неразборчиво или совсем не озвучила текст. А оценка «5» — модель качественно озвучила заданный текст, без ошибок в ударениях и интонации. Оценивал я субъективно, самостоятельно прослушивая каждую генерацию.
Бенчмарк |
Оценка |
Дата и время на русском |
4.1 |
ФИО на русском |
4.7 |
Аббревиатуры на русском |
5 |
Смешанный русский и английский |
4.5 |
Русские омографы |
4.1 |
Числа, проценты и денежные суммы |
4.8 |
Средняя оценка по всем бенчмаркам получилась — 4.53, что в целом неплохо для Open Source TTS. Пустых генераций не было, аббревиатуры на русском языке произносились идеально. Явные проблемы были с произношением точного времени, а также ошибки в ударениях при произношении омографов. Также модель неплохо справляется с произношением чисел и процентов, в произношении ФИО иногда ошибается в ударениях. В произношении английских слов в русском тексте иногда бывают проблемы с произношением, а именно произношение английских слов с русским акцентом.
Зная такие сильные и слабые стороны модели, в дальнейшем можно понимать под какую задачу ее можно будет использовать, а под какую лучше не стоит.
Выводы по результатам тестирования
По результатам тестирования OmniVoice показала себя как сильная Open Source TTS модель для русскоязычных сценариев, особенно если речь идет о коротких и средних фразах. Модель стабильно генерирует речь, не дает пустых результатов, хорошо справляется с базовой озвучкой и показывает высокий уровень разборчивости.
Самыми сильными сторонами OmniVoice оказались аббревиатуры, числа и проценты. В этих категориях модель звучит достаточно уверенно и в большинстве случаев не требует дополнительной корректировки текста. Особенно хорошо модель справилась с русскими аббревиатурами в тестах они произносились без ошибок.
Также модель хорошо подходит для сценариев, где нужно быстро получить озвучку без сложной настройки: AutoSpeech позволяет генерировать голос только по тексту, Voice Design дает возможность управлять базовыми характеристиками голоса, а Voice Cloning позволяет быстро попробовать озвучку в похожем тембре на основе референсного аудио.
Но к сожалению, полностью заменить профессионального диктора OmniVoice пока не может. Основные ограничения проявляются на длинных текстах: встречаются обрывы окончаний, проглатывание отдельных слов, ошибки в ударениях и звуковые артефакты на стыках аудиочанков.
Итог
Подведем итоги и сравним модели по таблице
Для OmniVoice использовал
GPU — RTX 5070
Процессор — Ryzen 7500
Будем озвучивать как и прошлый раз следующий текст: «Коллеги, добрый день, меня зовут Музафаров Данил. Я пишу статью на Хабр и сейчас я считаю метрики аудиогенерации по скорости.» Это аудио длительностью примерно 10–15 секунд.
Модель |
Latency (CPU), сек |
Latency (GPU), сек |
Естественность |
Выразительность |
Легкость интеграции |
CosyVoice |
313.3 |
1.2 |
5 |
5 |
4 |
OmniVoice можно рассматривать как рабочий инструмент для бизнеса, но не как универсальную замену диктору во всех сценариях.
Модель подходит для:
озвучки коротких и средних фраз;
сценариев, где важны скорость и низкая стоимость, а не студийное качество.
внутренних обучающих материалов;
голосовых ассистентов
Но для аудиоподкастов, аудиокниг и в целом задач, где важна длинная генерация голоса — OmniVoice пока лучше использовать с осторожностью. В таких задачах потребуется ручная проверка, подбор параметров генерации, подготовка текста и, возможно, дополнительная постобработка.
Pshir
А в подобных инструментах есть возможность расставлять ударения там, где нейросеть сама не справляется?