CosyVoice3

Fun-CosyVoice3-0.5B एक 9-भाषा स्ट्रीमिंग टेक्स्ट-टू-स्पीच मॉडल है। यह टेक्स्ट इनपुट से प्राकृतिक 24 kHz स्पीच उत्पन्न करने के लिए तीन-चरण पाइपलाइन — LLM टोकन जेनरेशन, DiT flow matching, और HiFi-GAN vocoding — का उपयोग करता है। यह मॉडल — जिसे CosyVoice 3 भी लिखा जाता है — FunAudioLLM CosyVoice परिवार का नवीनतम संस्करण है।

समर्थित भाषाएँ

भाषाकोड
चीनीchinese
अंग्रेज़ीenglish
जापानीjapanese
कोरियाईkorean
जर्मनgerman
स्पेनिशspanish
फ़्रेंचfrench
इतालवीitalian
रूसीrussian

पाइपलाइन

CosyVoice3 तीन चरणों में स्पीच सिंथेसाइज़ करता है:

  1. LLM — Qwen2.5-0.5B बैकबोन टेक्स्ट से FSQ (Finite Scalar Quantization) स्पीच टोकन जेनरेट करता है
  2. DiT Flow Matching — एक 22-लेयर Diffusion Transformer Euler ODE इंटीग्रेशन के माध्यम से स्पीच टोकन को mel spectrograms में बदलता है
  3. HiFi-GAN — Neural Source Filter vocoder mel spectrograms को 24 kHz वेवफ़ॉर्म में बदलता है

आर्किटेक्चर

LLM (Qwen2.5-0.5B)

भाषा मॉडल ऑटोरीग्रेसिव तरीके से डिस्क्रीट स्पीच टोकन जनरेट करता है। रनटाइम चार क्वांटिज़ेशन वेरिएंट में आता है — 4-bit, 8-bit, 8-bit-full (int8 LLM + int8 DiT), और bf16 (अनक्वांटाइज़्ड) — हर कॉल पर --cosyvoice-variant से चुनें।

पैरामीटरमान
लेयर24
Hidden dimension896
Query heads14
Key/Value heads2 (GQA)
FSQ शब्दावली6561
क्वांटिज़ेशन4-bit

DiT Flow Matching

Diffusion Transformer classifier-free guidance के साथ conditional flow matching का उपयोग करके स्पीच टोकन को mel spectrograms में परिष्कृत करता है।

पैरामीटरमान
लेयर22
Dimension1024
Attention heads16
ConditioningAdaLN (Adaptive Layer Norm)
ODE solverEuler, 10 steps
CFG rate0.7

HiFi-GAN Vocoder

एक Neural Source Filter (NSF) vocoder जो mel spectrograms को वेवफ़ॉर्म में बदलता है।

पैरामीटरमान
Harmonics8
Upsample ratio480x (8 x 5 x 3 x ISTFT 4)
ISTFTn_fft=16, hop=4
आउटपुट सैंपल रेट24 kHz

मॉडल वेट

वेरिएंटLLMDiTसाइज़HuggingFace
4bit (डिफ़ॉल्ट)int4, group=64bf16~1.2 GBaufklarer/CosyVoice3-0.5B-MLX-4bit
8bitint8, group=64bf16~1.4 GBaufklarer/CosyVoice3-0.5B-MLX-8bit
8bit-fullint8, group=64int8, group=64~1.6 GBaufklarer/CosyVoice3-0.5B-MLX-8bit-full
bf16bf16bf16~2.1 GBaufklarer/CosyVoice3-0.5B-MLX-bf16

हर बंडल में LLM, DiT फ़्लो-मैचिंग डिकोडर, HiFi-GAN वोकोडर, और zero-shot वॉइस क्लोनिंग के लिए ज़रूरी S3-Tokenizer रेफरेंस एनकोडर शामिल हैं। छोटे डाउनलोड/डिस्क के लिए छोटे बंडल चुनें; जब LLM/DiT क्वांटिज़ेशन नॉइज़ समस्या बने (लॉन्ग-फ़ॉर्म सिंथेसिस, वॉइस क्लोनिंग फ़िडेलिटी) तो bf16 चुनें।

CLI उपयोग

