Awtomatikong salin · Orihinal sa Ingles

Pag-clone ng boses

Clone anumang boses mula sa isang maikling reference audio sampol. IndexTTS2 dinagdag ng katutubong MLX sero-shot cloning na may emosyon, tempo, at mga kontrol sa paghinto, sa tabi ng Qwen3-TTS at CosyVoice3 speaker-encoder cloning.

Kung Paano Ito Umaandar

  1. Isulat o ilaan isang reperensiyang audio sampol ng puntiryang tinig
  2. Ang nagsasalita ay nag - aalis ng dumi — isang speaker na nagpoproseso ng reference audio upang maging isang nakapirmeng-dimensional embelding vector
  3. Pag - iiniksiyon ng dumi — ang tagapagpahayag ay nag - eembbeding ng modelong TTS sa panahon ng synthesis
  4. Sintesis sa Pagsasalita — Ang modelong TTS ay lumilikha ng pananalita na katugma ng mga katangian ng tunog ng reperensiyang sampol

Mga makina

Ang Voice cloning ay makukuha na may multiple TTS engines. ang IndexTTS2 ay gumagamit ng agarang audio at style conditioning; Qwen3-TTS at CosyVoice3 gumagamit ng speaker regulator:

F5-TTS at Higgs TTS 3 Pagkatapos ng tagapagsalitang si Enifier: F5 Ang mga kondisyon sa hilaw na reference mel pati na ang transcripsyon nito, Higgs patuloy ng codec-encoded reference frames.

KasangkapanNag - uusap Pagdidiskarga Likod
Qwen3-TTSECAPA-TDNNN1024-dim x-vetorMLX (GPU)
CosyVoice3CAM++192-dimCoreML (Neural Engine)
IndexTTS2w2v-BERT + MaskGCT + CAMPPlus Mga kodigong semantiko + mag-udyok ng mel + 192-dim na estiloMLX (GPU)
F5-TTS wala — hilaw na reperensiyang ml + transcription100-band reference melMLX (GPU)
Higgs TTS 3Higgs codecreculator8-codebook reference codesMLX (GPU)

IndexTTS2 Voice Cloning

Ang IndexTTS2 ay isang katutubong MLX sero-shot voice-cloning engine.[kailangan ng sanggunian] Ang lathalaing ito na tungkol sa Edukasyon ay isang usbong. --voice-sample, downloads aufklarer/IndexTTS2-MLX-fp16 sa pamamagitan ng default, at sumusuporta sa opsyonal na emosyon/style references, preset o vector emosyon control, pagsasalita-rate adjustment, at internal-pause capping. Ito ay kasalukuyang nagpapatakbo ng direksyon lamang. Ang Emotion ay maaaring magmula sa isang preset o isang 8-halagang vector (.--indextts2-emotion, pinabigat ng --indextts2-emotion-weight) o mula sa hiwalay na reperensiya sa istilo (--indextts2-emotion-audio); --indextts2-s2mel-steps Ang mga pangkalakal na mga hakbang ng daloy ay dumadaloy para sa bilis (default 15, ear-validated). Pagkatapos ng float32-attention decode rework ito reworked sa RTF cock 1.0 sa isang M5 Pro. Mandarin at ang halong tekstong Tsino/English ay pinangangasiwaan ng katutubong – Ang mga bantasyplusts ni Obander at per-character pre-kenization – ay binabasa sa mga salita sa mga salita, at ang mahaba ay nasa stansccald.

F5-TTS Voice Cloning

F5-TTS clones mula sa isang iV10-second reference pati na ang transcription nito (ang mga transaksyon nito).--f5-reference-text) sa pamamagitan ng DiT street compilation – walang speaker regulator. Ito ang pinakamabilis na cloning path sa pakete (RTF 0.57 sa default 16 streets, mas mabilis ang mas mababa) at ang pinakamaliit ([0.8 GB peak RSS), na sumasaklaw sa Ingles at Mandarin. F5-TTS giya.

Higgs TTS 3 Tinig Cloning

Higgs TTS 3 (4B) Ikinakabit ang reperensiyang clip sa mga balangkas ng codec at nagpapatuloy ito: nagpapahayag na pag - uusap na may damdamin, istilo, at mga tag ng SFX, 100+ wika, RTF 0.78. Isang reperensiyang salin (sa Ingles)--higgs-ref-text) pagbutihin ang cloning. Higgs TTS 3 giya.

CosyVoice3 + CAM++

CosyVoice3 ang gumagamit ng CAM++ (Context-Aware Maskong+++) speaker recogulator mula sa 3D-Coker project. Ang 192-dim empelding kondisyon ng DiT streaming model sa pamamagitan ng isang affine projection layer (192 → 80) na magkasamang sinanay ng CosyVoice3.

