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.

Standard-EnglischCosyVoice3 8-bit

8-bit CosyVoice3-Synthese mit festem Seed.

Voice Cloneaf_heart reference

CosyVoice3-Clone aus dem Kokoro-af_heart-Referenzclip.

Stilvorgabe--cosy-instruct

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

Was Soniqo unterstützt

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

SpracheCode
Chinesischchinese
Englischenglish
Japanischjapanese
Koreanischkorean
Deutschgerman
Spanischspanish
Französischfrench
Italienischitalian
Russischrussian

Pipeline

CosyVoice3 synthetisiert Sprache in drei Stufen:

  1. LLM — Qwen2.5-0.5B-Backbone erzeugt aus Text FSQ-Sprach-Tokens (Finite Scalar Quantization)
  2. DiT-Flow-Matching — Ein 22-lagiger Diffusion Transformer wandelt Sprach-Tokens über Euler-ODE-Integration in Mel-Spektrogramme um
  3. 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.

ParameterWert
Schichten24
Hidden-Dimension896
Query-Heads14
Key/Value-Heads2 (GQA)
FSQ-Vokabular6561
Quantisierungbf16 / 8-bit

DiT-Flow-Matching

Der Diffusion Transformer verfeinert Sprach-Tokens zu Mel-Spektrogrammen mittels konditionalem Flow-Matching mit Classifier-Free Guidance.

ParameterWert
Schichten22
Dimension1024
Attention-Heads16
KonditionierungAdaLN (Adaptive Layer Norm)
ODE-SolverEuler, 10 Schritte
CFG-Rate0,7

HiFi-GAN-Vocoder

Ein Neural-Source-Filter-Vocoder (NSF), der Mel-Spektrogramme in Wellenformen umwandelt.

ParameterWert
Harmonische8
Upsample-Verhältnis480x (8 x 5 x 3 x ISTFT 4)
ISTFTn_fft=16, hop=4
Ausgabe-Abtastrate24 kHz

Modellgewichte

VarianteLLMDiTGrößeHuggingFace
8bitint8, group=64bf16~1,4 GBaufklarer/CosyVoice3-0.5B-MLX-8bit
8bit-fullint8, group=64int8, group=64~1,6 GBaufklarer/CosyVoice3-0.5B-MLX-8bit-full
bf16bf16bf16~2,1 GBaufklarer/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

  1. CAM++-Sprecher-Encoder extrahiert per CoreML (Neural Engine) ein 192-dimensionales Embedding aus dem Referenzaudio
  2. Affine Projektion (192 → 80) konditioniert den DiT-Flow-Matching-Decoder auf die Zielstimme
  3. HiFi-GAN-Vocoder wandelt das sprecherkonditionierte Mel-Spektrogramm in 24-kHz-Audio um

Sprecher-Encoder

EigenschaftWert
ModellCAM++ (Context-Aware Masking++)
Embedding192 Dimensionen
BackendCoreML (Neural Engine, FP16)
Größe~14 MB
HuggingFaceaufklarer/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.

OptionStandardBeschreibung
--speakersSprecher-Zuordnung: s1=file.wav,s2=file.wav
--turn-gap0.2Stille zwischen den Zügen (Sekunden)
--crossfade0.0Crossfade-Ü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

TagAnweisung
happy / excitedFröhlich und begeistert sprechen.
sadTraurig mit melancholischem Ton sprechen.
angryWütend und mit Intensität sprechen.
whispers / whisperingLeise, sanft flüsternd sprechen.
laughs / laughingLachend sprechen.
calmRuhig und friedlich sprechen.
surprisedÜberrascht und erstaunt sprechen.
seriousIn 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.

SteuertokenModusAufruf 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 ReferenzstimmeKombinieren 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 kodierenIn 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 verwendetKombinieren Sie --voice-sample mit --language german|spanish|chinese|.... Soniqo wählt den korrekten Sprachhinweis anhand des --language-Flags aus.
Wenn Sie von FunAudioLLM/CosyVoice portieren

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:

ParameterWert
Top-k25
Top-p0,8
Repetition Aware SamplingAktiviert (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.

StufeLatenz
LLM (kompiliert)~13 ms/Token
DiT-Flow-Matching370 - 520 ms
HiFi-GAN50 - 170 ms
Kompilierung

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.