Terjemahan mesin · Versi asli bahasa Inggris
Kloning suara
Kloning semua suara dari contoh audio singkat. IndexTTS2 menambahkan asli MLX zero- tembakan kloning dengan emosi, tempo, dan jeda kontrol, bersama Qwen3-TTS dan CosyVoice3 Kloning.
¶ How It Works ¶
- Rekam atau sediakan a referensi sampel audio dari suara target
- Speaker embedding extraction - sebuah proses penyandi pembicara yang mereferensikan audio kedalam sebuah dim-dimensi embedding vektor
- Suntikan Embedding - Pembicara menggelapkan kondisi model TTS selama sintesis
- Sintesis pidato - Model TTS menghasilkan pidato yang cocok dengan karakteristik vokal dari sampel referensi
Mesin
Kloning suara tersedia dengan beberapa mesin TTS. IndexTTS2 menggunakan pengondiksi audio dan gaya; Qwen3-TTS dan CosyVoice3 gunakan pengkodean speaker:
F5-TTS dan Higgs TTS 3 lewati penyandi pembicara seluruhnya: F5 kondisi pada raw reference mel ditambah transkripnya, Higgs terus codec- dikodekan referensi frame.
| Mesin | Pengisi Suara | Embedding | Backend |
|---|---|---|---|
| Qwen3-TTS | ECAPA- TDNN | 1024- dim x-vector | MLX (GPU) |
| CosyVoice3 | CAM + + | 192-dim | CoreML (Neural Engine) |
| IndexTTS2 | w2v-BERT + MaskGCT + CAMPPlus | semantik kode + prompt mel + 192-dim style | MLX (GPU) |
| F5-TTS | tidak ada - referensi raw mel + transkrip | 100-band reference mel | MLX (GPU) |
| Higgs TTS 3 | Higgs codec enkoder | 8- codebook kode referensi | MLX (GPU) |
IndexTTS2 Voice Cloning
IndexTTS2 adalah asli MLX zero- tembakan mesin kloning suara. --voice-sample, Unduhan aufklarer/IndexTTS2-MLX-fp16 secara baku, dan mendukung referensi emosi / gaya opsional, preset atau vector kontrol emosi, penyesuaian rate, dan prooral- jeda capping. Ini saat ini menjalankan batch synthesis saja. Emotion dapat datang dari preset atau sebuah vektor nilai 8-(--indextts2-emotion(Yang ditimbulkan oleh) oleh malaikat-malaikat yang turun untuk membinasakan mereka. --indextts2-emotion-weight) atau dari sebuah gaya referensi terpisah (--indextts2-emotion-audio); --indextts2-s2mel-steps trading flow steps untuk kecepatan (baku 15, ear- validasi) Setelah float32-attention decode rework it synthesizes at RTF ≈ 1.0 pada M5 Pro. Mandarin dan teks Cina / Inggris campuran ditangani secara native - tanda baca upstream dan per-character pre-tokenization - nomor dibaca dalam kata-kata, dan teks panjang disintesis dalam tanda baca-align segmen.
F5-TTS Voice Cloning
F5-TTS kloning dari sebuah ~ 10- referensi kedua ditambah transkripnya (--f5-reference-text) melalui pencocokan aliran DIT - tidak ada penyandi speaker sama sekali. Ini adalah jalur kloning tercepat dalam paket (RTF 0.57 di default 16 flow steps, lower is faster) and the least (~0.8 Puncak GB RSS), meliputi bahasa Inggris dan Mandarin. F5-TTS panduan.
Higgs TTS 3 Suara Kloning
Higgs TTS 3 (4B) mengkodekan klip referensi ke dalam bingkai codec dan meneruskannya: pengiriman ekspresif dengan emosi inline, gaya, dan tag SFX, 100+ bahasa, RTF 0.78Sebuah transkrip referensi (--higgs-ref-text) meningkatkan kloning. Higgs TTS panduan 3.
CosyVoice3 + CAM + +
CosyVoice3 menggunakan CAM + + (Contexts - Tahu Masking + +) speaker enkoder dari Alibaba 's 3Proyek Speaker D- 192-dim embedding kondisi model aliran DiT melalui lapisan proyeksi affine (192 → 80) yang dilatih bersama dengan CosyVoice3.
CAM + + Arsitektur
| Tahap | Deskripsi |
|---|---|
| FCM | Front-end modul konvolusional (Conv2d + 2 ResBlocks, saluran 32) |
| TDNN | Jaringan Neural Penundaan Waktu (320 sampai 128 saluran, ukuran kernel 5) |
| Blok DDNN | 3 densely- blok terhubung (12 / 24 / 16 lapis) dengan kontekt- sadar masking |
| Kolam Stat | Arti + standar deviasi pooling (statistik global) |
| Degang | Proyeksi linear ke 192- dim embedding |
The CoreML Model (~14 MB, FP16) berjalan di Neural EngineIni diunduh secara otomatis dari aufklarer/CamPlusPlus-Speaker-CoreML pada penggunaan pertama.
Qwen3-TTS Voice Cloning
Qwen3-TTS mendukung dua mode kloning suara:
Mode ICL (Disarankan)
Mode Intext Learning menyandikan referensi audio ke token codec melalui echoc Mimi untuk berbicara dan memberikan transkrip referensi. Ini memberikan model konteks akustik penuh - kualitas yang lebih tinggi dan dapat diandalkan EOS (memperbaiki masalah dengan teks pendek dan bahasa Inggris tidak.
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 simpan 1920 contoh per bingkai codec di 24 kHz, termasuk seluruh tumpang tindih potongan decode. Kedua lapisan pre-upsampling menggunakan lebar kernel 2 dan demi rembulan di waktu purnama, bahwa kalian benar-benar akan melalui beberapa masa yang semakin lama semakin dahsyat: kematian, kebangkitan dan petaka kiamat. 2 tanpa pemangkasan kanan, mempertahankan Waveform target pada batas-batas potong dan selama ICL referensi penghapusan.
Mode X- Vektor
Menggunakan suatu enkoder ECAP- TDNN yang menghasilkan vektor x- dim 1024-. Tidak ada transkrip yang dibutuhkan tetapi kualitas lebih rendah. Mungkin gagal mengeluarkan EOS pada teks pendek atau bahasa tertentu.
Arsitektur ECAPA- TDNN
| Tahap | Deskripsi |
|---|---|
| TDNN | Jaringan Neural Penundaan Waktu (128 sampai 512 saluran, ukuran kernel 5) |
| SE-Res2Net blocks | 3 blok dengan Squeeze- dan- Expitation (512 saluran, dilatasi 2 / 3 / 4) |
| MFA | Multi- layer Feature Aggregation (1536 chances + ReLU) |
| ASP | Attentive Statistik Pooling (1536 saluran, softmax dari waktu ke waktu) |
| FC | Lapisan tersambung penuh (3072 hingga 1024 dimensi) |
Bobot (parameter 76) disertakan dalam keamanan Qwen3-TTS - tidak diperlukan unduhan terpisah.
Penggunaan 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
Contoh
# 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 Sambung Multi-
CosyVoice3 mendukung dialog multi- speaker dengan pengkloning suara per- speaker. Gunakan --speakers tanda untuk memetakan tag speaker untuk mereferensikan berkas audio:
# 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
Setiap audio acuan pembicara diproses melalui CAM + + Enkoder untuk mengekstrak penggelapan 192-dim. Model dimuat sekali dan digunakan kembali untuk semua pembicara. Lihat CosyVoice3 panduan untuk rincian lengkap pada sintaks dialog dan tag emosi.
Referensi Tips Audio
- Durasi: 5 ke 15 detik pidato bekerja terbaik. Klip yang lebih pendek mungkin tidak menangkap karakteristik suara yang cukup; lebih banyak klip memberikan hasil yang berkurang.
- Pembicara tunggal: Referensi seharusnya hanya berisi satu pembicara. Audio multi- speaker akan menghasilkan hasil yang tak terduga.
- Audio bersih: Minimalkan suara latar belakang, musik, dan gema. Gunakan speech uppencement modul untuk membersihkan referensi bising sebelum kloning.
- Pidato alam: Gunakan percakapan, pidato yang terdengar secara alami daripada bisikan, teriakan, atau nyanyian.
Untuk Qwen3-TTS, suara kloning bekerja dengan base model saja - tidak customVoiceCosyVoice3 suara kloning bekerja dengan model baku. IndexTTS2 membutuhkan --voice-sample, saat ini menjalankan batch synthesis saja, dan menerima opsional emosi / gaya 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)
)
Referensi Caching Audio
Keduanya synthesizeWithVoiceClone (x-vektor) dan synthesizeWithVoiceCloneICL (ICL) cache preprosesing per- reference mereka melalui panggilan pada contoh model yang sama. Jalur x-vector caches pembicara ECAPA-TDNN menggelapkan; jalur ICL secara otomatis cache Mimi keluaran codec encoder. Cache content-clased (hash dari sampel mentah + contoh rate) dan dibatasi ke LRU kecil (baku 4 entri), sehingga berulang generasi terhadap Waveform referensi yang sama melewati mel + encoder melewati tanpa pertumbuhan memori tak terbatas.
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()