.build/release/speech speak "Hallo Welt" --engine cosyvoice --language german -o output.wav

उदाहरण

# अंग्रेज़ी
.build/release/speech speak "Hello, how are you?" --engine cosyvoice -o hello_en.wav

# चीनी
.build/release/speech speak "你好世界" --engine cosyvoice --language chinese -o hello_cn.wav

# स्पेनिश
.build/release/speech speak "Hola, buenos días" --engine cosyvoice --language spanish -o hello_es.wav

# फ़्रेंच
.build/release/speech speak "Bonjour le monde" --engine cosyvoice --language french -o hello_fr.wav

वॉयस क्लोनिंग

--voice-sample फ़्लैग का उपयोग करके एक छोटे संदर्भ ऑडियो सैंपल से किसी भी वॉयस को क्लोन करें। CosyVoice3 एक 192-dim एम्बेडिंग निकालने के लिए CAM++ स्पीकर encoder का उपयोग करता है जो DiT flow मॉडल को conditioning करता है।

# वॉयस क्लोनिंग
.build/release/speech speak "Hello in your voice" --engine cosyvoice --voice-sample reference.wav -o cloned.wav

# क्रॉस-लैंग्वेज: वॉयस क्लोन करें, जर्मन में बोलें
.build/release/speech speak "Guten Tag" --engine cosyvoice --voice-sample reference.wav --language german -o german.wav

यह कैसे काम करता है

  1. CAM++ स्पीकर encoder CoreML (Neural Engine) के माध्यम से संदर्भ ऑडियो से 192-dim एम्बेडिंग निकालता है
  2. Affine projection (192 → 80) DiT flow matching decoder को लक्ष्य वॉयस पर conditioning करता है
  3. HiFi-GAN vocoder स्पीकर-conditioned mel spectrogram को 24kHz ऑडियो में बदलता है

स्पीकर Encoder

गुणमान
मॉडलCAM++ (Context-Aware Masking++)
एम्बेडिंग192 dimensions
बैकएंडCoreML (Neural Engine, FP16)
आकार~14 MB
HuggingFaceaufklarer/CamPlusPlus-Speaker-CoreML

CAM++ मॉडल --voice-sample के पहले उपयोग पर स्वचालित रूप से डाउनलोड होता है। संदर्भ ऑडियो टिप्स और Swift API के लिए वॉयस क्लोनिंग गाइड देखें।

मल्टी-स्पीकर डायलॉग

इनलाइन स्पीकर टैग का उपयोग करके कई स्पीकरों के बीच वार्तालाप सिंथेसाइज़ करें। प्रत्येक स्पीकर को --speakers फ़्लैग के माध्यम से एक संदर्भ ऑडियो फ़ाइल से एक वॉयस सौंपी जाती है।

# वॉयस क्लोनिंग के साथ दो-स्पीकर डायलॉग
.build/release/speech speak "[S1] Hello there! [S2] Hey, how are you?" \
    --engine cosyvoice --speakers s1=alice.wav,s2=bob.wav -o dialogue.wav

# तीन स्पीकर
.build/release/speech 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-gap0.2टर्न के बीच silence (सेकंड)
--crossfade0.0टर्न के बीच crossfade overlap (सेकंड)

इमोशन और स्टाइल टैग

इनलाइन इमोशन टैग का उपयोग करके प्रति सेगमेंट बोलने की स्टाइल नियंत्रित करें। CosyVoice3 <|endofprompt|> टोकन से पहले टेक्स्ट प्रीफ़िक्स को एक स्टाइल इंस्ट्रक्शन के रूप में उपयोग करता है — इमोशन टैग प्राकृतिक भाषा निर्देशों से मैप होते हैं जो इस प्रीफ़िक्स को प्रतिस्थापित करते हैं।

# इमोशन टैग
.build/release/speech speak "(excited) Wow, amazing! (sad) But I have to go..." \
    --engine cosyvoice -o emotion.wav

# स्पीकरों के साथ संयुक्त
.build/release/speech speak "[S1] (happy) Great news! [S2] (surprised) Really?" \
    --engine cosyvoice --speakers s1=alice.wav,s2=bob.wav -o combined.wav

