Strojový překlad · Anglický originál
Klonování hlasu
IndexTTS2 přidává nativní MLX 0-shot klonování s emocemi, tempo, a pauza ovládání, vedle Qwen3-TTS a CosyVoice3 speaker- encoder klonování.
Jak to funguje
- Záznam nebo poskytnutí referenční zvukový vzorek cílového hlasu
- Reproduktor vložení extrakce - reproduktor enkodér zpracovává referenční zvuk do fixovaného-dimenzionálního vložení vektoru
- Vložení injekce - podmínky zakládání reproduktoru do modelu TTS během syntézy
- Syntéza řeči - model TTS generuje řeč, která odpovídá hlasovým charakteristikám referenčního vzorku
Motory
Hlasové klonování je k dispozici s více motory TTS. IndexTTS2 používá rychlé audio a stylové kondicionování; Qwen3-TTS a CosyVoice3 používají reproduktory enkodéry:
F5-TTS a Higgs TTS 3 zcela vynechat zapisovač reproduktoru: F5 podmínky pro surový referenční mel plus jeho přepis, Higgs pokračuje v kódování referenčních rámců.
| Motor | Reproduktor Encoder | Vložení | Backend |
|---|---|---|---|
| Qwen3-TTS | ECAPA- TDNN | 1024- dim x- vector | MLX (GPU) |
| CosyVoice3 | CAM + + | 192- dim | CoreML (Neural Engine) |
| IndexTTS2 | w2v-BERT + MaskGCT + CAMPPlus | sémantické kódy + speck mel + 192-dim style | MLX (GPU) |
| F5-TTS | žádný - surový referenční mel + přepis | 100-pásmový referenční mel | MLX (GPU) |
| Higgs TTS 3 | Higgs kodek enkodér | 8- referenční kódy kódu | MLX (GPU) |
IndexTTS2 Hlasové klonování
IndexTTS2 je rodák MLX zero-shot hlas- klonovací motor. To vyžaduje --voice-sample, stahování aufklarer/IndexTTS2-MLX-fp16 standardně, a podporuje volitelné emoce / styl reference, přednastavené nebo vektorové ovládání emocí, hlasité nastavení rychlosti a internal- pauza capping. V současné době běží pouze série syntézy. Emoce může pocházet z přednastaveného nebo 8-value vector (--indextts2-emotion, vážený --indextts2-emotion-weight) nebo z samostatného stylu reference (--indextts2-emotion-audio); --indextts2-s2mel-steps obchoduje s průtokovými kroky pro rychlost (výchozí 15, ear- validated). Po float32-attention decode rework to syntetizuje na RTF ≈ 1.0 na M5 Pro. Mandarínština a smíšené čínské / anglické texty jsou zpracovávány nativně - proti proti je interpunkce přepisování a per- charakter pre- tokenizace - čísla jsou čteny slovy, a dlouhý text je syntetizován v interpunktuation- sladěné segmenty.
F5-TTS Hlasové klonování
F5-TTS klony z ~ 10-second reference plus jeho přepis (--f5-reference-text) přes DiT tok odpovídající - žádný reproduktor enkodér vůbec. Jedná se o nejrychlejší klonovací cestu v balíčku (RTF 0.57 na výchozích stupních toku 16, nižší je rychlejší) a nejmenší (~ 0.8 GB peak RSS), pokrývající angličtinu a mandarínštinu. F5-TTS průvodce.
Higgs TTS 3 Klonování hlasu
Higgs TTS 3 (4B) zakóduje referenční klip do rámů kodeku a pokračuje v něm: expresivní konverzační dodávka s inline emocemi, stylem a SFX tagy, 100+ jazyky, RTF 0.78. Referenční přepis (--higgs-ref-text) zlepšuje klonování. Viz Higgs TTS 3 průvodce.
CosyVoice3 + CAM + +
CosyVoice3 používá CAM + + (Context- Aware Masking + +) reproduktor enkodér z projektu Alibaba 3D- Speaker. 192-dim vkládání podmínek DiT průtok model přes afinovou projekční vrstvu (192 → 80), který byl společně vyškolen s CosyVoice3.
CAM + + Architektura
| Fáze | Popis |
|---|---|
| FCM | Front- end konvoluční modul (Conv2d + 2 ResBlocks, 32 kanály) |
| TDNN | Časová prodleva Neurální síť (320 až 128 kanálů, velikost jádra 5) |
| D-TDNN bloky | 3 densely- připojené bloky (12 / 24 / 16 vrstev) s kontext- vědomi maskování |
| Statistická zásoba | Střední + standardní odchylka (globální statistika) |
| Hustota | Lineární projekce na 192-dim vkládání |
Model CoreML (~ 14 MB, FP16) běží na Neural Engine. aufklarer/CamPlusPlus-Speaker-CoreML při prvním použití.
Qwen3-TTS Hlasové klonování
Qwen3-TTS podporuje dva režimy hlasového klonování:
Režim ICL (doporučeno)
In- Contextový režim učení kóduje referenční zvuk do kodeku tokenenů přes hlasový tokenizer Mimi a předvádí je s referenčním přepisem. To dává modelu plný akustický kontext - vyšší kvalitu a spolehlivost EOS (opravuje problémy s krátkými texty a neanglickými jazyky).
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 konzervy 1920 vzorky na kodekový rám při 24 kHz, včetně napříč překrývajícími se dekódovacími úlomky. Obě předběhové vrstvy používají šířku jádra 2 a krok 2 bez správného zastřižení, zachování cílového vlnového tvaru na hranicích uzlu a při odstranění referenční hodnoty ICL.
Režim X-Vector
Používá enkodér ECAPA-TDNN, který produkuje 1024- dim x- vektor. Není potřeba žádný přepis, ale nižší kvalita. Může selhat emitovat EOS na krátkých textech nebo určitých jazycích.
ECAPA- TDNN Architektura
| Fáze | Popis |
|---|---|
| TDNN | Časová prodleva Neurální síť (128 až 512 kanálů, velikost jádra 5) |
| SE-Res2Net bloky | 3 bloky s Squeeze- and- Excitation (512 kanálů, dilatace 2 / 3 / 4) |
| MFA | Multivrstverová agregace funkcí (1536 kanálů + ReLU) |
| ASP | Sledovací statistika Spooling (1536 kanálů, softmax v průběhu času) |
| FC | Plně připojená vrstva (rozměry 3072 až 1024) |
Váhy (parametry 76) jsou zahrnuty v safetensorech Qwen3-TTS - není nutné žádné samostatné stahování.
Použití CLI
# 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
Příklady
# 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
Multi- Speaker Dialog
CosyVoice3 podporuje multiřečnický dialog s per- reproduktorem hlasového klonování. --speakers Příznak mapových štítků reproduktorů pro referenční zvukové soubory:
# 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
Referenční zvuk každého reproduktoru je zpracováván přes CAM + + enkodér pro extrahování 192-dim vkládání. Model je jednou načítán a znovu použit pro všechny reproduktory. Viz CosyVoice3 průvodce pro úplné podrobnosti o syntaxe dialogu a emocí.
Referenční zvukové tipy
- Doba trvání: 5 do 15 sekund řeči funguje nejlépe. Krátké klipy nemusí zachytit dostatek hlasových charakteristik; delší klipy poskytují klesající výnosy.
- Jeden reproduktor: Odkaz by měl obsahovat pouze jeden reproduktor. Multireproduktor audio přinese nepředvídatelné výsledky.
- Čistý zvuk: Minimalizovat hluk pozadí, hudbu, a dozvuk. Vylepšení řeči modul pro čištění hlučných referencí před klonováním.
- Přirozený projev: Používejte konverzační, přírodní-znějící řeč spíše než šepot, křik, nebo zpěv.
Pro Qwen3-TTS, hlasové klonování pracuje s base pouze model - ne customVoice. CosyVoice3 hlasové klonování pracuje s výchozím modelem. IndexTTS2 vyžaduje --voice-sample, v současné době běží pouze série syntézy, a přijímá volitelné emoci / styl ovládání.
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
Obojí synthesizeWithVoiceClone (x- vector) a synthesizeWithVoiceCloneICL (ICL) cache jejich per- reference preprocessing account calls on the same model instance. X- vector path caches the ECAPA- TDNN speaker embedding; the ICL path additives caches the Mimi codec encoder output. The cache is content- addressed (hash of raw vzorces + samplement rate) and ohraničený na malé LRU (výchozí položky 4), takže opakované generace proti stejné referenční vlnové podobě přeskočit mel + encodera prochází bez neomezeného růstu paměti.
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()