CAM++ Arkitektura

Bagsag Paglalarawan
FCMFront-end convolutional module (Conv2d + 2 ResBlocks, 32 channels)
TDNNTime Reflect Neural Network (320 hanggang 128 channel, kernel na laki 5)
Mga bloke ng D-TDNN3 siksik na-kadugtong na mga bloke (12/24/16 na patong) na may kontekstong-aware na maskara
Mga Hagdan na Natutuyo Kahulugan + pamantayang paglihis na pagsasama-sama (global statistics)
KaposLinar projection to 192-dim embeding

Ang modelong CoreML (°14 MB, FP16) ay tumatakbo sa Neural Engine. Ito ay awtomatikong na-download mula aufklarer/CamPlusPlus-Speaker-CoreML sa unang paggamit.

Qwen3-TTS Voice Cloning

Qwen3-TTS ay sumusuporta sa dalawang voice cloning mode:

ICL Mode (Isinilang)

Ini-Context Learning mode ang reference audio sa codec na mga patning sa pamamagitan ng Mimi speech tomanizer regulator at prependiyente ito ng reperensiyang transcript. Ito ay nagbibigay sa modelo ng buong akustikong konteksto – mas mataas na kalidad at maaasahang EOS (mga isyung may maikling teksto at hindi-English languages).

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 preserbate 1920 mga sampol sa bawat kodigo 24 kHz, kasama na ang pagtawid sa magkakasanib na mga tipak ng decode. 2 at hakbang 2 nang hindi muna napuputol, iniingatan ang target na waveform sa mga hangganan ng tipak at sa panahon ng pag - aalis ng ICL.

X-Vector Mode

Gumagamit ng ECAPA-TDNN regulater na gumagawa ng 1024-dim x-veector. walang transcript na kinakailangan ngunit mas mababang kalidad. Maaaring hindi maglabas ng EOS sa mga maiikling teksto o ilang wika.

Arkitektura ng ECAPA-TDNN

Bagsag Paglalarawan
TDNNTime Referlect Neural Network (128 hanggang 512 channel, kernel na laki 5)
SE-Res2Net blocks3 blocks with Squeeze-and-Excitation (512 channels, dilation 2/3/4)
MFAMulti-layer Feature Aggregation (1536 channels + ReLU)
ASPMahilig Estadistika Pooling (1536 channel, softmax sa paglipas ng panahon)
FC Ganap na magkakaugnay na suson (3072 hanggang 1024 dimensiyon)

Ang mga pabigat (76 parameters) ay kasama sa Qwen3-TTS na mga preserve tensor — walang hiwalay na download na kailangan.

Paggamit ng 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

Mga Halimbawa

# 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-Proper Dialogue

Ang CosyVoice3 ay sumusuporta sa multi-speaker na usapan na may per-specker na voice cloning. Gamitin ang --speakers flag upang i-serial ang mga tag ng speaker upang tukuyin ang mga audio files:

# 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

Ang bawat reperensiyang audio ng tagapagsalita ay pinoproseso sa pamamagitan ng CAM++ regulator upang makuha ang isang 192-dim embelding. Ang modelo ay kinakarga nang isang beses at muling ginagamit para sa lahat ng mga nagsasalita. CosyVoice3 giya para sa ganap na detalye tungkol sa diyalogo at mga silakbo ng damdamin.

Mga Tip sa Pagtukoy ng Audio

Mahalaga

Para sa Qwen3-TTS, ang voice cloning ay gumagana sa pamamagitan ng base modelo lamang — hindi customVoice Ang . CosyVoice3 voice cloning ay gumagana sa default model. ang IndexTTS2 requiress --voice-sample, sa kasalukuyan ay nagpapatakbo lamang ng dimension synthesis, at tumatanggap ng opsyonal na emosyon/style controls.

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

Pag - uusap Tungkol sa Pagsugpo sa Isangudio

Parehong synthesizeWithVoiceClone (x-vektor) at synthesizeWithVoiceCloneICL (ICL) Ang kanilang per-reference preprocessing sa ibayo ay tumatawag sa parehong modelong pagkakataon. Ang x-vector path caches ang ECAPA-TDN speaker embeding; ang landas ng ICL ay karagdagang nagreresulta sa mga cache ng ECAPAng-TDDN na speaker ermbeding. Mimi codec regulator output. Ang cache ay nilalaman-addressed (hash ng mga sampol ng hilaw + sampol na sampol) at nakatali sa isang maliit na LRU (default) 4 Ang mga kalahok), kaya ang paulit - ulit na mga salinlahi laban sa parehong reperensiyang waveform ay hindi dumaraan sa mel + regulator nang walang di - mapapantayang paglaki ng memorya.

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