Maskinoversættelse · Engelsk original
Stemmekloning
Klone enhver stemme fra en kort reference lydprøve. IndexTTS2 tilføjer indfødte MLX zero- shot kloning med følelser, tempo, og pause kontrol, sammen med Qwen3-TTS og CosyVoice3 speaker- encoder kloning.
Sådan virker det
- Optag eller fremlæg en referencelydprøve af målstemmen
- Ekstraktion af højttalerindlejring - en højttaler indkoder behandler referencen lyd i en fixed- dimensional indlejring vektor
- Indlejring - højttaleren indlejring betingelser TTS model under syntesen
- Talesyntese - TTS-modellen genererer tale, der matcher referenceprøvens stemmeegenskaber
Motorer
Stemmekloning er tilgængelig med flere TTS motorer. IndexTTS2 bruger hurtig lyd og stil konditionering; Qwen3-TTS og CosyVoice3 bruge højttaler encoders:
F5-TTS og Higgs TTS 3 Spring højttaleren helt over: F5 betingelserne for den rå referencemel plus udskrift heraf Higgs fortsætter kokodede referencerammer.
| Motor | Speaker Encoder | Indlejring | Backend |
|---|---|---|---|
| Qwen3-TTS | ECAPA- TDNN | 1024-dim x- vektor | MLX (GPU) |
| CosyVoice3 | CAM + + | 192- dim | CoreML (Neural Engine) |
| IndexTTS2 | w2v-BERT + MaskinGCT + CAMPPlus | semantiske koder + prompt mel + 192- dim stil | MLX (GPU) |
| F5-TTS | none - rå reference mel + udskrift | 100-bånds referencemel | MLX (GPU) |
| Higgs TTS 3 | Higgs codec encoder | Referencekoder for 8- kodebook | MLX (GPU) |
IndexTTS2 Stemmekloning
IndexTTS2 er en indfødt MLX zero- shot voice- kloning motor. --voice-sample, downloads aufklarer/IndexTTS2-MLX-fp16 som standard, og understøtter valgfri følelser / stil referencer, forudindstillet eller vektor følelser kontrol, speaking- rate justering, og internal- pause capping. Det kører i øjeblikket batch syntese kun. Emotion kan komme fra en forudindstillet eller en 8- værdi vektor (--indextts2-emotion, vægtet efter --indextts2-emotion-weight) eller fra en separat stilreference (--indextts2-emotion-audio); --indextts2-s2mel-steps Handler flow trin for hastighed (standard 15, ear- valideret). Efter float32-attention afkode omarbejde det syntetiseres på RTF GRAW 1.0 på en M5 Pro. Mandarin og blandet kinesisk / engelsk tekst håndteres indadrettet - opstrøms punktuation omskrivning og per- tegn pre-adminisation - numre læses ud i ord, og lang tekst er syntetiseret i punktuation- justeret segmenter.
F5-TTS Stemmekloning
F5-TTS kloner fra en ~ 10- anden reference plus dens udskrift (--f5-reference-text) gennem DiT flow matching - ingen højttaler encoder overhovedet. Det er den hurtigste kloning sti i pakken (RTF 0.57 på standard 16 flow trin, lavere er hurtigere) og den mindste (~ 0.8 GB peak RSS), der dækker engelsk og mandarin. Se F5-TTS guide.
Higgs TTS 3 Stemmekloning
Higgs TTS 3 (4B) indkoder referenceklipsen i codec rammer og fortsætter det: ekspressiv konversationel levering med inline følelser, stil, og SFX tags, 100+ sprog RTF 0.78En referencetrykning (--higgs-ref-text) forbedrer kloning. Higgs TTS 3 guide.
CosyVoice3 + CAM + +
CosyVoice3 bruger CAM + + (Context- Aware Masking + +) højttaler encoder fra Alibaba 's 3D- Speaker projekt. 192- dim indlejring betingelser DiT flow model via en affin projektion lag (192 → 80), der blev i fællesskab uddannet med CosyVoice3.
CAM + + Arkitektur
| Fase | Varebeskrivelse |
|---|---|
| FCM | Forende convolutional modul (Conv2d + 2 ResBlocks, 32 kanaler) |
| TDNN | Time Delay Neurale Network (320 til 128 kanaler, kerne størrelse 5) |
| D-TDNN-blokke | 3 densely- forbundne blokke (12 / 24 / 16 lag) med berøringsfølsom maskering |
| Stats Pool | Gennemsnitlig + standardafvigelse pooling (global statistik) |
| Tænde | Lineær projektion til 192- dim indlejring |
CoreML modellen (~ 14 MB, FP16) kører på Neural Engine. Det downloades automatisk fra aufklarer/CamPlusPlus-Speaker-CoreML til første brug.
Qwen3-TTS Stemmekloning
Qwen3-TTS understøtter to stemme kloning tilstande:
ICL-tilstand (anbefales)
In- Context Learning mode indkoder referencen lyd i codec tokens via Mimi tale encoder og forbereder dem med reference udskrift. Dette giver modellen fuld akustisk kontekst - højere kvalitet og pålidelig EOS (løser problemer med korte tekster og ikke-engelske sprog).
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 konserves 1920 prøver pr. codec-ramme ved 24 kHz, herunder på tværs af overlappende afkodningsstykker. Begge præ-opsamplingslag bruger kernens bredde 2 og skrid 2 uden højre trimning, bevarelse af mål kurveform ved chunk grænser og under ICL reference fjernelse.
X- vektortilstand
Bruger en ECAPA- TDNN encoder, der producerer en 1024- dim x- vektor. Ingen udskrift nødvendig, men lavere kvalitet. Kan undlade at udsende EOS på korte tekster eller visse sprog.
ECAPA- TDNN Arkitektur
| Fase | Varebeskrivelse |
|---|---|
| TDNN | Time Delay Neurale Network (128 til 512 kanaler, kerne størrelse 5) |
| SE-Res2Net blokke | 3 blokke med Squeeze- and- Spænding (512 kanaler, dilatation 2 / 3 / 4) |
| MFA | Multilags funktion Aggregation (1536 kanaler + Retual) |
| ASP | Attentive Statistics Pooling (1536 kanaler, softmax over tid) |
| FC | Fuldt forbundet lag (3072-1024 dimensioner) |
Vægten (76 parametre) er inkluderet i Qwen3-TTS safetensorer - ingen separat download kræves.
CLI-brug
# 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
Eksempler
# 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
Dialog mellem flere formænd
CosyVoice3 understøtter multi-højtaler dialog med per- højtaler stemme kloning. --speakers flag til at kortlægge højttalermærker til reference lydfiler:
# 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
Hver højttalers reference lyd behandles gennem CAM + + encoder til at udtrække en 192- dim-indlejring. Modellen er indlæst én gang og genbruges for alle højttalere. Se CosyVoice3 guide for fuld information om dialog syntaks og følelser tags.
Reference lydtips
- Varighed: 5 til 15 sekunder af tale virker bedst. Kortere klip kan ikke fange nok vokal egenskaber; længere klip giver faldende afkast.
- Enkelthøjttalere: Referencen bør kun indeholde én højttaler. Multihøjttalerlyd vil give uforudsigelige resultater.
- Ren lyd: Minimere baggrundsstøj, musik og efterklang. tale- forbedring modul til at rense støjende referencer før kloning.
- Naturlig tale: Brug konversationel, natur- klingende tale snarere end hvisken, råb, eller sang.
For Qwen3-TTS, stemme kloning arbejder med base model alene - ikke customVoice. CosyVoice3 stemmekloning fungerer med standardmodellen. IndexTTS2 kræver --voice-sample, kører i øjeblikket batch syntese kun, og accepterer valgfri følelser / stil kontrol.
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)
)
Reference Audio Caching
Begge dele synthesizeWithVoiceClone (x- vektor) og synthesizeWithVoiceCloneICL (ICL) cache deres per- reference forbehandling på tværs af opkald på samme model eksempel. X- vektor sti caches ECAPA- TDNN højttaler indlejring; ICL sti derudover caches Mimi codec encoder output. Cache er indhold- adresseret (hash af råvarer prøver + prøve rate) og afgrænset til en lille LRU (standard 4 indgange), så gentagne generationer mod samme reference waveform springe mel + encoder passerer uden ubegrænset hukommelse vækst.
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()