Nhân bản giọng với VoxCPM2 trên Mac

Chạy VoxCPM2 cục bộ trên Apple Silicon với MLX để nhân bản giọng hoặc thiết kế giọng từ mô tả. Mô hình OpenBMB này tạo tiếng nói 48 kHz bằng 30 ngôn ngữ. Nghe ví dụ rồi thử CLI với bản ghi tham chiếu và bản chép lời chính xác.

Mẫu âm thanh · Nhân bản giọng bằng CLI · So sánh VoxCPM2 và Qwen3-TTS

Mẫu nhân bản giọng

Các đoạn tiếng Anh này lấy từ phép so sánh FLEURS đã công bố. Bản tham chiếu và tiếng nói tạo ra dùng câu khác nhau. Mỗi đầu ra là một mẫu đại diện; các chỉ số so sánh tổng hợp nhiều đoạn.

Âm thanh tham chiếuTiếng Anh · 16 kHz

Bản chép lời tham chiếu: One can only wonder what the keyboard will become when something newer comes along.

VoxCPM2 bf16Tiếng Anh · 48 kHz

Văn bản được tạo: While he was working at the hospital Liggins began to investigate premature labor during his spare time.

Qwen3-TTS Base 1.7B bf16 ICLTiếng Anh · 24 kHz

Văn bản được tạo: While he was working at the hospital Liggins began to investigate premature labor during his spare time.

Nhân bản giọng bằng CLI

Tải Âm thanh tham chiếu về với tên reference.wav. Lệnh dùng bản chép lời chính xác của đoạn này; thay cả bản ghi và bản chép lời khi dùng mẫu giọng riêng.

speech speak "Hello from the cloned voice." \
    --engine voxcpm2 \
    --voxcpm2-variant bf16 \
    --voice-sample reference.wav \
    --voxcpm2-prompt-audio reference.wav \
    --voxcpm2-prompt-text "One can only wonder what the keyboard will become when something newer comes along." \
    --seed 42 \
    --output clone.wav

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

CLI hiện tại hỗ trợ gói bf16 và int8 chuyển đổi từ checkpoint gốc openbmb/VoxCPM2. Các phép chiếu của mô hình ngôn ngữ và khuếch tán được lượng tử hóa; bộ giải mã âm thanh giữ nguyên độ chính xác đầy đủ.

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

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
int4 (ngừng hỗ trợ)4.08 %0.83

CLI mặc định dùng bf16; chọn int8 để tải ít dữ liệu hơn. int4 đã ngừng hỗ trợ và chỉ còn trong bảng dưới dạng số đo lịch sử.

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

Chọn rõ gói int8:

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}, --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.

So sánh VoxCPM2 và Qwen3-TTS

Kết quả tiếng Anh đã công bố cho mười cặp tham chiếu/đích FLEURS mỗi mô hình: trung bình WER và UTMOS, trung vị RTF. WER và RTF càng thấp càng tốt. UTMOS dự đoán độ tự nhiên, không phải đánh giá của con người. Kết quả không xác lập thứ hạng chung cho mọi trường hợp.

Mô hìnhWER ↓RTF ↓UTMOS ↑
VoxCPM2 bf161.8%1.112.97
Qwen3-TTS Base 1.7B bf16 ICL2.4%1.703.50

So sánh nhân bản giọng ở năm ngôn ngữ và phương pháp đo.

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ố định——Theo chỉ thị—
Nhân bản giọng nói—ICL 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.