CosyVoice3

Fun-CosyVoice3-0.5B ist ein Streaming-TTS-Modell für 9 Sprachen. Es nutzt eine dreistufige Pipeline — LLM-Token-Generierung, DiT-Flow-Matching und HiFi-GAN-Vocoding — um aus Texteingaben natürliche 24-kHz-Sprache zu erzeugen.

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)

Das Sprachmodell ist 4-Bit-quantisiert und erzeugt diskrete Sprach-Tokens autoregressiv.

ParameterWert
Schichten24
Hidden-Dimension896
Query-Heads14
Key/Value-Heads2 (GQA)
FSQ-Vokabular6561
Quantisierung4-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

ModellGrößeHuggingFace
CosyVoice3-0.5B (4-bit LLM)1,2 GBaufklarer/CosyVoice3-0.5B-MLX-4bit

Enthält LLM (4-Bit-quantisiert), DiT-Flow-Matching und HiFi-GAN-Vocoder-Gewichte.

CLI-Verwendung

.build/release/audio speak "Hallo Welt" --engine cosyvoice --language german -o output.wav

Beispiele

# Englisch
.build/release/audio speak "Hello, how are you?" --engine cosyvoice -o hello_en.wav

# Chinesisch
.build/release/audio speak "你好世界" --engine cosyvoice --language chinese -o hello_cn.wav

# Spanisch
.build/release/audio speak "Hola, buenos días" --engine cosyvoice --language spanish -o hello_es.wav

# Französisch
.build/release/audio 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/audio speak "Hello in your voice" --engine cosyvoice --voice-sample reference.wav -o cloned.wav

# Sprachübergreifend: Stimme klonen, Deutsch sprechen
.build/release/audio speak "Guten Tag" --engine cosyvoice --voice-sample reference.wav --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/audio 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/audio 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/audio speak "(excited) Wow, amazing! (sad) But I have to go..." \
    --engine cosyvoice -o emotion.wav

# Kombiniert mit Sprechern
.build/release/audio 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/audio speak "(Speak like a pirate) Ahoy matey!" \
    --engine cosyvoice -o pirate.wav

# Globale Anweisung (gilt für alle Segmente ohne Emotions-Tag)
.build/release/audio 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.

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.