VoxCPM2
VoxCPM2 — это TTS-модель от OpenBMB на 2 млрд параметров, без токенайзера, диффузионно-авторегрессионная. Она синтезирует аудио 48 кГц студийного качества на 30 языках и поддерживает три рабочих режима: zero-shot, клонирование голоса по одной референсной записи и голосовой дизайн на естественном языке ("a young female voice, warm and gentle"). На Apple Silicon работает нативно через MLX в bf16, int8 или int4 — на 8-предложенческом стенде int8-сборка даёт 0 % WER при раунд-трипе через Qwen3-ASR и RTF ≈ 1,0.
Что это
- Выход 48 кГц — единственный on-device движок в этом стеке со студийной частотой дискретизации. Все остальные TTS-модули ограничены 24 кГц.
- Голосовой дизайн — управление стилем на естественном языке:
--voxcpm2-instruct "young female voice, warm and gentle". У других движков этого нет. - Клонирование голоса — клонирование по одной 16 кГц-референсной записи; "ultimate cloning" (референсное аудио + транскрипт) для более точного сохранения просодии.
- 30 языков — английский, китайский, индонезийский, японский, корейский и др. Язык определяется автоматически по тексту.
- Apache 2.0 — веса наследуют лицензию upstream openbmb; наш Swift-порт остаётся под той же лицензией.
Архитектура
Пять взаимосвязанных компонентов формируют 48 кГц-волну:
| Компонент | Описание |
|---|---|
| MiniCPM-4 base LM | 28-слойный MiniCPM-4 с LongRoPE, GQA (16 Q / 2 KV голов, размер головы 128) и SwiGLU MLP. Обусловлен текстовыми токенами и аудио-латентами. |
| Residual LM | 8-слойный вариант MiniCPM-4 без ротационных эмбеддингов. Дорабатывает скрытое состояние базовой LM на каждый сгенерированный аудио-патч. |
| FSQ + Local DiT estimator | Скалярно-квантованные скрытые состояния питают 12-слойный Diffusion Transformer (V2), работающий с 64-мерными аудио-латентами патчами по 4. Решатель Euler CFG-zero-star, 10 шагов по умолчанию. |
| AudioVAE V2 | Каузальный свёрточный декодер. Читает 16 кГц-референс и выдаёт 48 кГц-волну (3× апсэмплинг встроен). |
| Stop-голова | Пошаговый бинарный классификатор по скрытому состоянию LM. argmax = 1 завершает генерацию после minTokens патчей. |
Сборки
Три квантованных варианта, все сконвертированные из upstream PyTorch-чекпоинтов openbmb/VoxCPM2. Квантование применяется к Linear-слоям LM / резидуальной LM / DiT-эстиматора / проекционных голов; AudioVAE-вокодер остаётся в fp16/bf16, потому что его квантование ухудшает качество звука.
| Сборка | Квантование | Размер | HuggingFace |
|---|---|---|---|
| bf16 | Нет (референс) | ~5.0 GB | aufklarer/VoxCPM2-MLX-bf16 |
| int8 | MLX QuantizedLinear, group size 64 | ~3.0 GB | aufklarer/VoxCPM2-MLX-int8 |
| int4 | MLX QuantizedLinear, group size 64 | ~1.9 GB | aufklarer/VoxCPM2-MLX-int4 |
Round-trip ASR (Qwen3-ASR 0.6B, стенд из 8 предложений, Apple Silicon серии M):
| Вариант | WER | RTF |
|---|---|---|
| bf16 | 2.04 % | 1.38 |
| int8 | 0.00 % | 1.02 |
| int4 | 4.08 % | 0.83 |
int8 — рекомендуемый дефолт: побайтово совпадает с upstream-пайплайном на Python на участке LM, при этом быстрее и на 40 % меньше bf16. int4 — самая компактная сборка с приемлемым WER для повседневного использования.
Быстрый старт
import VoxCPM2TTS
let tts = try await VoxCPM2TTSModel.fromPretrained() // defaults to bf16
let audio = try await tts.generate(text: "Hello from VoxCPM2.", language: "english")
// audio: [Float] at 48 kHz mono
Передайте явный model ID, чтобы выбрать сборку int8 / int4:
let tts = try await VoxCPM2TTSModel.fromPretrained(
modelId: "aufklarer/VoxCPM2-MLX-int8"
)
Голосовой дизайн (по инструкции)
Передайте описание стиля на естественном языке; модель обусловится на нём без референсного аудио:
let audio = try await tts.generateVoxCPM2(
text: "Welcome to the show.",
instruct: "A young woman, gentle and warm voice."
)
Клонирование голоса
Клонирование по одной моно-референсной записи 16 кГц:
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
)
Ultimate cloning — передайте одновременно референсное аудио и соответствующий транскрипт, чтобы LM дополнительно обусловилась на лексическом контексте и точнее сохраняла просодию и акцент:
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
)
CLI
speech speak "Hello there." \
--engine voxcpm2 \
--voxcpm2-variant int8 \
--output hello.wav
# Voice design
speech speak "Welcome to the show." \
--engine voxcpm2 \
--voxcpm2-instruct "A young woman, gentle and warm voice." \
--output design.wav
# Voice cloning
speech speak "This is a cloned voice." \
--engine voxcpm2 \
--voice-sample speaker.wav \
--output clone.wav
Флаги: --voxcpm2-variant {bf16,int8,int4}, --voxcpm2-instruct, --voxcpm2-ref-audio, --voxcpm2-prompt-audio + --voxcpm2-prompt-text, --voxcpm2-cfg-value, --voxcpm2-timesteps, --voxcpm2-max-tokens, --voxcpm2-min-tokens, --seed для воспроизводимого синтеза.
Выбор среди TTS-модулей speech-swift
| Kokoro-82M | Qwen3-TTS | CosyVoice3 | VoxCPM2 | VibeVoice 1.5B | |
|---|---|---|---|---|---|
| Параметры | 82M | 0.6 / 1.7 B | 0.5B | 2B | 1.5B |
| Sample rate | 24 kHz | 24 kHz | 24 kHz | 48 kHz | 24 kHz |
| Backend | CoreML (ANE) | MLX, CoreML | MLX | MLX | MLX |
| Языки | 10 | 10 | 9 | 30 | EN + ZH |
| Голосовой дизайн | Фиксированные пресеты | — | — | По инструкции | — |
| Клонирование голоса | — | ICL-референс | Zero-shot референс | Референс + ultimate | Аудио + транскрипт |
| Длинный формат | Короткий / средний | Стриминг | Стриминг | Патч-стриминг | До 90 минут |
…когда нужен выход 48 кГц (музыка / эфир) или голосовой дизайн на естественном языке без референсной записи. Для максимально качественного короткого английского TTS с меньшим объёмом загрузки легче CosyVoice3 или Qwen3-TTS. Для длинных подкастов и аудиокниг на EN/ZH специально сделан VibeVoice 1.5B.
Ответственное использование
Клонирование голоса доступно из коробки. Получайте согласие на любой клонируемый голос и не используйте модель для выдачи себя за других, дезинформации или мошенничества. Применяется полное руководство по безопасности openbmb/VoxCPM2.