वॉयस क्लोनिंग
एक छोटे reference ऑडियो sample से किसी भी voice को क्लोन करें। Qwen3-TTS और CosyVoice3 दोनों अलग-अलग speaker encoders के साथ voice cloning का समर्थन करते हैं — क्रमशः ECAPA-TDNN (1024-dim) और CAM++ (192-dim)।
यह कैसे काम करता है
- Target voice का एक reference ऑडियो sample रिकॉर्ड या प्रदान करें
- Speaker embedding extraction — एक speaker encoder reference audio को एक fixed-dimensional embedding vector में प्रोसेस करता है
- Embedding injection — speaker embedding synthesis के दौरान TTS मॉडल को condition करता है
- Speech synthesis — TTS मॉडल ऐसी speech उत्पन्न करता है जो reference sample की vocal विशेषताओं से मेल खाती है
इंजन
Voice cloning दोनों TTS इंजनों के साथ उपलब्ध है। प्रत्येक एक अलग speaker encoder का उपयोग करता है:
| इंजन | Speaker Encoder | Embedding | बैकएंड |
|---|---|---|---|
| Qwen3-TTS | ECAPA-TDNN | 1024-dim x-vector | MLX (GPU) |
| CosyVoice3 | CAM++ | 192-dim | CoreML (Neural Engine) |
CosyVoice3 + CAM++
CosyVoice3 Alibaba के 3D-Speaker project से CAM++ (Context-Aware Masking++) speaker encoder का उपयोग करता है। 192-dim embedding एक affine projection layer (192 → 80) के माध्यम से DiT flow मॉडल को condition करता है जिसे CosyVoice3 के साथ jointly प्रशिक्षित किया गया था।
CAM++ आर्किटेक्चर
| चरण | विवरण |
|---|---|
| FCM | Front-end convolutional module (Conv2d + 2 ResBlocks, 32 channels) |
| TDNN | Time Delay Neural Network (320 से 128 channels, kernel size 5) |
| D-TDNN blocks | context-aware masking के साथ 3 densely-connected blocks (12/24/16 layers) |
| Stats Pool | Mean + standard deviation pooling (global statistics) |
| Dense | 192-dim embedding पर Linear projection |
CoreML मॉडल (~14 MB, FP16) Neural Engine पर चलता है। यह पहले उपयोग पर aufklarer/CamPlusPlus-Speaker-CoreML से स्वचालित रूप से डाउनलोड होता है।
Qwen3-TTS Voice Cloning
Qwen3-TTS दो voice cloning modes का समर्थन करता है:
ICL Mode (अनुशंसित)
In-Context Learning mode reference audio को Mimi speech tokenizer encoder के माध्यम से codec tokens में encode करता है और उन्हें reference transcript के साथ prepend करता है। यह मॉडल को पूर्ण ध्वनिक संदर्भ देता है — उच्च गुणवत्ता और विश्वसनीय EOS (छोटे texts और गैर-अंग्रेज़ी भाषाओं के साथ मुद्दों को ठीक करता है)।
let (model, encoder) = try await Qwen3TTSModel.fromPretrainedWithEncoder()
let audio = model.synthesizeWithVoiceCloneICL(
text: "Target text to synthesize.",
referenceAudio: refSamples,
referenceSampleRate: 24000,
referenceText: "Exact transcript of reference audio.",
language: "english",
codecEncoder: encoder
)
X-Vector Mode
एक ECAPA-TDNN encoder का उपयोग करता है जो एक 1024-dim x-vector उत्पन्न करता है। कोई transcript आवश्यक नहीं है लेकिन कम गुणवत्ता। छोटे texts या कुछ भाषाओं पर EOS उत्सर्जित करने में विफल हो सकता है।
ECAPA-TDNN आर्किटेक्चर
| चरण | विवरण |
|---|---|
| TDNN | Time Delay Neural Network (128 से 512 channels, kernel size 5) |
| SE-Res2Net blocks | Squeeze-and-Excitation (512 channels, dilation 2/3/4) के साथ 3 blocks |
| MFA | Multi-layer Feature Aggregation (1536 channels + ReLU) |
| ASP | Attentive Statistics Pooling (1536 channels, समय पर softmax) |
| FC | Fully connected layer (3072 से 1024 dimensions) |
Weights (76 parameters) Qwen3-TTS safetensors में शामिल हैं — कोई अलग डाउनलोड आवश्यक नहीं।
CLI उपयोग
# CosyVoice3 voice cloning (CAM++, CoreML Neural Engine)
.build/release/audio speak "Text in the cloned voice" \
--engine cosyvoice --voice-sample reference.wav -o output.wav
# Qwen3-TTS voice cloning (ECAPA-TDNN, MLX GPU)
.build/release/audio speak "Text in the cloned voice" \
--voice-sample reference.wav -o output.wav
उदाहरण
# CosyVoice3: multilingual voice cloning (9 languages)
.build/release/audio speak "Hello, this is my cloned voice." \
--engine cosyvoice --voice-sample my_voice.wav -o cloned_hello.wav
# CosyVoice3: clone voice in a different language
.build/release/audio speak "Guten Tag, das ist meine geklonte Stimme." \
--engine cosyvoice --voice-sample my_voice.wav --language german -o german.wav
# Qwen3-TTS: English voice cloning
.build/release/audio speak "The quick brown fox jumps over the lazy dog." \
--voice-sample recording_15s.wav -o cloned_fox.wav
Multi-Speaker Dialogue
CosyVoice3 प्रति-speaker voice cloning के साथ multi-speaker dialogue का समर्थन करता है। speaker tags को reference audio फ़ाइलों पर मैप करने के लिए --speakers flag का उपयोग करें:
# Two-speaker dialogue with voice cloning
.build/release/audio speak "[S1] Hello there! [S2] Hey, how are you?" \
--engine cosyvoice --speakers s1=alice.wav,s2=bob.wav -o dialogue.wav
# Dialogue with emotion tags + voice cloning
.build/release/audio speak "[S1] (happy) Great news! [S2] (surprised) Really? Tell me more." \
--engine cosyvoice --speakers s1=alice.wav,s2=bob.wav -o emotional_dialogue.wav
# Adjust silence between turns
.build/release/audio speak "[S1] First line. [S2] Second line." \
--engine cosyvoice --speakers s1=a.wav,s2=b.wav --turn-gap 0.5 -o gapped.wav
प्रत्येक speaker का reference audio 192-dim embedding निकालने के लिए CAM++ encoder के माध्यम से प्रोसेस किया जाता है। मॉडल एक बार लोड किया जाता है और सभी speakers के लिए फिर से उपयोग किया जाता है। dialogue syntax और emotion tags पर पूर्ण विवरण के लिए CosyVoice3 गाइड देखें।
Reference Audio टिप्स
- अवधि: 5 से 15 सेकंड की speech सबसे अच्छा काम करती है। छोटे clips पर्याप्त vocal विशेषताओं को कैप्चर नहीं कर सकते; लंबे clips कम रिटर्न प्रदान करते हैं।
- Single speaker: Reference में केवल एक speaker होना चाहिए। Multi-speaker audio अप्रत्याशित परिणाम उत्पन्न करेगा।
- साफ़ ऑडियो: background noise, music, और reverberation को कम करें। क्लोनिंग से पहले noisy references को साफ़ करने के लिए स्पीच एन्हांसमेंट मॉड्यूल का उपयोग करें।
- Natural speech: Whispers, shouts, या singing के बजाय conversational, natural-sounding speech का उपयोग करें।
Qwen3-TTS के लिए, voice cloning केवल base मॉडल के साथ काम करती है — customVoice के साथ नहीं। CosyVoice3 voice cloning डिफ़ॉल्ट मॉडल के साथ काम करती है।
Swift API
import CosyVoiceTTS
// CosyVoice3 voice cloning
let model = try await CosyVoiceTTSModel.fromPretrained()
let speaker = try await CamPlusPlusSpeaker.fromPretrained()
// Extract 192-dim speaker embedding from reference audio
let embedding = try speaker.embed(audio: refSamples, sampleRate: 16000)
// Synthesize with cloned voice
let audio = model.synthesize(
text: "Hello in a cloned voice!",
speakerEmbedding: embedding
)
// With custom instruction + speaker embedding
let styledAudio = model.synthesize(
text: "Hello!",
instruction: "Speak happily and with excitement.",
speakerEmbedding: embedding
)
// Multi-speaker dialogue
let segments = DialogueParser.parse("[S1] (happy) Hi! [S2] Hey there.")
let embeddings = ["S1": aliceEmbedding, "S2": bobEmbedding]
let dialogueAudio = DialogueSynthesizer.synthesize(
segments: segments,
speakerEmbeddings: embeddings,
model: model,
language: "english"
)
import Qwen3TTS
// Qwen3-TTS voice cloning
let model = try await Qwen3TTSModel.fromPretrained()
let audio = model.synthesizeWithVoiceClone(
text: "Hello in a cloned voice!",
referenceAudio: refSamples,
referenceSampleRate: 24000
)