VoxCPM2
VoxCPM2, OpenBMB का 2 अरब-पैरामीटर वाला, बिना-टोकनाइज़र वाला डिफ्यूज़न-ऑटोरेग्रेसिव TTS मॉडल है। यह 30 भाषाओं में 48 kHz स्टूडियो-गुणवत्ता ऑडियो तैयार करता है और तीन प्रोडक्शन मोड देता है: ज़ीरो-शॉट, सिंगल-रेफ़रेंस वॉइस क्लोनिंग और प्राकृतिक-भाषा वॉइस डिज़ाइन ("a young female voice, warm and gentle")। Apple Silicon पर यह MLX के ज़रिए bf16, int8 या int4 में नेटिव चलता है — 8-वाक्य टेस्ट हार्नेस पर int8 बंडल Qwen3-ASR राउंड-ट्रिप में 0% WER और RTF ≈ 1.0 देता है।
परिचय
- 48 kHz आउटपुट — इस स्टैक में स्टूडियो सैंपल रेट देने वाला एकमात्र ऑन-डिवाइस इंजन। बाकी सभी TTS मॉड्यूल 24 kHz तक सीमित हैं।
- वॉइस डिज़ाइन — प्राकृतिक भाषा से शैली नियंत्रण:
--voxcpm2-instruct "young female voice, warm and gentle"। बाकी कोई इंजन यह नहीं देता। - वॉइस क्लोनिंग — 16 kHz सिंगल-रेफ़रेंस क्लिप से क्लोनिंग; प्रोसोडी को बेहतर बनाए रखने के लिए "ultimate cloning" (रेफ़रेंस ऑडियो + ट्रांसक्रिप्ट)।
- 30 भाषाएँ — अंग्रेज़ी, चीनी, इंडोनेशियाई, जापानी, कोरियाई वगैरह। टेक्स्ट से ऑटो-डिटेक्ट।
- Apache 2.0 — मॉडल वज़न upstream openbmb लाइसेंस के अनुसार हैं; हमारा Swift पोर्ट उसी लाइसेंस पर है।
आर्किटेक्चर
पाँच घटक मिलकर 48 kHz वेवफ़ॉर्म तैयार करते हैं:
| घटक | विवरण |
|---|---|
| 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 के पैचेस में काम करता है। CFG-zero-star Euler सॉल्वर, डिफ़ॉल्ट 10 टाइमस्टेप्स। |
| AudioVAE V2 | कौज़ल कन्वोल्यूशनल डिकोडर। 16 kHz रेफ़रेंस ऑडियो लेता है, 48 kHz वेवफ़ॉर्म देता है (3× अपसैंपलिंग बिल्ट-इन)। |
| Stop हेड | LM के हिडन स्टेट पर प्रति-स्टेप बाइनरी क्लासिफ़ायर। argmax = 1 से minTokens पैचेस के बाद जेनरेशन ख़त्म। |
बंडल
तीन क्वांटाइज़्ड वेरिएंट, सभी upstream PyTorch openbmb/VoxCPM2 चेकपॉइंट्स से कन्वर्ट किए गए। क्वांटाइज़ेशन LM / Residual LM / DiT एस्टिमेटर / प्रोजेक्शन हेड्स के अंदर के Linear पर लागू होता है; 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 |
राउंड-ट्रिप ASR (Qwen3-ASR 0.6B, 8-वाक्य हार्नेस, M-सीरीज़ Apple Silicon):
| वेरिएंट | WER | RTF |
|---|---|---|
| bf16 | 2.04 % | 1.38 |
| int8 | 0.00 % | 1.02 |
| int4 | 4.08 % | 0.83 |
int8 ही डिफ़ॉल्ट पसंद है — LM पथ पर upstream Python पाइपलाइन से बिट-दर-बिट मेल खाता है, bf16 से तेज़ और 40% छोटा है। 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
int8 / int4 बंडल चुनने के लिए स्पष्ट model ID पास करें:
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 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 — रेफ़रेंस ऑडियो और उसके मेल खाते ट्रांसक्रिप्ट दोनों पास करें, ताकि 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।
speech-swift के TTS मॉड्यूल में से चुनना
| Kokoro-82M | Qwen3-TTS | CosyVoice3 | VoxCPM2 | VibeVoice 1.5B | |
|---|---|---|---|---|---|
| पैरामीटर | 82M | 0.6 / 1.7 B | 0.5B | 2B | 1.5B |
| सैंपल रेट | 24 kHz | 24 kHz | 24 kHz | 48 kHz | 24 kHz |
| बैकएंड | CoreML (ANE) | MLX, CoreML | MLX | MLX | MLX |
| भाषाएँ | 10 | 10 | 9 | 30 | EN + ZH |
| वॉइस डिज़ाइन | फ़िक्स्ड प्रीसेट्स | — | — | इंस्ट्रक्शन-ड्रिवन | — |
| वॉइस क्लोनिंग | — | ICL रेफ़रेंस | ज़ीरो-शॉट रेफ़रेंस | रेफ़रेंस + ultimate | ऑडियो + ट्रांसक्रिप्ट |
| लॉन्ग-फ़ॉर्म | छोटा / मध्यम | स्ट्रीमिंग | स्ट्रीमिंग | पैच स्ट्रीमिंग | 90 मिनट तक |
जब आपको 48 kHz आउटपुट चाहिए (म्यूज़िक / ब्रॉडकास्ट) या बिना किसी रेफ़रेंस क्लिप के प्राकृतिक-भाषा वॉइस डिज़ाइन। छोटे डाउनलोड के साथ अधिकतम-क्वालिटी अंग्रेज़ी शॉर्ट-फ़ॉर्म TTS के लिए CosyVoice3 या Qwen3-TTS हल्के विकल्प हैं। EN/ZH में लंबे पॉडकास्ट / ऑडियोबुक के लिए VibeVoice 1.5B ख़ास तौर से बना है।
ज़िम्मेदार इस्तेमाल
वॉइस क्लोनिंग शामिल है। जिस आवाज़ को क्लोन करें, उसकी सहमति लें। मॉडल का इस्तेमाल किसी की पहचान चुराने, दुष्प्रचार करने या धोखाधड़ी के लिए न करें। पूरा सुरक्षा दिशानिर्देश openbmb/VoxCPM2 पर देखें।