Konekäännös · Englanninkielinen alkuperäinen
Äänen kloonaus
Kloonaa kaikki äänet lyhyestä viiteääninäytteestä. IndexTTS2 lisää natiivin MLX nollalaukauksen kloonaamisen tunteiden, tempon ja taukokontrollien kanssa, yhdessä Qwen3-TTS ja CosyVoice3
Miten se toimii
- Tallenna tai anna viiteääninäyte kohdeäänestä
- Kaapelin upotuserotus Kaiutinkoodain käsittelee viiteäänen kiinteäulotteiseksi upotusvektoriksi
- Upotusinjektio .. kaiuttimen kotelointiolosuhteet TTS-malli synteesin aikana
- Puhesynteesi ... TTS -malli tuottaa puheen, joka vastaa vertailunäytteen ääniominaisuuksia.
Moottorit
Äänen kloonaus on saatavilla useilla TTS moottoreilla. IndexTTS2 käyttää nopeaa äänen ja tyylin ilmastointia; Qwen3-TTS ja CosyVoice3 käyttää kaiutinkoodereita:
F5-TTS ja Higgs TTS 3 jättää kaiuttimen kokonaan huomiotta: F5 -olosuhteet raakaviitemelissä ja sen transkriptiossa Higgs jatkavat koodattuja viitekehyksiä.
| Moottori | Kaiutinkooderi | Upottaminen | Taustaosa |
|---|---|---|---|
| Qwen3-TTS | ECAPA-TDNN | 1024-dim x-vektori | MLX (GPU) |
| CosyVoice3 | CAM++ | 192-dim | CoreML (Neural Engine) |
| IndexTTS2 | w2v-BERT + MaskGCT + CAMPPlus | semanttiset koodit + pikamel + 192-dim tyyli | MLX (GPU) |
| F5-TTS | ei mitään ... raakaviite mel + transkripti | 100-kaistainen referenssi mel | MLX (GPU) |
| Higgs TTS 3 | Higgs-koodain | 8-koodikirjan viitekoodit | MLX (GPU) |
IndexTTS2 Äänen kloonaus
IndexTTS2 on natiivi MLX nollaohjattava ääni-kloonaus moottori. --voice-sample, lataukset aufklarer/IndexTTS2-MLX-fp16 oletuksena, ja tukee valinnaisia tunteita / tyyliviittauksia, esiasetettu tai vektori tunnehallintaa, puhenopeuden säätö, ja sisäinen tauko limittyminen. Se toimii tällä hetkellä vain erän synteesiä. Tunteet voivat tulla ennalta tai 8- arvo vektori (--indextts2-emotion, painotettu --indextts2-emotion-weight) tai erillisestä tyyliviittauksesta (--indextts2-emotion-audio); --indextts2-s2mel-steps kaupat virtaus vaiheet nopeuden (oletus 15, korvan validoitu). float32-attention decode rework se syntetisoi klo RTF ≈ 1.0 n M5 Pro. mandariini ja sekoitettu kiinan/englanninkielinen teksti käsitellään natiivisti ... yläjuoksun välimerkkien uudelleenkirjoitus ja merkkien pre-tokenization .. numerot luetaan sanoilla, ja pitkä teksti on syntetisoitu välimerkkien linjassa segmenteissä.
F5-TTS Äänenkloonaus
F5-TTS - kloonit ~10 sekunnin referenssistä ja sen transkriptiosta (--f5-reference-text) DiT-virtauksen kautta, joka ei vastaa yhtään kaiutinta. Se on nopein kloonauspolku paketissa (RTF 0,57 oletuksena 16 virtausaskelta, alempi on nopeampi) ja pienin (~0,8 GB huippu RSS), joka kattaa englannin ja mandariinin. Katso F5-TTS opas .
Higgs TTS 3 Äänen kloonaus
Higgs TTS 3 (4B) koodaa referenssileikkeen koodekkikehyksiin ja jatkaa sitä: ilmaisullinen keskustelullinen toimitus inline tunteita, tyyli, ja SFX tags, 100+ kielet, RTF 0.78. Referenssiasiakirja (--higgs-ref-text) parantaa kloonausta. Higgs TTS 3 opas.
CosyVoice3 + CAM++
CosyVoice3 käyttää CAM++ (Context-Aware Masking++) kaiutinkooderin Alibaban 3D-Speaker-projektista. 192-dim upottaa olosuhteet DiT-virtausmallille affine projektikerroksen (192 Z → 80) kautta, joka on yhdessä koulutettu CosyVoice3:n kanssa.
CAM++ Arkkitehtuuri
| Vaihe | Tavaran kuvaus |
|---|---|
| FCM | Etupään konvolutionaalinen moduuli (Conv2d + 2 ResBlocks, 32 kanavaa) |
| TDNN | Aikaviivästys Hermoverkko (320-128 kanavaa, ytimen koko 5) |
| D-TDNN-lohkot | 3 tiheästi kytkettyä lohkoa (12/24/16 kerrosta), joissa on asiayhteystietoinen peitto |
| Tilastot | Keskihajonta + keskihajonta (kokonaistilastot) |
| Dense | Lineaarinen projektio 192 dimin upottamiseen |
CoreML -malli (~14 MB, FP16) toimii Neural Engine. Se ladataan automaattisesti aufklarer/CamPlusPlus-Speaker-CoreML ensimmäisessä käytössä.
Qwen3-TTS Ääniklooni
Qwen3-TTS tukee kahta äänen kloonaustapaa:
ICL-tila (suositeltu)
In-Context Learning -tilassa viiteääni koodataan koodeiksi tunnuksiksi Mimi puheenpalkitsejan koodaajan kautta ja esikoodataan niitä referenssikoodauksen kanssa. Tämä antaa mallille täyden akustisen kontekstin . Korkeamman laadun ja luotettavan EOS:n (liittää ongelmia lyhyillä teksteillä ja muilla kielillä).
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 säilyttää 1920 näytteet koodekkikehikkoa kohti 24 kHz, mukaan lukien päällekkäiset dekoodauskappaleet. Molemmissa esinäytteenottokerroksissa käytetään ytimen leveys 2 ja askel 2 ilman oikeaa trimmaa, säilyttäen kohdeaaltomuodon pilkkomisrajoilla ja ICL:n viitepoistumisen aikana.
X-Vektoritila
Käyttää ECAPA-TDNN-koodaaja, joka tuottaa 1024-dim x-vektori. Ei transkriptiota tarvitaan, mutta huonompi laatu. Saattaa epäonnistua lähettää EOS lyhyitä tekstejä tai tiettyjä kieliä.
ECAPA-TDNN Architecture
| Vaihe | Tavaran kuvaus |
|---|---|
| TDNN | Aikaviive Hermoverkko (128-512 kanavaa, ytimen koko 5) |
| SE-Res2Net blokit | 3 korttelia puristaa-ja-tahdissa (512 kanavaa, laajeneminen 2/3/4) |
| MFA | Monikerroksinen ominaisuusyhdistelmä (1536 kanavaa + ReLU) |
| ASP | Osallistuvat tilastot Kokoaminen (1536 kanavaa, softmax ajan myötä) |
| FC | Täysin yhdistetty kerros (3072-1024 mitat) |
Painot (76 muuttujaa) sisältyvät Qwen3-TTS -suojaimiin . Ei erillistä latausta.
CLI-käyttö
# 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
Esimerkit
# 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
Monipuheinen vuoropuhelu
CosyVoice3 tukee monikaiuttimen vuoropuhelua äänen kloonauksen kanssa. Käytä --speakers -lippua kartoittaaksesi kaiuttimet viite äänitiedostoihin:
# 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
Kunkin kaiuttimen viiteääni käsitellään CAM++-kooderin kautta 192-dim:n uppoamisen poistamiseksi. Malli ladataan kerran ja käytetään uudelleen kaikille kaiuttimille. Katso CosyVoice3 -opas , jossa on yksityiskohtaiset tiedot vuoropuhelusyntaksista ja tunnetageista.
Viiteäänivinkkejä
- Kesto: 5-15 sekunnin puhe toimii parhaiten. Lyhyemmät leikkeet eivät ehkä kuvaa riittävästi lauluominaisuuksia; pidemmät leikkeet tuottavat vähenevän tuoton.
- Sinkkukaiutin: Viitteen tulisi sisältää vain yksi kaiutin. Monikaiutin tuottaa arvaamattomia tuloksia.
- Puhdista ääni: Minimoi taustamelu, musiikki ja jälkikäsittely. Käytä puheparannus -moduulia äänimerkkien puhdistamiseen ennen kloonausta.
- Luonnollinen puhe: Käytä mieluummin keskustelua kuulostavaa, luonnollista puhetta kuin kuiskauksia, huutoja tai laulamista.
Jos Qwen3-TTS, äänikloonaus toimii vain base -mallilla, ei customVoice. CosyVoice3 -äänen kloonaus toimii oletusmallilla. IndexTTS2 -malli vaatii --voice-sample, suorittaa tällä hetkellä vain erän synteesiä ja hyväksyy valinnaisen emotionaalisen/tyylisen kontrollin.
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)
)
Referenssi Audio Caching
Sekä synthesizeWithVoiceClone (x-vektori) että synthesizeWithVoiceCloneICL (ICL) välimuisti välimuistin esikäsittelyssä saman mallin instanssissa. x-vektorin polku välimuistit ovat ECAPA-TDNN-kaiuttimen sisääntulossa; ICL-polku lisäksi välimuistit Mimi koodekkikooderin ulostuloa vastaan. Välimuistin välimuisti on sisältöohjattu (raaka-näytteiden määrä + näytteenottonopeus) ja rajattu pieneen LRU:ään (oletusarvo 4), joten toistuvat sukupolvet samaa viiteaaltomuotoa vastaan ohittaa mel + encoderin ilman sitoutumatonta muistin kasvua.
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()