CosyVoice3
Fun-CosyVoice3-0.5B एक 9-भाषा स्ट्रीमिंग टेक्स्ट-टू-स्पीच मॉडल है। यह टेक्स्ट इनपुट से प्राकृतिक 24 kHz स्पीच उत्पन्न करने के लिए तीन-चरण पाइपलाइन — LLM टोकन जेनरेशन, DiT flow matching, और HiFi-GAN vocoding — का उपयोग करता है।
समर्थित भाषाएँ
| भाषा | कोड |
|---|---|
| चीनी | chinese |
| अंग्रेज़ी | english |
| जापानी | japanese |
| कोरियाई | korean |
| जर्मन | german |
| स्पेनिश | spanish |
| फ़्रेंच | french |
| इतालवी | italian |
| रूसी | russian |
पाइपलाइन
CosyVoice3 तीन चरणों में स्पीच सिंथेसाइज़ करता है:
- LLM — Qwen2.5-0.5B बैकबोन टेक्स्ट से FSQ (Finite Scalar Quantization) स्पीच टोकन जेनरेट करता है
- DiT Flow Matching — एक 22-लेयर Diffusion Transformer Euler ODE इंटीग्रेशन के माध्यम से स्पीच टोकन को mel spectrograms में बदलता है
- HiFi-GAN — Neural Source Filter vocoder mel spectrograms को 24 kHz वेवफ़ॉर्म में बदलता है
आर्किटेक्चर
LLM (Qwen2.5-0.5B)
भाषा मॉडल 4-bit क्वांटाइज़्ड है और ऑटोरिग्रेसिव रूप से डिस्क्रीट स्पीच टोकन जेनरेट करता है।
| पैरामीटर | मान |
|---|---|
| लेयर | 24 |
| Hidden dimension | 896 |
| Query heads | 14 |
| Key/Value heads | 2 (GQA) |
| FSQ शब्दावली | 6561 |
| क्वांटिज़ेशन | 4-bit |
DiT Flow Matching
Diffusion Transformer classifier-free guidance के साथ conditional flow matching का उपयोग करके स्पीच टोकन को mel spectrograms में परिष्कृत करता है।
| पैरामीटर | मान |
|---|---|
| लेयर | 22 |
| Dimension | 1024 |
| Attention heads | 16 |
| Conditioning | AdaLN (Adaptive Layer Norm) |
| ODE solver | Euler, 10 steps |
| CFG rate | 0.7 |
HiFi-GAN Vocoder
एक Neural Source Filter (NSF) vocoder जो mel spectrograms को वेवफ़ॉर्म में बदलता है।
| पैरामीटर | मान |
|---|---|
| Harmonics | 8 |
| Upsample ratio | 480x (8 x 5 x 3 x ISTFT 4) |
| ISTFT | n_fft=16, hop=4 |
| आउटपुट सैंपल रेट | 24 kHz |
मॉडल वेट
| मॉडल | आकार | HuggingFace |
|---|---|---|
| CosyVoice3-0.5B (4-bit LLM) | 1.2 GB | aufklarer/CosyVoice3-0.5B-MLX-4bit |
LLM (4-bit क्वांटाइज़्ड), DiT flow matching, और HiFi-GAN vocoder वेट शामिल हैं।
CLI उपयोग
.build/release/audio speak "Hallo Welt" --engine cosyvoice --language german -o output.wav
उदाहरण
# अंग्रेज़ी
.build/release/audio speak "Hello, how are you?" --engine cosyvoice -o hello_en.wav
# चीनी
.build/release/audio speak "你好世界" --engine cosyvoice --language chinese -o hello_cn.wav
# स्पेनिश
.build/release/audio speak "Hola, buenos días" --engine cosyvoice --language spanish -o hello_es.wav
# फ़्रेंच
.build/release/audio speak "Bonjour le monde" --engine cosyvoice --language french -o hello_fr.wav
वॉयस क्लोनिंग
--voice-sample फ़्लैग का उपयोग करके एक छोटे संदर्भ ऑडियो सैंपल से किसी भी वॉयस को क्लोन करें। CosyVoice3 एक 192-dim एम्बेडिंग निकालने के लिए CAM++ स्पीकर encoder का उपयोग करता है जो DiT flow मॉडल को conditioning करता है।
# वॉयस क्लोनिंग
.build/release/audio speak "Hello in your voice" --engine cosyvoice --voice-sample reference.wav -o cloned.wav
# क्रॉस-लैंग्वेज: वॉयस क्लोन करें, जर्मन में बोलें
.build/release/audio speak "Guten Tag" --engine cosyvoice --voice-sample reference.wav --language german -o german.wav
यह कैसे काम करता है
- CAM++ स्पीकर encoder CoreML (Neural Engine) के माध्यम से संदर्भ ऑडियो से 192-dim एम्बेडिंग निकालता है
- Affine projection (192 → 80) DiT flow matching decoder को लक्ष्य वॉयस पर conditioning करता है
- HiFi-GAN vocoder स्पीकर-conditioned mel spectrogram को 24kHz ऑडियो में बदलता है
स्पीकर Encoder
| गुण | मान |
|---|---|
| मॉडल | CAM++ (Context-Aware Masking++) |
| एम्बेडिंग | 192 dimensions |
| बैकएंड | CoreML (Neural Engine, FP16) |
| आकार | ~14 MB |
| HuggingFace | aufklarer/CamPlusPlus-Speaker-CoreML |
CAM++ मॉडल --voice-sample के पहले उपयोग पर स्वचालित रूप से डाउनलोड होता है। संदर्भ ऑडियो टिप्स और Swift API के लिए वॉयस क्लोनिंग गाइड देखें।
मल्टी-स्पीकर डायलॉग
इनलाइन स्पीकर टैग का उपयोग करके कई स्पीकरों के बीच वार्तालाप सिंथेसाइज़ करें। प्रत्येक स्पीकर को --speakers फ़्लैग के माध्यम से एक संदर्भ ऑडियो फ़ाइल से एक वॉयस सौंपी जाती है।
# वॉयस क्लोनिंग के साथ दो-स्पीकर डायलॉग
.build/release/audio speak "[S1] Hello there! [S2] Hey, how are you?" \
--engine cosyvoice --speakers s1=alice.wav,s2=bob.wav -o dialogue.wav
# तीन स्पीकर
.build/release/audio speak "[A] Welcome. [B] Thanks! [C] Glad to be here." \
--engine cosyvoice --speakers a=host.wav,b=guest1.wav,c=guest2.wav -o panel.wav
टैग में स्पीकर नाम केस-असंवेदनशील हैं और मैपिंग की से मिलाए जाते हैं। टर्न के बीच एक कॉन्फ़िगर करने योग्य silence gap (डिफ़ॉल्ट 0.2s) डाला जाता है।
| विकल्प | डिफ़ॉल्ट | विवरण |
|---|---|---|
--speakers | स्पीकर मैपिंग: s1=file.wav,s2=file.wav | |
--turn-gap | 0.2 | टर्न के बीच silence (सेकंड) |
--crossfade | 0.0 | टर्न के बीच crossfade overlap (सेकंड) |
इमोशन और स्टाइल टैग
इनलाइन इमोशन टैग का उपयोग करके प्रति सेगमेंट बोलने की स्टाइल नियंत्रित करें। CosyVoice3 <|endofprompt|> टोकन से पहले टेक्स्ट प्रीफ़िक्स को एक स्टाइल इंस्ट्रक्शन के रूप में उपयोग करता है — इमोशन टैग प्राकृतिक भाषा निर्देशों से मैप होते हैं जो इस प्रीफ़िक्स को प्रतिस्थापित करते हैं।
# इमोशन टैग
.build/release/audio speak "(excited) Wow, amazing! (sad) But I have to go..." \
--engine cosyvoice -o emotion.wav
# स्पीकरों के साथ संयुक्त
.build/release/audio speak "[S1] (happy) Great news! [S2] (surprised) Really?" \
--engine cosyvoice --speakers s1=alice.wav,s2=bob.wav -o combined.wav
# टैग के रूप में फ़्रीफ़ॉर्म निर्देश
.build/release/audio speak "(Speak like a pirate) Ahoy matey!" \
--engine cosyvoice -o pirate.wav
# ग्लोबल निर्देश (बिना इमोशन टैग वाले सभी सेगमेंट पर लागू)
.build/release/audio speak "Hello world" \
--engine cosyvoice --cosy-instruct "Speak cheerfully" -o cheerful.wav
बिल्ट-इन इमोशन टैग
| टैग | निर्देश |
|---|---|
happy / excited | खुशी और उत्साह से बोलें। |
sad | उदास, उदासीन स्वर में बोलें। |
angry | क्रोध और तीव्रता से बोलें। |
whispers / whispering | नरम, कोमल फुसफुसाहट में बोलें। |
laughs / laughing | हँसते हुए बोलें। |
calm | शांति और आराम से बोलें। |
surprised | आश्चर्य और विस्मय से बोलें। |
serious | गंभीर, औपचारिक स्वर में बोलें। |
अज्ञात टैग फ़्रीफ़ॉर्म निर्देशों के रूप में पास होते हैं, इसलिए (Speak in a slow, dramatic voice) जैसा काम करता है।
सैंपलिंग
LLM चरण निम्नलिखित सैंपलिंग कॉन्फ़िगरेशन का उपयोग करता है:
| पैरामीटर | मान |
|---|---|
| Top-k | 25 |
| Top-p | 0.8 |
| Repetition Aware Sampling | सक्षम (window=10, tau_r=0.1) |
Repetition Aware Sampling (RAS), VALL-E 2 से, उन टोकनों को दंडित करता है जो अंतिम 10 जेनरेट किए गए टोकनों में दिखाई दिए। यह दोहराए जाने वाले ऑडियो आर्टिफ़ैक्ट्स को रोकता है और आउटपुट स्थिरता में सुधार करता है।
प्रदर्शन
M2 Max पर, CosyVoice3 लगभग 0.5 का RTF प्राप्त करता है — रियल-टाइम से तेज़।
| चरण | लेटेंसी |
|---|---|
| LLM (compiled) | ~13 ms/token |
| DiT Flow Matching | 370 - 520 ms |
| HiFi-GAN | 50 - 170 ms |
LLM चरण ऑटोरिग्रेसिव लूप के लिए compile(shapeless: true) का उपयोग करता है, जो विभिन्न अनुक्रम लंबाई पर recompilation ओवरहेड को समाप्त करता है। Batch-doubled CFG DiT forward passes की संख्या को 20 से 10 तक आधा कर देता है।