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.
Bản chép lời tham chiếu: One can only wonder what the keyboard will become when something newer comes along.
Văn bản được tạo: While he was working at the hospital Liggins began to investigate premature labor during his spare time.
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ì
- Đầu ra 48 kHz — engine on-device duy nhất trong ngăn xếp này có sample rate chất lượng phòng thu. Mọi module TTS khác đều dừng ở 24 kHz.
- Thiết kế giọng — điều khiển phong cách bằng ngôn ngữ tự nhiên:
--voxcpm2-instruct "young female voice, warm and gentle". Không engine nào khác cung cấp tính năng này. - Nhân bản giọng nói — nhân bản từ một clip tham chiếu duy nhất ở 16 kHz; "ultimate cloning" (âm thanh tham chiếu + bản chép) để bảo toàn ngữ điệu.
- 30 ngôn ngữ — tiếng Anh, tiếng Trung, tiếng Indonesia, tiếng Nhật, tiếng Hàn và nhiều ngôn ngữ khác. Tự động phát hiện từ văn bản.
- Apache 2.0 — trọng số mô hình kế thừa giấy phép upstream của openbmb; bản port Swift của chúng tôi cũng dùng giấy phép tương tự.
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ần | Mô tả |
|---|---|
| MiniCPM-4 base LM | MiniCPM-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 LM | Biế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 estimator | Cá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 V2 | Bộ 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 head | Bộ 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ói | Lượng tử hóa | Kích thước | HuggingFace |
|---|---|---|---|
| bf16 | Không (tham chiếu) | ~5.0 GB | aufklarer/VoxCPM2-MLX-bf16 |
| int8 | MLX QuantizedLinear, group size 64 | ~3.0 GB | aufklarer/VoxCPM2-MLX-int8 |
Round-trip ASR (Qwen3-ASR 0.6B, bộ thử 8 câu, Apple Silicon dòng M):
| Biến thể | WER | RTF |
|---|---|---|
| bf16 | 2.04 % | 1.38 |
| int8 | 0.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ình | WER ↓ | RTF ↓ | UTMOS ↑ |
|---|---|---|---|
| VoxCPM2 bf16 | 1.8% | 1.11 | 2.97 |
| Qwen3-TTS Base 1.7B bf16 ICL | 2.4% | 1.70 | 3.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-82M | Qwen3-TTS | CosyVoice3 | VoxCPM2 | VibeVoice 1.5B | |
|---|---|---|---|---|---|
| Tham số | 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 |
| Ngôn ngữ | 10 | 10 | 9 | 30 | EN + ZH |
| Thiết kế giọng | Preset cố định | — | — | Theo chỉ thị | — |
| Nhân bản giọng nói | — | ICL reference | Zero-shot reference | Reference + ultimate | Âm thanh thô + bản chép |
| Định dạng dài | Ngắn / vừa | Streaming | Streaming | Streaming theo patch | Lên đến 90 phút |
…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.