Maskinöversättning · Engelskt original
Röstkloning
Klon alla röster från en kort referens ljudprov. IndexTTS2 lägger till infödd MLX noll-shot kloning med känslor, tempo och paus kontroller, tillsammans med Qwen3-TTS och CosyVoice3 högtalar-encoder kloning.
Hur det fungerar
- Record eller ge ett referensljudprov av målrösten
- Speaker inbäddning extraktion - en högtalare kodare behandlar referensljudet i en fast-dimensionell inbäddningsvektor
- Inbäddning av injektion — högtalarens inbäddningsförhållanden TTS modell under syntesen
- Speech synthesis -- TTS-modellen genererar tal som matchar referensprovets vokalkaraktärer
Motorer
Voice kloning är tillgänglig med flera TTS motorer. IndexTTS2 använder snabb ljud- och stilkonditionering; Qwen3-TTS och CosyVoice3 använda högtalarkodare:
F5-TTS och Higgs TTS 3 hoppa över högtalarkodaren helt: F5 villkor på rå referensmelen plus dess transkript, Higgs fortsätter codec-kodade referensramar.
| Engine | Högtalare Encoder | Inbäddning | Backend |
|---|---|---|---|
| Qwen3-TTS | ECAPA-TDNN | 1024-dim x-vektor | MLX (GPU) |
| CosyVoice3 | CAM+++ | 192-dim | CoreML (Neural Engine) |
| IndexTTS2 | w2v-BERT + MaskGCT + CAMPPlus | semantiska koder + snabb mel + 192-dim stil | MLX (GPU) |
| F5-TTS | Ingen - rå referens mel + transkript | 100-bands referensmel | MLX (GPU) |
| Higgs TTS 3 | Higgs codec encoder | 8-kodbok referenskoder | MLX (GPU) |
IndexTTS2 Voice Cloning
IndexTTS2 är en infödd MLX noll-shot röstkloningsmotor. Det kräver --voice-sample, nedladdningar aufklarer/IndexTTS2-MLX-fp16 Som standard, och stöder valfria känslor / stil referenser, förinställda eller vektor känslor kontroll, tala räntejustering och internt paus kapning. Det driver för närvarande batch syntes endast. Emotion kan komma från en förinställd eller en 8-värde vektor (ZXQ0)--indextts2-emotion, viktad av --indextts2-emotion-weight() eller från en separat stilreferens ()--indextts2-emotion-audio); --indextts2-s2mel-steps trades flow steps for speed (default 15, ear-validated). Efter float32-attention decode omarbeta det syntetiseras vid RTF ≈ 1.0 på en M5 Pro. Mandarin och blandad kinesisk / engelska text hanteras inhemskt - uppströms skiljetecken rewriting och per-karaktär pre-tokenization - siffrorna läses ut i ord, och lång text synteras i punktering.
F5-TTS Voice Cloning
F5-TTS kloner från en ~ 10-sekund referens plus dess transkript (--f5-reference-text) genom DiT-flödesmatchning - ingen högtalare kodare alls. Det är den snabbaste kloningen i paketet (RTF 0.57 vid standard 16 flödesstegen, lägre är snabbare) och den minsta (~ 0.8 GB-topp RSS), som täcker engelska och mandarin. Se F5-TTS guide.
Higgs TTS 3 Voice Cloning
Higgs TTS 3 (4B) kodar referensklippet i codec-ramar och fortsätter det: expressiv konversationsleverans med inline-känslor, stil och SFX-taggar, 100+ språk, RTF 0.78En referensavskrift (referensavskrift)--higgs-ref-text) förbättrar kloningen. se Higgs TTS 3 guide.
CosyVoice3 + CAM+++
CosyVoice3 använder CAM+++ (Context-Aware Masking++) högtalare från Alibabas 3D-Speaker-projekt. 192-dim inbäddningsförhållanden DiT-flödesmodellen via ett affinprojektionsskikt (192 → 80) som var gemensamt utbildat med CosyVoice3.
CAM++ Arkitektur
| Steg | Beskrivning |
|---|---|
| FCM | Front-end konvolutionell modul (Conv2d + 2 ResBlocks, 32 kanaler) |
| TDNN | Time Delay Neural Network (320 till 128 kanaler, kärnstorlek 5) |
| D-TDNN block | 3 tätanslutna block (12/24/16 lager) med kontextmedveten maskering |
| Statspool | Medel + standardavvikelse poolning (global statistik) |
| Dense | Linjär projektion till 192-dim inbäddning |
CoreML modell (~14 MB, FP16) körs på Neural Engine. Den laddas automatiskt från aufklarer/CamPlusPlus-Speaker-CoreML vid första användning.
Qwen3-TTS Voice Cloning
Qwen3-TTS stöder två röstkloneringslägen:
ICL-läge (rekommenderas)
In-Context Learning-läge kodar referensljudet i codec-tokens via Mimi taltokenizer-kodaren och prepends dem med referensavskriften. Detta ger modellen full akustisk kontext - högre kvalitet och tillförlitliga EOS (fixar problem med korta texter och icke-engelska språk).
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
)
Qwen3-TTS bevarar 1920 prover per codec-ram vid 24 kHz, inklusive överlappande avkodningsknappar. Både pre-upsamplingskikt använder kärnbredd 2 och steg 2
X-Vector Mode
Använder en ECAPA-TDNN-kodare som producerar en 1024-dim x-vektor. Inget transkript som behövs men lägre kvalitet. Kan misslyckas med att avge EOS på korta texter eller vissa språk.
ECAPA-TDNN arkitektur
| Steg | Beskrivning |
|---|---|
| TDNN | Time Delay Neural Network (128 till 512 kanaler, kärnstorlek 5) |
| SE-Res2Net block | 3 block med Squeeze-and-Excitation (512 kanaler, dilatation 2/3/4) |
| MFA | Multi-layer Feature Aggregation (1536 kanaler + ReLU) |
| ASP | Attentive Statistics Pooling (1536 kanaler, softmax över tiden) |
| FC | Fullt anslutna lager (3072 till 1024 dimensioner) |
Vikterna (76 parametrar) ingår i Qwen3-TTS skyddsmedel - ingen separat nedladdning krävs.
CLI Användning
# CosyVoice3 voice cloning (CAM++, CoreML Neural Engine)
.build/release/speech speak "Text in the cloned voice" \
--engine cosyvoice --voice-sample reference.wav -o output.wav
# IndexTTS2 voice cloning (expanded MLX bundle)
.build/release/speech speak "Text in the cloned voice" \
--engine indextts2 --voice-sample reference.wav \
--indextts2-speaking-rate 1.35 \
--indextts2-max-pause 0.05 \
-o output.wav
# F5-TTS voice cloning (reference + transcript, MLX GPU)
.build/release/speech speak "Text in the cloned voice" \
--engine f5 --voice-sample reference.wav \
--f5-reference-text "Transcript of the reference clip." -o output.wav
# Higgs TTS 3 voice cloning (4B, expressive, MLX GPU)
.build/release/speech speak "Text in the cloned voice" \
--engine higgs --voice-sample reference.wav \
--higgs-ref-text "Transcript of the reference clip." -o output.wav
# Qwen3-TTS voice cloning (ECAPA-TDNN, MLX GPU)
.build/release/speech speak "Text in the cloned voice" \
--voice-sample reference.wav -o output.wav
Exempel
# CosyVoice3: multilingual voice cloning (9 languages)
.build/release/speech 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/speech 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/speech speak "The quick brown fox jumps over the lazy dog." \
--voice-sample recording_15s.wav -o cloned_fox.wav
# IndexTTS2: local exported bundle
.build/release/speech speak "This voice was cloned locally." \
--engine indextts2 --voice-sample my_voice.wav \
--indextts2-speaking-rate 1.35 \
--indextts2-max-pause 0.05 \
--indextts2-bundle-dir /path/to/IndexTTS2-MLX-fp16 \
-o indextts2.wav
Multihögtalardialog
CosyVoice3 stöder dialog med flertal talare med per-talare röstkloning. Använd --speakers flaggan för att kartlägga högtalartaggar till referensljudfiler:
# Two-speaker dialogue with voice cloning
.build/release/speech 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/speech 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/speech speak "[S1] First line. [S2] Second line." \
--engine cosyvoice --speakers s1=a.wav,s2=b.wav --turn-gap 0.5 -o gapped.wav
Varje högtalares referensljud bearbetas genom CAM++-kodaren för att extrahera en 192-dim-inbäddning. Modellen laddas en gång och återanvänds för alla högtalare. Se CosyVoice3 guide för fullständiga detaljer om dialogsyntax och känslor taggar.
Referens Audio Tips
- Varaktighet: 5 till 15 sekunder av tal fungerar bäst. Kortare klipp kan inte fånga tillräckligt med vokala egenskaper; längre klipp ger minskande avkastning.
- Ensamstående högtalare: Referensen ska endast innehålla en högtalare. Multi-högtalarljud kommer att ge oförutsägbara resultat.
- Clean audio: Minimera bakgrundsljud, musik och efterklang. Använd talförbättring-modulen för att rengöra bullriga referenser innan kloning.
- Naturligt tal: Använd konversationellt, naturligt ljudande tal istället för viskningar, skrik eller sång.
För Qwen3-TTS fungerar röstkloning med base-modellen endast - inte customVoice. CosyVoice3 röstklonning med standardmodellen. IndexTTS2 kräver --voice-sample, kör för närvarande batchsyntes endast och accepterar valfria känslor/stilkontroller.
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
)
import IndexTTS2TTS
// IndexTTS2 zero-shot voice cloning
let model = try await IndexTTS2TTSModel.fromPretrained()
let audio = try await model.generate(
text: "Hello in a cloned voice!",
referenceAudio: URL(fileURLWithPath: "reference.wav"),
synthesisOptions: try IndexTTS2SynthesisOptions(
speakingRate: 1.35,
maxInternalPauseDuration: 0.05)
)
Referens Audio Caching
Båda båda två synthesizeWithVoiceClone (x-vektor) och synthesizeWithVoiceCloneICL (ICL) cache deras per-referens preprocessing över samtal på samma modellinstans. x-vektorvägen cachar ECAPA-TDNN högtalare inbäddning; ICL-vägen ytterligare cachar Mimi codec kodare utgång. Cache är innehålls-adresserad (hash av råvaror + provhastighet) och bunden till en liten LRU (standard 4-poster), så upprepade generationer mot samma referensvågforma mel + kodaren passerar utan
let tts = try await Qwen3TTSModel.fromPretrained()
// First call: runs ECAPA-TDNN, caches the embedding
_ = tts.synthesizeWithVoiceClone(text: "Hello", referenceAudio: ref, ...)
// Subsequent calls with the same reference: cache hit
_ = tts.synthesizeWithVoiceClone(text: "How are you?", referenceAudio: ref, ...)
// Explicit eviction (rarely needed — LRU handles capacity)
tts.clearReferenceAudioCache()