Tłumaczenie automatyczne · Oryginał angielski
Klonowanie głosu
Klonowanie dowolnego głosu z krótkiej próbki dźwięku odniesienia. IndexTTS2 dodaje rodzime klonowanie MLX zeroshot z emocjami, tempo i pauzy, obok klonowania Qwen3-TTS i CosyVoice3-enkodera.
Jak to działa
- Zarejestruj lub dostarcz wzorcowa próbka dźwięku docelowego
- Głośnik osadzający ekstrakcję - enkoder głośnika przetwarza dźwięk referencyjny w wektor osadzania o ustalonym wymiarze
- Wstrzyknięcie - warunki osadzania głośnika w modelu TTS podczas syntezy
- Synteza mowy - model TTS generuje mowę odpowiadającą charakterystyce głosowej próbki referencyjnej
Silniki
Klonowanie głosowe jest dostępne z wieloma silnikami TTS. IndexTTS2 używa szybkiej kondycjonowania audio i stylów; Qwen3-TTS i CosyVoice3 używają enkoderów głośników:
F5-TTS oraz Higgs TTS 3 całkowicie pomiń koder głośnika: F5 warunki na surowym melu referencyjnym oraz jego zapis, Higgs kontynuuje kodekodowane ramki odniesienia.
| Silnik | Enkoder głośnika | Osadzanie | Wstecz |
|---|---|---|---|
| Qwen3-TTS | ECAPA-TDNN | 1024- dim x- wektor | MLX (GPU) |
| CosyVoice3 | CAM + + | 192- dim | CoreML (Neural Engine) |
| IndexTTS2 | w2v-BERT + MaskGCT + CAMPPlus | Kody semantyczne + modne ML + 192- dim | MLX (GPU) |
| F5-TTS | none - surowa transkrypcja referencyjna Mel + | 100-pasmowy mel odniesienia | MLX (GPU) |
| Higgs TTS 3 | Enkoder kodekowy Higgs | Kody referencyjne 8- codebook | MLX (GPU) |
Klonowanie głosu IndexTTS2
IndexTTS2 jest rodzimym silnikiem zeroshot MLX. Wymaga to klonowania głosu. --voice-sample, pobieranie aufklarer/IndexTTS2-MLX-fp16 domyślnie i obsługuje opcjonalne odniesienia emocjonalne / stylowe, ustawione lub wektorowe sterowanie emocjami, regulację głośnomówiącego i wewnętrzne ograniczenie pauzy. Obecnie działa tylko synteza wsadowa. Emocja może pochodzić z preset lub wektora wartości 8- (--indextts2-emotion, ważony --indextts2-emotion-weight) lub z osobnego odniesienia stylowego (--indextts2-emotion-audio); --indextts2-s2mel-steps etapy przepływu transakcji dla prędkości (domyślne 15, potwierdzony na ucho). float32-attention dekodowanie rework to syntetyzuje w RTF ≈ 1.0 w sprawie M5 Pro. Mandarin i mieszany tekst chiński / angielski są obsługiwane native - interpunkcji w górę i per- charakter pre- dokenizacja - liczby są odczytywane w słowach, a długi tekst jest syntetyzowany w segmentach interpunkcji.
Klonowanie głosu F5-TTS
Klony F5-TTS z ~ 10- drugiego odniesienia plus jego transkrypcja (--f5-reference-text) poprzez dopasowanie przepływu DiT - żaden enkoder głośnika w ogóle. Jest to najszybsza ścieżka klonowania w pakiecie (RTF 0.57 przy domyślnych stopniach przepływu 16, niższa jest szybsza) i najmniejsza (~ 0.8 GB szczyt RSS), obejmująca angielski i mandaryński. Przewodnik F5-TTS.
Higgs TTS 3 Klonowanie głosu
Higgs TTS 3 (4B) koduje klip referencyjny w ramki kodekowe i kontynuuje go: ekspresyjna dostawa konwersacyjna z wewnętrznymi emocjami, stylem i znacznikami SFX, 100+ języki, RTF 0.78. Zapis referencyjny (--higgs-ref-text) poprawia klonowanie. Higgs TTS 3 przewodnik.
CosyVoice3 + CAM + +
CosyVoice3 wykorzystuje CAM + + (Context- Aware Masking + +) encoder głośnika z projektu 3-Speaker Alibaba. 192- dim osadza model przepływu DiT za pomocą warstwy projekcyjnej affine (192 → 80), który został wspólnie przeszkolony z CosyVoice3.
CAM + + Architektura
| Etap | Opis |
|---|---|
| FCM | Moduł konwolucyjny z przodu (Conv2d + 2 ResBlocks, kanały 32) |
| TDNN | Opóźnienie czasu Sieci Neuralnej (320 do 128 kanałów, rozmiar jądra 5) |
| Bloki D- TDNN | 3 bloki połączone denseli- (12 / 24 / 16 warstw) z maskowaniem o świadomości kontekstowej |
| Staty basen | Średnie + standardowe łączenie odchyleń (statystyki globalne) |
| Gęstość | Linear projection to 192- dim osadzanie |
Model CoreML (~ 14 MB, FP16) działa na Neural Engine. Jest on pobierany automatycznie z aufklarer/CamPlusPlus-Speaker-CoreML po pierwszym użyciu.
Klonowanie głosu Qwen3-TTS
Qwen3-TTS obsługuje dwa tryby klonowania głosu:
Tryb ICL (zalecany)
Tryb in- Context Learning koduje dźwięk referencyjny do symboli kodekowych za pomocą kodera Mowa Mimi i prependuje je za pomocą zapisu referencyjnego. Daje to modelowi pełny kontekst akustyczny - wyższą jakość i niezawodność EOS (rozwiązuje problemy z krótkimi tekstami i językami nieangielskimi).
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
)
Konserwy Qwen3-TTS 1920 próbki na ramę kodeka w 24 kHz, w tym między nakładającymi się na siebie fragmentami dekodującymi. Obie preupsampling warstwy używają szerokości jądra 2 i krok 2 bez odpowiedniego przycinania, zachowując docelową formę fali w granicach fragmentów oraz podczas usuwania odniesienia ICL.
Tryb X- wektor
Używa enkodera ECAPA- TDNN, który wytwarza 1024- dim x- wektor. Nie wymaga zapisu, ale niższej jakości. Może nie emitować EOS na krótkich tekstach lub niektórych językach.
Architektura ECAPA-TDNN
| Etap | Opis |
|---|---|
| TDNN | Opóźnienie czasu Sieci Neuralnej (128 do 512 kanałów, rozmiar jądra 5) |
| Bloki SE-Res2Net | 3 bloki z pobudzeniem (512 kanałów, rozszerzenie 2 / 3 / 4) |
| FPA | Wielowarstwowa Agregacja (1536 kanałów + ReLU) |
| ASP | Atencyjne statystyki Pooling (1536 kanałów, softmax w czasie) |
| FC | W pełni połączona warstwa (wymiary od 3072 do 1024) |
Wagi (parametry 76) są zawarte w sejftenerach Qwen3-TTS - nie wymaga się osobnego pobierania.
Zastosowanie 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
Przykłady
# 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 wielomówców
CosyVoice3 obsługuje wielogłośnikowy dialog z klonowaniem głosowym. --speakers flaga do mapowania znaczników głośników do plików audio odniesienia:
# 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
Referencyjny dźwięk każdego głośnika jest przetwarzany za pośrednictwem kodera CAM + + w celu uzyskania osadzenia 192- dim. Model jest ładowany raz i ponownie używany dla wszystkich głośników. Przewodnik CosyVoice3 w celu uzyskania pełnych informacji na temat składni dialogu i znaczników emocji.
Referencyjne wskazówki audio
- Czas trwania: 5 do 15 sekundy mowy działa najlepiej. Krótsze klipy mogą nie uchwycić wystarczającej ilości cech wokalnych; dłuższe klipy zapewniają malejące zwroty.
- Jeden głośnik: Odniesienie powinno zawierać tylko jeden głośnik. Wielogłośnikowy dźwięk przyniesie nieprzewidywalne wyniki.
- Czysty dźwięk: Minimalizacja hałasu tła, muzyki i pogłosu. zwiększenie głośności moduł do czyszczenia hałaśliwych odniesień przed klonowaniem.
- Przemowa naturalna: Używaj konwersacji, brzmiącej naturalnie zamiast szeptów, krzyków lub śpiewania.
Dla Qwen3-TTS klonowanie głosu działa z base tylko model - nie customVoice. CosyVoice3 klonowanie głosowe działa z domyślnym modelem. IndexTTS2 wymaga --voice-sample, obecnie działa tylko synteza wsadowa, i akceptuje opcjonalne emocje / styl kontroli.
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)
)
Referencyjne okablowanie audio
Oba synthesizeWithVoiceClone (x- wektor) oraz synthesizeWithVoiceCloneICL (ICL) buforuje ich wstępne przetwarzanie perreferencyjne w różnych wywołaniach w tej samej instancji modelu. Ścieżka wektorowa x- buforuje głośnik ECAPA- TDNN; Ścieżka ICL dodatkowo buforuje wyjście kodeka kodekowego Mimi. Podkładka jest adresowana do content- addressed (hash z próbek surowych + częstotliwość próbkowania) i ograniczona do małego LRU (domyślne wpisy 4), więc powtarzane pokolenia przeciwko tej samej fali odniesienia pomijają przechodznik ML + encoder bez nieograniczonego wzrostu pamięci.
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()