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 ¶

  1. Rekam atau sediakan a referensi sampel audio dari suara target
  2. Speaker embedding extraction - sebuah proses penyandi pembicara yang mereferensikan audio kedalam sebuah dim-dimensi embedding vektor
  3. Suntikan Embedding - Pembicara menggelapkan kondisi model TTS selama sintesis
  4. 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.

MesinPengisi SuaraEmbeddingBackend
Qwen3-TTSECAPA- TDNN1024- dim x-vectorMLX (GPU)
CosyVoice3CAM + +192-dimCoreML (Neural Engine)
IndexTTS2w2v-BERT + MaskGCT + CAMPPlussemantik kode + prompt mel + 192-dim styleMLX (GPU)
F5-TTStidak ada - referensi raw mel + transkrip100-band reference melMLX (GPU)
Higgs TTS 3Higgs codec enkoder8- codebook kode referensiMLX (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

TahapDeskripsi
FCMFront-end modul konvolusional (Conv2d + 2 ResBlocks, saluran 32)
TDNNJaringan Neural Penundaan Waktu (320 sampai 128 saluran, ukuran kernel 5)
Blok DDNN3 densely- blok terhubung (12 / 24 / 16 lapis) dengan kontekt- sadar masking
Kolam StatArti + standar deviasi pooling (statistik global)
DegangProyeksi 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

TahapDeskripsi
TDNNJaringan Neural Penundaan Waktu (128 sampai 512 saluran, ukuran kernel 5)
SE-Res2Net blocks3 blok dengan Squeeze- dan- Expitation (512 saluran, dilatasi 2 / 3 / 4)
MFAMulti- layer Feature Aggregation (1536 chances + ReLU)
ASPAttentive Statistik Pooling (1536 saluran, softmax dari waktu ke waktu)
FCLapisan 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

Penting

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()