Клонирование голоса на 48 кГц
с VoxCPM2.
В Soniqo только что появилась новая модель TTS. Она работает на вашем ноутбуке, выдаёт аудио студийного качества на 48 кГц и клонирует голос из одного короткого клипа. Этот пост проходит по тому, что можно на ней построить, по трём способам клонировать голос и по дружелюбному разбору того, как модель устроена внутри.
Четыре вещи, которые меняются, когда клонирование идёт локально.
Клонирование на устройстве разом открывает четыре свойства — приватность, работу офлайн, отсутствие оплаты за вызов и полное владение голосом. Каждое открывает класс продуктов, которые иначе строить неудобно.
Запишите 30 секунд, как родитель читает. Приложение аудиокниг затем озвучивает любую главу его голосом — та же теплота, тот же акцент, локально в каждой сессии.
Ютуберы и подкастеры сохраняют один устойчивый голос на 30 языках. Запишите один раз по-английски и выпускайте тот же эпизод на японском, испанском и хинди без голосового каста.
Люди перед потерей голоса могут сохранить его в коротком клипе и продолжать говорить через ассистивные технологии, которые звучат как они, а не как обобщённый движок TTS.
Опишите нужный голос — "молодая женщина, мягкий и тёплый голос" — и модель спроектирует его без референсной записи. Полезно для NPC в играх, подсказок киосков или A/B-тестов брендовых голосов.
Как VoxCPM2 сравнивается с ElevenLabs.
ElevenLabs — очевидная альтернатива с облачным API. Компромисс в том, что где работает — и кому потом принадлежит голос.
Для продуктов, которым нужны гарантии приватности, работа офлайн или нулевая оплата за вызов, клонирование на устройстве — единственный вариант: каждый вызов ElevenLabs загружает аудио на их серверы.
| VoxCPM2 (Soniqo) | ElevenLabs | |
|---|---|---|
| Где работает | На устройстве пользователя | Хостируемый API |
| Аудио покидает устройство | Нет | Да (загружается в ElevenLabs) |
| Работа офлайн | Да | Нет (нужен интернет) |
| Оплата за вызов | Нет | Оплата за символ |
| Лицензия модели | Apache 2.0, открытые веса | Проприетарная, только SaaS |
| Макс. частота вывода | 48 кГц нативно | 48 кГц (уровень Pro и выше) |
| Языки | 30 | 29 (Multilingual v2) · 70+ (Eleven v3) |
| Нужен референсный клип | 5–30 с | 1 мин (Instant) · 30 мин (Professional) |
| Дизайн голоса из текста | Да | Да |
Оба движка достигают 48 кГц; оба поддерживают схожий набор языков для повседневного клонирования; оба дают дизайн голоса из текстового описания. Настоящая разница — покидает ли аудио устройство вообще.
Одна модель, три входа.
Модель одна и та же в каждом вызове. Меняются передаваемые аргументы — они решают, проектируете ли вы голос из описания, копируете записанный или сохраняете акцент.
Опишите голос естественным языком. Модель выбирает подходящий голос и остаётся согласованной между вызовами.
let audio = try await tts.generateVoxCPM2(
text: "Welcome to the show.",
instruct: "A young woman, gentle and warm voice."
)Передайте любые 5–30 с чистой речи. Модель копирует тембр и ритм и синтезирует новый текст этим голосом.
let ref = try AudioFileLoader.load(
url: URL(fileURLWithPath: "speaker.wav"),
targetSampleRate: 16000
)
let audio = try await tts.generateVoxCPM2(
text: "This is a cloned voice.",
refAudio: ref
)Передайте клип И его транскрипцию. Теперь модель может сопоставить акустические признаки с фонемами — акцент и выбор гласных переносятся.
let audio = try await tts.generateVoxCPM2(
text: "Hello from the cloned voice.",
refAudio: ref,
promptText: "this is what the reference clip actually said",
promptAudio: ref
)Тот же входной слот, заполненный разными частями. Модель никогда не видит флаг — она читает последовательность.
Как VoxCPM2 производит аудио.
Четыре взаимодействующих модуля. Знать это, чтобы пользоваться моделью, не нужно, но если вам любопытно, откуда берутся 48 кГц — вот оно.
Конвейер начинается с локального энкодера (LocEnc), который сплавляет токены текста и (опционально) референсное аудио в один поток векторов. Этот поток питает TSLM — 28-слойную языковую модель MiniCPM-4, которая решает, какой аудио-"патч" идёт следующим, так же как текстовая LM выбирает следующий токен. Второй проход через RALM уточняет каждый патч.
До этого места всё — трансформер. Интересный поворот — это LocDiT: вместо выбора из фиксированного словаря дискретных аудио-токенов он запускает небольшой диффузионный процесс, чтобы «нарисовать» аудиолатент в каждом слоте. Отсутствие дискретного кодека означает отсутствие узкого места квантования — именно это позволяет финальной стадии, AudioVAE V2, декодировать прямо в 48 кГц. Любой другой движок на устройстве в этом стеке упирается в 24 кГц.
Разделение стоит отметить: авторегрессионная LM отлично решает, что должно идти дальше (содержание, ритм, длина); диффузионная голова отлично рисует акустические детали (фаза, спектр). VoxCPM2 позволяет каждому делать то, в чём он хорош. Поэтому модель держит уровень всего при 2B параметров — воспринимаемое качество зарабатывает архитектура, а не размер.
Читайте оригинальное исследование.
Три размера. Выбирайте по бюджету диска.
Все три сборки работают на одной архитектуре; они различаются лишь тем, как агрессивно квантована языковая модель. Сборка int8 — рекомендуемая по умолчанию: она совпадает с upstream-конвейером на Python в бенчмарке кругового обхода из 8 предложений, оставаясь быстрее и на 40% меньше, чем bf16.
| Сборка | Размер | Лучше для |
|---|---|---|
| bf16 | ~5.0 GB | Референс / отладка. |
| int8 по умолч. | ~3.0 GB | Повседневное клонирование, аудиокниги, подкасты. |
| int4 | ~1.9 GB | Развёртывания при нехватке диска. |
Из CLI.
# Voice design — no reference clip
speech speak "Welcome to the show." \
--engine voxcpm2 \
--voxcpm2-instruct "A young woman, gentle and warm voice." \
--output design.wav
# Reference cloning — 5–30 s clean clip
speech speak "This is a cloned voice." \
--engine voxcpm2 \
--voxcpm2-variant int8 \
--voice-sample speaker.wav \
--output clone.wavЧитайте дальше.
Каждый флаг CLI, каждый режим генерации, заметки об ответственном использовании.
Сравнение движков: VoxCPM2, CosyVoice3, Qwen3-TTS ICL.
Установите Soniqo на Apple Silicon и запустите первый синтез.
Больше постов о речи на устройстве по мере выхода.
