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

एक छोटे reference ऑडियो sample से किसी भी voice को क्लोन करें। Qwen3-TTS और CosyVoice3 दोनों अलग-अलग speaker encoders के साथ voice cloning का समर्थन करते हैं — क्रमशः ECAPA-TDNN (1024-dim) और CAM++ (192-dim)।

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

  1. Target voice का एक reference ऑडियो sample रिकॉर्ड या प्रदान करें
  2. Speaker embedding extraction — एक speaker encoder reference audio को एक fixed-dimensional embedding vector में प्रोसेस करता है
  3. Embedding injection — speaker embedding synthesis के दौरान TTS मॉडल को condition करता है
  4. Speech synthesis — TTS मॉडल ऐसी speech उत्पन्न करता है जो reference sample की vocal विशेषताओं से मेल खाती है

इंजन

Voice cloning दोनों TTS इंजनों के साथ उपलब्ध है। प्रत्येक एक अलग speaker encoder का उपयोग करता है:

इंजनSpeaker EncoderEmbeddingबैकएंड
Qwen3-TTSECAPA-TDNN1024-dim x-vectorMLX (GPU)
CosyVoice3CAM++192-dimCoreML (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++ आर्किटेक्चर

चरणविवरण
FCMFront-end convolutional module (Conv2d + 2 ResBlocks, 32 channels)
TDNNTime Delay Neural Network (320 से 128 channels, kernel size 5)
D-TDNN blockscontext-aware masking के साथ 3 densely-connected blocks (12/24/16 layers)
Stats PoolMean + standard deviation pooling (global statistics)
Dense192-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 आर्किटेक्चर

चरणविवरण
TDNNTime Delay Neural Network (128 से 512 channels, kernel size 5)
SE-Res2Net blocksSqueeze-and-Excitation (512 channels, dilation 2/3/4) के साथ 3 blocks
MFAMulti-layer Feature Aggregation (1536 channels + ReLU)
ASPAttentive Statistics Pooling (1536 channels, समय पर softmax)
FCFully 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 टिप्स

महत्वपूर्ण

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
)