Голосовое преобразование берёт запись и референсного диктора и производит те же слова голосом референсного диктора. Текст нигде в конвейере не участвует: на входе аудио, на выходе аудио, и модель никогда не читает и не пишет транскрипт. Именно это отличает его от синтеза речи (TTS), который начинается с текста и не имеет исходной записи, которую нужно сохранить. Голосовое преобразование отвечает на более узкий вопрос: дана эта запись, сделай так, чтобы она звучала как кто-то другой, сохранив слова нетронутыми.
У этой более узкой задачи есть реальные применения. Дубляж записи в согласованный голос без найма второго актёра озвучки. Анонимизация диктора в интервью или звонке в поддержку с сохранением слов дословно. Придание выходу системы TTS единой устойчивой идентичности на разных языках, когда базовые голоса для каждого языка обучались независимо и иначе звучали бы как разные люди.
voiceclonnx реализует 10 таких
движков за одним Python API, все работающие на onnxruntime без необходимости в
PyTorch на этапе вывода. Движки не взаимозаменяемы. Они происходят из разных
семейств моделей, и выбор одного означает выбор компромисса, а не победителя.
API вкратце
from voiceclonnx import VoiceCloner
cloner = VoiceCloner(engine="facodec")
out = cloner.clone_voice("source.wav", "reference.wav", "out.wav")
print(cloner.sample_rate) # 16000
clone_voice(audio, reference_voice, out_path) принимает исходную запись,
5-30-секундный референсный клип целевого диктора и выходной путь и возвращает путь
к преобразованному WAV. Смена движка означает смену строки engine=; форма вызова
не меняется. Один движок, rvc, — исключение: он принимает путь к файлу модели
голоса .onnx вместо референсной записи, об этом ниже. pip install voiceclonnx
подтягивает все 10 движков; модели загружаются с Hugging Face при первом
использовании.
Две оси, а не одна оценка
Два числа описывают, насколько хорошо сработало преобразование, и они не движутся вместе.
Частота ошибок по словам (WER) измеряет разборчивость: сколько от исходного предложения уцелело, если судить по прогону результата обратно через распознаватель речи и сравнению с исходным транскриптом. 0% WER означает, что каждое слово дошло верно.
Сходство дикторов измеряет идентичность: действительно ли результат звучит как
целевой диктор, а не исходный. Оно вычисляется путём извлечения эмбеддинга диктора —
компактного числового отпечатка тембра голоса, тонального окраса, который делает
один голос отличным от другого при той же высоте и громкости — из результата и из
референсного клипа, а затем их сравнения по косинусному сходству. Оценка 1.0
означает идентичный тембр; собственный базовый уровень voiceclonnx —
непреобразованная копия исходника, оценённая против цели — составляет 0.09, так что
всё существенно выше этого действительно выполняет реальную работу преобразования.
voiceclonnx публикует оба числа для каждого движка, измеренные на одном и том же
предложении, преобразованном к двум референсным голосам. WER берётся из
faster-whisper; сходство дикторов — из модели эмбеддингов wespeaker-resnet34
(перепроверено против двух других). Поставьте их рядом, и проявляется закономерность:
ни один движок не лидирует по обоим столбцам.
| Движок | Семейство | WER | Сходство с целью |
|---|---|---|---|
focalcodec | kNN-замена признаков | 15-19% | 0.61 |
lscodec | Кодек с разделением диктора | ~35% | 0.54 |
chatterbox | AR codec-LM | 4-8% | 0.54 |
knnvc | kNN-замена признаков | 12-15% | 0.49 |
facodec | Факторизованный кодек | 0% | 0.44 |
openvoice | Перенос тонального окраса | 0% | 0.37 |
bicodec | Семантические + глобальные токены | 12% | 0.29 |
triaan | Triple-AAN | 4% | 0.29 |
cosyvoice | Flow-matching | 8% | 0.21 |
(rvc преобразует любой источник в один фиксированный обученный сообществом
голос, а не в произвольный референсный клип, так что он не сопоставим в этой
таблице; см. ниже.)
Читайте таблицу построчно, а не в поисках единственной лучшей строки. facodec и
openvoice находятся на уровне 0% WER — каждое слово уцелело — с умеренным
сходством. focalcodec и lscodec находятся на другом конце: самый сильный перенос
тембра в наборе, купленный ценой 15-35% неверно выходящих слов. chatterbox —
единственный движок, который хорошо справляется по обеим осям одновременно (4-8%
WER, 0.54 сходства), что является свойством его архитектуры, о чём далее.
Почему семейства ведут себя по-разному
Движки разделяются на отдельные подходы, и подход предсказывает, где движок окажется в таблице выше.
kNN-замена признаков (knnvc, focalcodec). Исходное аудио разбивается на
короткие кадры, каждый превращается в вектор признаков предобученным
самообучаемым энкодером. Для каждого исходного кадра алгоритм находит k
ближайших кадров в пуле признаков целевого диктора и усредняет их, заменяя тембр
исходника кадр за кадром, оставляя базовое фонетическое содержание там, где оно
было извлечено из собственного представления энкодера. Здесь нет обученного
декодера, отображающего один голос в другой — замена — это поиск ближайших
соседей — вот почему перенос тембра может быть агрессивным (focalcodec
достигает сходства 0.61) ценой изредка искажаемых кадров, у которых было плохое
совпадение в целевом пуле, что и проявляется как WER.
Факторизованный кодек (facodec). Нейросетевой аудиокодек — модель, которая
сжимает речь в компактную последовательность токенов и восстанавливает её —
обученная явно разделять эти токены на отдельные потоки содержания и тембра.
Поскольку содержание — это выделенный поток, декодер восстанавливает слова с
высокой точностью; заменяется только поток тембра на целевого диктора. Именно это
явное разделение — причина, по которой facodec достигает 0% WER: сохранение
содержания ни с чем не конкурирует.
Перенос тонального окраса (openvoice). Модуль преобразования меняет
тональный окрас — контур высоты тона и тембр — после того, как отдельный энкодер
зафиксировал лингвистическое содержание, по духу похоже на факторизованный
кодек, но реализовано как шаг переноса окраса над мел-спектрограммой, а не над
дискретными токенами. Он тоже достигает 0% WER, с несколько более низким
сходством, чем facodec.
AR codec-LM (chatterbox). Авторегрессионная языковая модель, предсказывающая
токены кодека по одному, обусловленная эмбеддингом целевого диктора, очень
похоже на языковую модель синтеза речи, но обусловленная токенами содержания
исходной записи вместо текста. Поскольку она генерирует просодию (ритм, ударение,
интонацию) как часть того же авторегрессионного процесса, а не копирует её
напрямую из источника, она может переносить манеру речи вместе с тембром — вот
почему документация отмечает, что она даёт «самый сильный сдвиг источник-в-цель»
— и это единственный движок, хорошо справляющийся одновременно и с разборчивостью,
и со сходством.
Flow-matching (cosyvoice). Непрерывный генеративный процесс, итеративно
уточняющий шум до целевой мел-спектрограммы, используя решатель ОДУ (обыкновенных
дифференциальных уравнений) с настраиваемым числом шагов (ode_steps, по
умолчанию 10). Его энкодер содержания спроектирован для межъязыкового переноса, и
эта общность, вероятно, объясняет, почему его показатель сходства с целью самый
низкий в наборе: представление оптимизируется под языковую независимость, а не
под самое точное соответствие диктору.
Кодек с разделением диктора (lscodec). Как и facodec, кодек, обученный
разделять содержание и идентичность диктора, но настроенный продвигать сходство
дальше прямой ценой точности потока содержания, оказываясь на ~35% WER со вторым
по величине сходством в наборе.
Triple-AAN и кодеки с семантическими и глобальными токенами (triaan,
bicodec) находятся в середине по обеим осям: умеренный WER, умеренное сходство,
без сильного перекоса в ту или иную сторону.
Кодек «любой-в-ОДИН» + вокодер (rvc). Построен на ContentVec (энкодер
содержания), подающем в вокодер VITS, обучаемый под каждый целевой голос отдельно,
а не принимающий произвольный референсный клип. reference_voice для этого движка
— это путь к файлу модели RVC .onnx или ID репозитория Hugging Face, а не
аудиофайл:
cloner = VoiceCloner(engine="rvc")
out = cloner.clone_voice("source.wav", "/path/to/myvoice.onnx", "out.wav")
Поскольку каждая модель RVC обучена на одном целевом голосе, она не принимает референсный клип на этапе вывода и не оценивается по тому же бенчмарку сходства, что движки «любой-в-любой». Её измеренный WER в 38% отражает одну конкретную обученную сообществом модель, а не архитектуру в целом — качество зависит от того, как именно обучалась эта конкретная модель. На Hugging Face существуют тысячи голосов RVC от сообщества, загружаемых напрямую по ID репозитория.
Как решить, какой запускать
Быстрый конвейер общего назначения. Начните с facodec или openvoice. Оба
достигают 0% измеренного WER при умеренном сходстве (0.44 и 0.37), и оба
поставляются с квантизованным вариантом INT8 без заявленной регрессии качества —
передайте quantized=True для меньшей, более быстрой модели.
Максимальное сходство дикторов. Используйте focalcodec (сходство 0.61, самое
высокое измеренное), если WER 15-19% приемлем для случая использования, или
chatterbox (сходство 0.54, WER 4-8%), если нет. chatterbox также работает на
24 кГц — самой высокой частоте вывода для преобразования «любой-в-любой» в наборе —
rvc работает вплоть до 48 кГц, но только в режиме «любой-в-ОДИН» выше.
Оборудование с ограниченными ресурсами. knnvc в INT8 занимает около 123 МБ
на диске — наименьший объём в наборе, со сходством 0.49 и WER 12-15% — разумный
компромисс для ограниченной памяти. Не каждый движок чисто квантуется:
focalcodec и cosyvoice документированы как деградирующие в INT8, так что
держите эти два в fp32.
Язык, на котором движок не обучался. Энкодер содержания cosyvoice
построен для межъязыкового переноса, что является документированной причиной
предпочесть его движку, настроенному на преобразование в пределах одного языка,
даже несмотря на то что его измеренное сходство (0.21) самое низкое среди девяти
напрямую сравнимых движков.
Идентичность голоса важнее точной формулировки. lscodec даёт самый сильный
перенос тембра среди движков семейства кодеков (0.54, наравне с chatterbox)
ценой самого высокого WER в сравнимом наборе (~35%). Выбирайте его, когда цель —
«звучит ли это как целевой диктор», а отдельные ошибки в словах в результате
допустимы.
Единый фиксированный голос сообщества, а не произвольный клип. rvc,
использующий предобученную модель голоса .onnx вместо референсной записи.
Некоммерческое ограничение, которое стоит проверить в первую очередь. Веса
bicodec лицензированы под CC BY-NC-SA 4.0. Веса каждого другого движка —
MIT, Apache-2.0 или CC BY 4.0. Проверьте лицензию конкретных весов, которые вы
разворачиваете, прежде чем использовать их коммерчески.
Что он делает не очень хорошо, и на ком его не следует использовать
Каждое число выше идёт с одной и той же оговоркой: числа описывают демонстрационное английское предложение, преобразованное между двумя конкретными референсными голосами. Другой язык, более шумная исходная запись, более короткий или более низкокачественный референсный клип, или исходный диктор, чей голос сильно отличается от всего в обучающих данных движка, — всё это сдвинет числа, обычно в худшую сторону. Ни один из этих движков не является универсальным решением для низкокачественной исходной записи — некоторые из них охотно преобразуют тембр, пронося исходный шум прямо насквозь, поскольку у шума своя акустическая сигнатура, которую разделение содержание/тембр не всегда чисто отделяет.
Голосовое преобразование также поднимает реальный риск, о котором эту команду уже заставил задуматься его близкий родственник — клонирование голоса для TTS: преобразование записи так, чтобы она звучала как реальный, идентифицируемый человек, — это технология, способная к имперсонации, независимо от того, было ли это намерением. Правило, которое эта команда применяет к синтетическим голосам в целом, — получить явное разрешение перед использованием голоса реального человека как донора или цели, и переходить на записи из общественного достояния или намеренно оригинальный голос, когда разрешение невозможно, — применяется здесь без исключений. Референсный клип реального человека, с точки зрения согласия, ничем не отличается от полного обучающего набора его голоса; просто для получения пригодного результата его требуется гораздо меньше, что является причиной для большей осторожности, а не для меньшей.
Свяжитесь с нами через contact или посмотрите что мы предлагаем, если голосовое преобразование — часть конвейера, который вы строите.