CosyVoice3
Führe CosyVoice3 mit MLX lokal auf dem Mac aus, um Sprache in neun Sprachen zu erzeugen oder eine Stimme aus einer kurzen Aufnahme zu klonen. Höre dir Standardstimme, Klon und Stilsteuerung an und teste das Klonen mit Referenzaufnahme und genauem Transkript.
Hörproben · Eine Stimme mit der CLI klonen · Unterstützte Sprachen · Stimmenvergleich in fünf Sprachen mit Messmethode
Audio-Samples
Höre dir die vorhandene Standardstimme, den Klon von Kokoro af_heart und das Stilbeispiel an. Das CLI-Beispiel darunter verwendet eine andere FLEURS-Referenz.
8-bit CosyVoice3-Synthese mit festem Seed.
CosyVoice3-Clone aus dem Kokoro-af_heart-Referenzclip.
Helle, begeisterte Sprechweise mit --cosy-instruct.
Eine Stimme mit der CLI klonen
Lade die Referenzaufnahme als reference.wav herunter. Der Befehl enthält ihr genaues Transkript. Ersetze Aufnahme und Transkript, wenn du eine eigene Stimmprobe verwendest.
speech speak "Hello from the cloned voice." \
--engine cosyvoice \
--cosyvoice-variant bf16 \
--voice-sample reference.wav \
--cosy-reference-transcript "One can only wonder what the keyboard will become when something newer comes along." \
--seed 42 \
--output clone.wav
Verfügbarkeit von CosyVoice 3 vs. 3.5
Diese Anleitung und die Soniqo-Laufzeit unterstützen die offene Fun-CosyVoice3-0.5B-(3.0)-Reihe. Das offizielle Open-Source-Repository veröffentlicht und dokumentiert derzeit 3.0 einschließlich Fun-CosyVoice3-0.5B-2512; Gewichte oder Inferenzcode für CosyVoice 3.5 sind dort nicht verfügbar. Der separate Name cosyvoice-v3.5-plus ist eine Modell-ID für die gehostete API von Alibaba Cloud Model Studio und kein herunterladbarer Checkpoint in diesem Repository; daher beansprucht Soniqo keine lokale 3.5-Unterstützung.
Unterstützte Sprachen
| Sprache | Code |
|---|---|
| Chinesisch | chinese |
| Englisch | english |
| Japanisch | japanese |
| Koreanisch | korean |
| Deutsch | german |
| Spanisch | spanish |
| Französisch | french |
| Italienisch | italian |
| Russisch | russian |
Pipeline
CosyVoice3 synthetisiert Sprache in drei Stufen:
- LLM — Qwen2.5-0.5B-Backbone erzeugt aus Text FSQ-Sprach-Tokens (Finite Scalar Quantization)
- DiT-Flow-Matching — Ein 22-lagiger Diffusion Transformer wandelt Sprach-Tokens über Euler-ODE-Integration in Mel-Spektrogramme um
- HiFi-GAN — Neural-Source-Filter-Vocoder wandelt Mel-Spektrogramme in 24-kHz-Wellenformen um
Architektur
LLM (Qwen2.5-0.5B)
Die aktuelle Laufzeit unterstützt bf16 (Standard), 8bit und 8bit-full. Wähle ein Bundle mit --cosyvoice-variant. Das Sprachmodell erzeugt diskrete Sprachtokens autoregressiv.
| Parameter | Wert |
|---|---|
| Schichten | 24 |
| Hidden-Dimension | 896 |
| Query-Heads | 14 |
| Key/Value-Heads | 2 (GQA) |
| FSQ-Vokabular | 6561 |
| Quantisierung | bf16 / 8-bit |
DiT-Flow-Matching
Der Diffusion Transformer verfeinert Sprach-Tokens zu Mel-Spektrogrammen mittels konditionalem Flow-Matching mit Classifier-Free Guidance.
| Parameter | Wert |
|---|---|
| Schichten | 22 |
| Dimension | 1024 |
| Attention-Heads | 16 |
| Konditionierung | AdaLN (Adaptive Layer Norm) |
| ODE-Solver | Euler, 10 Schritte |
| CFG-Rate | 0,7 |
HiFi-GAN-Vocoder
Ein Neural-Source-Filter-Vocoder (NSF), der Mel-Spektrogramme in Wellenformen umwandelt.
| Parameter | Wert |
|---|---|
| Harmonische | 8 |
| Upsample-Verhältnis | 480x (8 x 5 x 3 x ISTFT 4) |
| ISTFT | n_fft=16, hop=4 |
| Ausgabe-Abtastrate | 24 kHz |
Modellgewichte
| Variante | LLM | DiT | Größe | HuggingFace |
|---|---|---|---|---|
8bit | int8, group=64 | bf16 | ~1,4 GB | aufklarer/CosyVoice3-0.5B-MLX-8bit |
8bit-full | int8, group=64 | int8, group=64 | ~1,6 GB | aufklarer/CosyVoice3-0.5B-MLX-8bit-full |
bf16 | bf16 | bf16 | ~2,1 GB | aufklarer/CosyVoice3-0.5B-MLX-bf16 |
Jedes Bundle enthält das LLM, den DiT-Flow-Matching-Decoder, den HiFi-GAN-Vocoder und den S3-Tokenizer-Referenz-Encoder für Zero-Shot-Stimmklonen. Kleinere Bundles für kleineren Download/Festplattenbedarf; wähle bf16, wenn LLM-/DiT-Quantisierungsrauschen stört (Langform-Synthese, Stimmklon-Treue).
CLI-Verwendung
.build/release/speech speak "Hallo Welt" --engine cosyvoice --language german -o output.wav
Beispiele
# Englisch
.build/release/speech speak "Hello, how are you?" --engine cosyvoice -o hello_en.wav
# Chinesisch
.build/release/speech speak "你好世界" --engine cosyvoice --language chinese -o hello_cn.wav
# Spanisch
.build/release/speech speak "Hola, buenos días" --engine cosyvoice --language spanish -o hello_es.wav
# Französisch
.build/release/speech speak "Bonjour le monde" --engine cosyvoice --language french -o hello_fr.wav
Stimmklonen
Klone eine beliebige Stimme aus einer kurzen Referenzaudio-Probe mit dem Schalter --voice-sample. CosyVoice3 nutzt den CAM++-Sprecher-Encoder, um ein 192-dimensionales Embedding zu extrahieren, das das DiT-Flow-Modell konditioniert.
# Stimmklonen
.build/release/speech speak "Hello in your voice" --engine cosyvoice --voice-sample reference.wav --cosy-reference-transcript "One can only wonder what the keyboard will become when something newer comes along." -o cloned.wav
# Sprachübergreifend: Stimme klonen, Deutsch sprechen
.build/release/speech speak "Guten Tag" --engine cosyvoice --voice-sample reference.wav --cosy-reference-transcript "One can only wonder what the keyboard will become when something newer comes along." --language german -o german.wav
So funktioniert es
- CAM++-Sprecher-Encoder extrahiert per CoreML (Neural Engine) ein 192-dimensionales Embedding aus dem Referenzaudio
- Affine Projektion (192 → 80) konditioniert den DiT-Flow-Matching-Decoder auf die Zielstimme
- HiFi-GAN-Vocoder wandelt das sprecherkonditionierte Mel-Spektrogramm in 24-kHz-Audio um
Sprecher-Encoder
| Eigenschaft | Wert |
|---|---|
| Modell | CAM++ (Context-Aware Masking++) |
| Embedding | 192 Dimensionen |
| Backend | CoreML (Neural Engine, FP16) |
| Größe | ~14 MB |
| HuggingFace | aufklarer/CamPlusPlus-Speaker-CoreML |
Das CAM++-Modell wird beim ersten Gebrauch von --voice-sample automatisch heruntergeladen. Siehe die Anleitung Stimmklonen für Hinweise zum Referenzaudio und die Swift-API.
Mehrsprecherdialog
Synthetisiere Gespräche zwischen mehreren Sprechern mit Inline-Sprecher-Tags. Jedem Sprecher wird über den Schalter --speakers eine Stimme aus einer Referenzaudiodatei zugeordnet.
# Dialog zweier Sprecher mit Stimmklonen
.build/release/speech speak "[S1] Hello there! [S2] Hey, how are you?" \
--engine cosyvoice --speakers s1=alice.wav,s2=bob.wav -o dialogue.wav
# Drei Sprecher
.build/release/speech speak "[A] Welcome. [B] Thanks! [C] Glad to be here." \
--engine cosyvoice --speakers a=host.wav,b=guest1.wav,c=guest2.wav -o panel.wav
Sprechernamen in den Tags sind Groß-/Kleinschreibungs-unabhängig und werden den Mapping-Schlüsseln zugeordnet. Zwischen den Zügen wird eine konfigurierbare Stillepause (Standard 0,2 s) eingefügt.
| Option | Standard | Beschreibung |
|---|---|---|
--speakers | Sprecher-Zuordnung: s1=file.wav,s2=file.wav | |
--turn-gap | 0.2 | Stille zwischen den Zügen (Sekunden) |
--crossfade | 0.0 | Crossfade-Überlappung zwischen den Zügen (Sekunden) |
Emotions- & Stil-Tags
Steuere den Sprechstil pro Segment mit Inline-Emotions-Tags. CosyVoice3 nutzt das Textpräfix vor dem <|endofprompt|>-Token als Stilanweisung — Emotions-Tags ersetzen dieses Präfix durch natürlichsprachige Anweisungen.
# Emotions-Tags
.build/release/speech speak "(excited) Wow, amazing! (sad) But I have to go..." \
--engine cosyvoice -o emotion.wav
# Kombiniert mit Sprechern
.build/release/speech speak "[S1] (happy) Great news! [S2] (surprised) Really?" \
--engine cosyvoice --speakers s1=alice.wav,s2=bob.wav -o combined.wav
# Freiform-Anweisung als Tag
.build/release/speech speak "(Speak like a pirate) Ahoy matey!" \
--engine cosyvoice -o pirate.wav
# Globale Anweisung (gilt für alle Segmente ohne Emotions-Tag)
.build/release/speech speak "Hello world" \
--engine cosyvoice --cosy-instruct "Speak cheerfully" -o cheerful.wav
Integrierte Emotions-Tags
| Tag | Anweisung |
|---|---|
happy / excited | Fröhlich und begeistert sprechen. |
sad | Traurig mit melancholischem Ton sprechen. |
angry | Wütend und mit Intensität sprechen. |
whispers / whispering | Leise, sanft flüsternd sprechen. |
laughs / laughing | Lachend sprechen. |
calm | Ruhig und friedlich sprechen. |
surprised | Überrascht und erstaunt sprechen. |
serious | In einem ernsten, förmlichen Ton sprechen. |
Unbekannte Tags werden als Freiform-Anweisungen durchgereicht, sodass (Speak in a slow, dramatic voice) direkt funktioniert.
Modell-Steuertokens (fl_-Tokens)
Intern verwendet das CosyVoice3-LLM spezielle Steuertokens — mit dem Präfix fl_ — um zwischen Modi zu wechseln (Zero-Shot-Cloning, anweisungsgesteuerte Synthese, Speichern eines Sprechers usw.). Diese Tokens sind Teil des Upstream-FunAudioLLM-Tokenizers; die Soniqo-Laufzeit gibt den richtigen automatisch basierend auf dem von Ihnen verwendeten CLI-Flag oder Swift-API-Aufruf aus, sodass Sie sie nie von Hand schreiben.
| Steuertoken | Modus | Aufruf aus Soniqo |
|---|---|---|
<|fl_speaker_clone|> | Zero-Shot-Stimmenklonen aus einer Referenz-Audioprobe | Übergeben Sie --voice-sample reference.wav auf der CLI oder setzen Sie voiceSample: auf der Swift-API. |
<|fl_speaker_instruct|> | Anweisungs- oder stilkonditionierte Synthese mit Standardstimme | Übergeben Sie --cosy-instruct "Speak cheerfully" oder verwenden Sie ein Inline-Tag (happy) ohne --voice-sample. |
<|fl_speaker_instruct2|> | Anweisungssynthese kombiniert mit einer geklonten Referenzstimme | Kombinieren Sie --voice-sample reference.wav mit --cosy-instruct "..." (oder einem Inline-Emotionstag) im selben Aufruf. |
<|fl_save_speaker|> | Speichert die Sprecher-Embedding zur Wiederverwendung, ohne das Referenzaudio bei jedem Aufruf neu zu kodieren | In der Soniqo-CLI nicht direkt verfügbar — Embeddings werden pro Aufruf berechnet. Um zu cachen, extrahieren Sie den 192-dimensionalen CAM++-Vektor selbst über das Sprecher-Embeddings-Modul und reichen Sie ihn weiter. |
<|fl_speaker_clone_zh|>, <|fl_speaker_clone_en|>, … | Sprachspezifische Zero-Shot-Cloning-Hinweise, die der Upstream-Tokenizer verwendet | Kombinieren Sie --voice-sample mit --language german|spanish|chinese|.... Soniqo wählt den korrekten Sprachhinweis anhand des --language-Flags aus. |
Die Tabelle oben ordnet jedes Upstream-fl_-Steuertoken seinem Soniqo-Äquivalent zu. Sie müssen fl_-Tokens niemals selbst in Ihren Prompt einfügen — übergeben Sie die High-Level-CLI-Flags oder Swift-API-Argumente, und die Laufzeit gibt die korrekte Sequenz aus: clone → instruct → instruct2 → save_speaker.
Sampling
Die LLM-Stufe verwendet die folgende Sampling-Konfiguration:
| Parameter | Wert |
|---|---|
| Top-k | 25 |
| Top-p | 0,8 |
| Repetition Aware Sampling | Aktiviert (window=10, tau_r=0,1) |
Repetition Aware Sampling (RAS) aus VALL-E 2 bestraft Tokens, die in den letzten 10 erzeugten Tokens vorkamen. Das verhindert repetitive Audio-Artefakte und verbessert die Stabilität der Ausgabe.
Leistung
Auf einem M2 Max erreicht CosyVoice3 einen RTF von etwa 0,5 — schneller als Echtzeit.
| Stufe | Latenz |
|---|---|
| LLM (kompiliert) | ~13 ms/Token |
| DiT-Flow-Matching | 370 - 520 ms |
| HiFi-GAN | 50 - 170 ms |
Die LLM-Stufe verwendet compile(shapeless: true) für die autoregressive Schleife, was den Rekompilierungs-Overhead über unterschiedliche Sequenzlängen eliminiert. Batch-verdoppeltes CFG halbiert die Anzahl der DiT-Forward-Passes von 20 auf 10.