VoxCPM2

VoxCPM2 là mô hình TTS diffusion-autoregressive không tokenizer 2B tham số từ OpenBMB. Nó tổng hợp âm thanh 48 kHz chất lượng phòng thu ở 30 ngôn ngữ với ba chế độ vận hành: zero-shot, nhân bản giọng nói từ một clip tham chiếu, và thiết kế giọng nói bằng ngôn ngữ tự nhiên ("a young female voice, warm and gentle"). Trên Apple Silicon, mô hình chạy native qua MLX ở bf16, int8 hoặc int4 — gói int8 round-trip qua Qwen3-ASR đạt 0% WER trên bộ thử 8 câu và RTF khoảng 1.0.

Mô hình này là gì

Kiến trúc

Năm thành phần hợp tác để tạo ra dạng sóng 48 kHz:

Thành phầnMô tả
MiniCPM-4 base LMMiniCPM-4 28 lớp với LongRoPE, GQA (16 đầu Q / 2 đầu KV, head dim 128) và MLP SwiGLU. Điều kiện hóa trên token văn bản + latent âm thanh.
Residual LMBiến thể MiniCPM-4 8 lớp không có rotary embedding. Tinh chỉnh hidden state của base LM cho mỗi patch âm thanh được sinh.
FSQ + Local DiT estimatorCác hidden state được lượng tử hóa scalar điều khiển một Diffusion Transformer (V2) 12 lớp hoạt động trên latent âm thanh 64 chiều theo patch kích thước 4. Solver Euler CFG-zero-star, mặc định 10 timestep.
AudioVAE V2Bộ giải mã tích chập causal. Đọc âm thanh tham chiếu 16 kHz và xuất dạng sóng 48 kHz (upsample 3× tích hợp sẵn).
Stop headBộ phân loại nhị phân từng bước trên hidden state của LM. Argmax = 1 sẽ kết thúc sinh sau minTokens patch.

Các gói

Ba biến thể lượng tử hóa, tất cả đều được chuyển đổi từ checkpoint PyTorch upstream qua openbmb/VoxCPM2. Lượng tử hóa áp dụng cho các Linear projection bên trong LM / residual LM / DiT estimator / projection head; vocoder AudioVAE giữ ở fp16/bf16 vì lượng tử hóa nó làm giảm chất lượng âm thanh.

GóiLượng tử hóaKích thướcHuggingFace
bf16Không (tham chiếu)~5.0 GBaufklarer/VoxCPM2-MLX-bf16
int8MLX QuantizedLinear, group size 64~3.0 GBaufklarer/VoxCPM2-MLX-int8
int4MLX QuantizedLinear, group size 64~1.9 GBaufklarer/VoxCPM2-MLX-int4

Round-trip ASR (Qwen3-ASR 0.6B, bộ thử 8 câu, Apple Silicon dòng M):

Biến thểWERRTF
bf162.04 %1.38
int80.00 %1.02
int44.08 %0.83

int8 là lựa chọn mặc định được khuyến nghị — nó khớp từng bit với pipeline Python upstream trên nhánh LM trong khi nhanh hơn và nhỏ hơn 40 % so với bf16. int4 là gói nhỏ nhất với WER chấp nhận được cho sử dụng thường nhật.

Bắt đầu nhanh

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

Truyền model ID cụ thể để chọn gói int8 / int4:

let tts = try await VoxCPM2TTSModel.fromPretrained(
    modelId: "aufklarer/VoxCPM2-MLX-int8"
)

Thiết kế giọng (theo chỉ thị)

Truyền một mô tả phong cách bằng ngôn ngữ tự nhiên; mô hình sẽ điều kiện hóa quá trình tổng hợp dựa trên nó mà không cần clip tham chiếu:

let audio = try await tts.generateVoxCPM2(
    text: "Welcome to the show.",
    instruct: "A young woman, gentle and warm voice."
)

Nhân bản giọng nói

Nhân bản từ một clip mono tham chiếu 16 kHz:

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 — truyền cả âm thanh tham chiếu và bản chép tương ứng để LM cũng có thể điều kiện hóa trên ngữ cảnh từ vựng, giúp bảo toàn ngữ điệu và giọng địa phương tốt hơn:

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

Flag: --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 để tổng hợp có thể tái lập.

Chọn module TTS nào trong speech-swift

Kokoro-82MQwen3-TTSCosyVoice3VoxCPM2VibeVoice 1.5B
Tham số82M0.6 / 1.7 B0.5B2B1.5B
Sample rate24 kHz24 kHz24 kHz48 kHz24 kHz
BackendCoreML (ANE)MLX, CoreMLMLXMLXMLX
Ngôn ngữ1010930EN + ZH
Thiết kế giọngPreset cố địnhTheo chỉ thị
Nhân bản giọng nóiICL referenceZero-shot referenceReference + ultimateÂm thanh thô + bản chép
Định dạng dàiNgắn / vừaStreamingStreamingStreaming theo patchLên đến 90 phút
Chọn VoxCPM2 khi…

…bạn cần đầu ra 48 kHz (ứng dụng âm nhạc / phát thanh) hoặc thiết kế giọng nói bằng ngôn ngữ tự nhiên mà không cần clip tham chiếu. Đối với TTS ngắn chất lượng tối đa cho tiếng Anh với dung lượng tải nhỏ hơn, CosyVoice3 hoặc Qwen3-TTS nhẹ hơn. Cho podcast / sách nói dài bằng EN/ZH, VibeVoice 1.5B được thiết kế chuyên dụng cho việc này.

Sử dụng có trách nhiệm

Có hỗ trợ nhân bản giọng nói. Hãy xin phép đối với bất kỳ giọng nào bạn nhân bản và không dùng mô hình để mạo danh cá nhân, tạo thông tin sai lệch hoặc thực hiện gian lận. Áp dụng đầy đủ hướng dẫn an toàn từ openbmb/VoxCPM2.