# टैग के रूप में फ़्रीफ़ॉर्म निर्देश
.build/release/speech speak "(Speak like a pirate) Ahoy matey!" \
    --engine cosyvoice -o pirate.wav

# ग्लोबल निर्देश (बिना इमोशन टैग वाले सभी सेगमेंट पर लागू)
.build/release/speech 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) जैसा काम करता है।

मॉडल नियंत्रण टोकन (fl_ टोकन)

आंतरिक रूप से, CosyVoice3 LLM fl_ उपसर्ग वाले विशेष नियंत्रण टोकन का उपयोग मोड (शून्य-शॉट क्लोनिंग, निर्देश संश्लेषण, स्पीकर सहेजना आदि) के बीच स्विच करने के लिए करता है। ये टोकन अपस्ट्रीम FunAudioLLM टोकनाइज़र का हिस्सा हैं; Soniqo रनटाइम आपके द्वारा उपयोग किए जाने वाले CLI फ्लैग या Swift API कॉल के आधार पर सही टोकन को स्वचालित रूप से उत्सर्जित करता है, इसलिए आपको उन्हें कभी हाथ से नहीं लिखना पड़ता।

नियंत्रण टोकनमोडSoniqo से कैसे इनवोक करें
<|fl_speaker_clone|>रेफ़रेंस ऑडियो सैंपल से शून्य-शॉट वॉइस क्लोनिंगCLI पर --voice-sample reference.wav पास करें, या Swift API पर voiceSample: सेट करें।
<|fl_speaker_instruct|>डिफ़ॉल्ट आवाज़ के साथ निर्देश- या शैली-सशर्त संश्लेषण--voice-sample के बिना --cosy-instruct "Speak cheerfully" पास करें या इनलाइन (happy) टैग का उपयोग करें।
<|fl_speaker_instruct2|>क्लोन की गई रेफ़रेंस आवाज़ के साथ संयुक्त निर्देश संश्लेषणएक ही कॉल में --voice-sample reference.wav को --cosy-instruct "..." (या इनलाइन इमोशन टैग) के साथ मिलाएँ।
<|fl_save_speaker|>हर कॉल पर रेफ़रेंस ऑडियो को फिर से एनकोड किए बिना स्पीकर एम्बेडिंग को बरकरार रखता हैSoniqo CLI में सीधे उजागर नहीं — एम्बेडिंग प्रति कॉल गणना की जाती है। कैश करने के लिए, स्पीकर एम्बेडिंग मॉड्यूल के माध्यम से 192-आयामी CAM++ वेक्टर स्वयं निकालें और आगे पास करें।
<|fl_speaker_clone_zh|>, <|fl_speaker_clone_en|>, …अपस्ट्रीम टोकनाइज़र द्वारा उपयोग किए जाने वाले भाषा-विशिष्ट शून्य-शॉट क्लोनिंग संकेत--voice-sample को --language german|spanish|chinese|... के साथ मिलाएँ। Soniqo --language फ्लैग से सही भाषा संकेत चुनता है।
यदि आप FunAudioLLM/CosyVoice से पोर्ट कर रहे हैं

ऊपर की तालिका प्रत्येक अपस्ट्रीम fl_ नियंत्रण टोकन को उसके Soniqo समकक्ष पर मैप करती है। आपको कभी भी अपने प्रॉम्प्ट में fl_ टोकन स्वयं डालने की आवश्यकता नहीं है — उच्च-स्तरीय CLI फ्लैग या Swift API आर्ग्युमेंट पास करें, और रनटाइम सही अनुक्रम (clone → instruct → instruct2 → save_speaker) उत्सर्जित करेगा।

सैंपलिंग

LLM चरण निम्नलिखित सैंपलिंग कॉन्फ़िगरेशन का उपयोग करता है:

पैरामीटरमान
Top-k25
Top-p0.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 Matching370 - 520 ms
HiFi-GAN50 - 170 ms
Compilation

LLM चरण ऑटोरिग्रेसिव लूप के लिए compile(shapeless: true) का उपयोग करता है, जो विभिन्न अनुक्रम लंबाई पर recompilation ओवरहेड को समाप्त करता है। Batch-doubled CFG DiT forward passes की संख्या को 20 से 10 तक आधा कर देता है।