Maskinoversettelse · Engelsk original
Stemmekloning
Klone enhver stemme fra en kort referanse lydprøve. IndexTTS2 legger til opprinnelig MLX null-shot kloning med følelser, tempo og pausekontroller, sammen med Qwen3-TTS og CosyVoice3 høyttaler-encoder kloning.
Hvordan det fungerer
- Record eller gi en referanselydprøve av målstemmen
- Speaker innbyggingsutvinning - en høyttaler-koder behandler referanselyden i en fast dimensjonell innebygge vektor
- Innbyggingsinjeksjon - høyttaleren innbyggingsbetingelser TTS-modellen under syntese
- talesyntese - TTS modellen genererer tale som samsvarer med vokalkarakteristikkene til referanseprøven
Motorer
Stemmekloning er tilgjengelig med flere TTS motorer. IndexTTS2 bruker rask lyd- og stilkondisjonering; Qwen3-TTS og CosyVoice3 bruk høyttalerkodere:
F5-TTS og Higgs TTS 3 hopp over høyttalerkoderen helt: F5 betingelser på rå referansemel pluss dens transkripsjon, Higgs fortsetter kodekkodede referanserammer.
| Motoren | Høyttalerkoder | Innbygging | Motor |
|---|---|---|---|
| Qwen3-TTS | ECAPA-TDNN | 1024-dim x-vektor | MLX (GPU) |
| CosyVoice3 | CAM++ | 192-dim | CoreML (Neural Engine) |
| IndexTTS2 | w2v-BERT + MaskGCT + CAMPPlus | semantiske koder + plym mel + 192-dim stil | MLX (GPU) |
| F5-TTS | none — rå referanse mel + transkripsjon | 100-bånds referanse mel | MLX (GPU) |
| Higgs TTS 3 | Higgs kodekodekodekoder | 8-kodebok referansekoder | MLX (GPU) |
IndexTTS2 Stemmekloning
IndexTTS2 er en innfødt MLX null-shot stemme-kloning motor. Det krever --voice-sample, nedlastinger aufklarer/IndexTTS2-MLX-fp16 som standard, og støtter valgfrie følelser/stil referanser, forhåndsinnstilling eller vektor følelseskontroll, taleratejustering og internpause-inntak. Den kjører for tiden kun batchsyntese. Følelse kan komme fra en forhåndsinnstilling, eller en 8-verdi vektor (--indextts2-emotion vektet av --indextts2-emotion-weight), eller fra en egen referanse (--indextts2-emotion-audio); --indextts2-s2mel-steps Handel flyt trinn for hastighet (standard 15, ørevalidert). Etter float32-attention dekode rearbeider det syntetiserer på RTF - 1.0 på en M5 Pro. Mandarin og blandet kinesisk/engelsk tekst håndteres innfødt - oppstrøms tegnsetting omskriving og per tegnakter pretokenization - tall leses ut i ord, og lang tekst syntetiseres i tegnsetting-anpassede segmenter.
F5-TTS Stemmekloning
F5-TTS kloner fra en ~10-sekund referanse pluss trankripsjonen (--f5-reference-text) gjennom DiT strømningsmatching - ingen høyttalerkoder i det hele tatt. Det er den raskeste kloningsstien i pakken (RTF 0,57 ved standard 16 flyttrinn, lavere er raskere) og den minste (~0.8 GB topp RSS), dekker engelsk og Mandarin. Se F5-TTS guide.
Higgs TTS 3 stemmekloning
Higgs TTS 3 (4B) koder referanseklippet i kodekrammer og fortsetter det: uttrykkelig samtalelevering med inline følelser, stil og SFX tags, 100+ språk, RTF 0.78. En referansetranskripsjon (--higgs-ref-text) forbedrer kloning. Se Higgs TTS 3 guide.
CosyVoice3 + CAM++
CosyVoice3 bruker CAM++ (Context-Aware Masking++) høyttalerkoder fra Alibabas 3D-taler-prosjekt. 192-dim-innbyggingsbetingelser DiT-strømningsmodellen via et affine-projeksjonslag (192 → 80) som sammen ble trent med CosyVoice3
CAM++ Arkitektur
| Stage | Beskrivelse |
|---|---|
| FCM | Front-end konvolusjonell modul (Conv2d + 2 ResBlocks, 32 kanaler) |
| TDNN | Tidsforsinkelse Neural Network (320 til 128 kanaler, kjernestørrelse 5) |
| D-TDNN-blokker | 3 tettkoblede blokker (12/24/16 lag) med maske med sammenhengsbeskyttet maske |
| Statistics Pool | Gjennomsnittlig + standardavvikspulsing (global statistikk) |
| Sense | lineær projeksjon til 192-dim-innbygging |
CoreML-modellen (~14 MB, FP16) kjører på Neural Engine. Den lastes ned automatisk fra aufklarer/CamPlusPlus-Speaker-CoreML ved første bruk.
Qwen3-TTS Stemmekloning
Qwen3-TTS støtter to stemmekloning moduser:
ICL-modus (anbefalt)
I kontekstlæringsmodus koder referanselyden til kodekene via Mimi taletokenizer-koder og legger dem til referansetranskripsjonen. Dette gir modellen full akustisk kontekst - høyere kvalitet og pålitelig EOS (fikser problemer med korte tekster og ikke-engelske 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 bevarer 1920 prøver per kodekramme på 24 kHz, inkludert overlappende dekodebiter. Begge forhåndsbildelagene bruker kjernebredde 2 og strid 2
X-Vector-modus
Bruker en ECAPA-TDNN-koder som produserer en 1024-dim x-vektor. Ingen transkripsjon nødvendig, men lavere kvalitet. Kan ikke sende EOS på korte tekster eller visse språk.
ECAPA-TDNN Arkitektur
| Stage | Beskrivelse |
|---|---|
| TDNN | Tidsforsinkelse Neural Network (128 til 512 kanaler, kjernestørrelse 5) |
| SE-Res2Net blokker | 3 blokker med Squeeze-og-ekscitation (512 kanaler, dilasjon 2/3/4) |
| MFA | Flere lag Funksjonssammensetning (1536 kanaler + ReLU) |
| ASP | Attentiv statistikk Bassenging (1536 kanaler, mykmaks over tid) |
| FC | Fullkoblet lag (3072 til 1024 dimensjoner) |
Vektene (76 parametrene) er inkludert i Qwen3-TTS safetensorer - ingen separat nedlasting kreves.
CLI bruk
# 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 med flere talere
CosyVoice3 støtter dialog med multi-speaker med per-speaker stemme kloning. Bruk --speakers flagg til å kartlegge høyttalertagger til referanselydfiler:
# 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øyttalers referanselyd behandles gjennom CAM++-koderen for å trekke ut en 192-dim-innbygging. Modellen lastes inn en gang og gjenbrukes for alle høyttalere. Se CosyVoice3-guide for fullstendige detaljer om dialogsyntaks og følelserstags.
Referanselydtips
- Durasjon: 5 til 15 sekunders tale fungerer best. Kortere klipp kan ikke fange nok vokalegenskaper; lengre klipp gir reduserende avkastning.
- Enkel høyttaler: Referansen bør inneholde bare én høyttaler. Flertalerlyd vil gi uforutsigbare resultater.
- Rann lyd: Minimer bakgrunnsstøy, musikk og reverberasjon. Bruk speech-forbedring-modulen for å rengjøre støyende referanser før kloning.
- Naturlig tale: Bruk samtale, naturlig-lydende tale i stedet for hvisker, rop eller sang.
For Qwen3-TTS fungerer stemmekloning med base-modellen kun - ikke customVoice. CosyVoice3 stemmekloning fungerer med standardmodellen. IndexTTS2 krever --voice-sample, kjører for øyeblikket batchsyntese og akseptererer valgfrie følelser/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)
)
Referanse Audio Caching
Både synthesizeWithVoiceClone (x-vector) og synthesizeWithVoiceCloneICL (ICL) cache deres per-referanse preprosessering på tvers av samtaler på samme modell eksempel. X-vektor-stien caches ECAPA-TDNN-høyttaleren inneslutting; ICL-stien i tillegg caches Mimi kodekkodekodekodekodekoderutgangen. Cacheen er innholdsadressert (hash av råprøver + prøvehastighet) og bundet til en liten LRU (standard 4 oppføringer), så gjentatte generasjoner mot den samme referansebølgeformen hoppe over mel + koder passerer uten ubunden minnevekst.
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()