CosyVoice3

Fun-CosyVoice3-0.5B, 9 dili destekleyen bir streaming metinden konuşma modelidir. LLM token üretimi, DiT flow matching ve HiFi-GAN vocoder'dan oluşan üç aşamalı bir pipeline ile metin girişinden doğal 24 kHz konuşma üretir. CosyVoice 3 olarak da yazılan bu model, FunAudioLLM'in CosyVoice ailesinin en yeni üyesidir.

Desteklenen diller

DilKod
Çincechinese
İngilizceenglish
Japoncajapanese
Korecekorean
Almancagerman
İspanyolcaspanish
Fransızcafrench
İtalyancaitalian
Rusçarussian

Pipeline

CosyVoice3 konuşmayı üç aşamada sentezler:

  1. LLM — Qwen2.5-0.5B omurgası metinden FSQ (Finite Scalar Quantization) konuşma token'ları üretir
  2. DiT Flow Matching — 22 katmanlı bir Diffusion Transformer, Euler ODE entegrasyonuyla konuşma token'larını mel spektrogramlarına dönüştürür
  3. HiFi-GAN — Neural Source Filter vocoder mel spektrogramlarını 24 kHz dalga formlarına dönüştürür

Mimari

LLM (Qwen2.5-0.5B)

Dil modeli ayrık konuşma token'larını otoregresif olarak üretir. Runtime dört kuantizasyon sürümünde gelir — 4-bit, 8-bit, 8-bit-full (int8 LLM + int8 DiT) ve bf16 (kuantize edilmemiş) — her çağrıda --cosyvoice-variant ile seçilir.

ParametreDeğer
Katman sayısı24
Gizli boyut896
Query başlıkları14
Key/Value başlıkları2 (GQA)
FSQ kelime dağarcığı6561
Kuantizasyon4-bit

DiT Flow Matching

Diffusion Transformer, sınıflandırıcısız yönlendirme ile koşullu flow matching kullanarak konuşma token'larını mel spektrogramlarına rafine eder.

ParametreDeğer
Katman sayısı22
Boyut1024
Attention başlıkları16
KoşullandırmaAdaLN (Adaptive Layer Norm)
ODE solverEuler, 10 adım
CFG oranı0.7

HiFi-GAN Vocoder

Mel spektrogramlarını dalga formuna dönüştüren Neural Source Filter (NSF) vocoder.

ParametreDeğer
Harmonikler8
Upsample oranı480x (8 x 5 x 3 x ISTFT 4)
ISTFTn_fft=16, hop=4
Çıkış örnekleme frekansı24 kHz

Model ağırlıkları

SürümLLMDiTBoyutHuggingFace
4bit (varsayılan)int4, group=64bf16~1.2 GBaufklarer/CosyVoice3-0.5B-MLX-4bit
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

Her bundle LLM, DiT flow matching dekoder, HiFi-GAN vocoder ve zero-shot ses klonlama için gereken S3-Tokenizer referans kodlayıcıyı içerir. Daha küçük indirme/disk için küçük bundle'ları seçin; LLM/DiT kuantizasyon gürültüsü sorun olduğunda (uzun-form sentez, ses klonlama doğruluğu) bf16'yı seçin.

CLI kullanımı

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

Örnekler

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

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

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

# French
.build/release/speech speak "Bonjour le monde" --engine cosyvoice --language french -o hello_fr.wav

Ses klonlama

--voice-sample flag'i ile kısa bir referans klipten herhangi bir sesi klonlayın. CosyVoice3, DiT flow modelini koşullandıran 192 boyutlu bir embedding çıkarmak için CAM++ konuşmacı kodlayıcısını kullanır.

# Voice cloning
.build/release/speech speak "Hello in your voice" --engine cosyvoice --voice-sample reference.wav -o cloned.wav

# Cross-language: clone voice, speak in German
.build/release/speech speak "Guten Tag" --engine cosyvoice --voice-sample reference.wav --language german -o german.wav

Nasıl çalışır

  1. CAM++ konuşmacı kodlayıcısı CoreML (Neural Engine) üzerinden referans sesten 192 boyutlu bir embedding çıkarır
  2. Affine projeksiyon (192 → 80) DiT flow matching kod çözücüsünü hedef ses üzerinde koşullandırır
  3. HiFi-GAN vocoder konuşmacıya koşullandırılmış mel spektrogramını 24 kHz sese dönüştürür

Konuşmacı kodlayıcısı

ÖzellikDeğer
ModelCAM++ (Context-Aware Masking++)
Embedding192 boyut
Arka uçCoreML (Neural Engine, FP16)
Boyut~14 MB
HuggingFaceaufklarer/CamPlusPlus-Speaker-CoreML

CAM++ modeli, --voice-sample ilk kullanıldığında otomatik olarak indirilir. Referans ses ipuçları ve Swift API için Ses klonlama kılavuzuna bakın.

Çok konuşmacılı diyalog

Satır içi konuşmacı etiketleri kullanarak birden fazla konuşmacı arasındaki diyalogları sentezleyin. Her konuşmacıya --speakers flag'i aracılığıyla bir referans ses dosyasından bir ses atanır.

# 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

# Three speakers
.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

Etiketlerdeki konuşmacı adları büyük/küçük harfe duyarsızdır ve eşleme anahtarlarıyla eşleştirilir. Sıralar arasına yapılandırılabilir bir sessizlik aralığı (varsayılan 0,2s) eklenir.

SeçenekVarsayılanAçıklama
--speakersKonuşmacı eşlemesi: s1=file.wav,s2=file.wav
--turn-gap0.2Sıralar arasındaki sessizlik (saniye)
--crossfade0.0Sıralar arasındaki crossfade çakışması (saniye)

Duygu ve stil etiketleri

Satır içi duygu etiketleriyle konuşma stilini segment bazında kontrol edin. CosyVoice3, <|endofprompt|> token'ından önceki metin önekini stil talimatı olarak kullanır — duygu etiketleri, bu öneki değiştiren doğal dil talimatlarına eşlenir.

# Emotion tags
.build/release/speech speak "(excited) Wow, amazing! (sad) But I have to go..." \
    --engine cosyvoice -o emotion.wav

# Combined with speakers
.build/release/speech speak "[S1] (happy) Great news! [S2] (surprised) Really?" \
    --engine cosyvoice --speakers s1=alice.wav,s2=bob.wav -o combined.wav

# Freeform instruction as tag
.build/release/speech speak "(Speak like a pirate) Ahoy matey!" \
    --engine cosyvoice -o pirate.wav

# Global instruction (applies to all segments without emotion tags)
.build/release/speech speak "Hello world" \
    --engine cosyvoice --cosy-instruct "Speak cheerfully" -o cheerful.wav

Hazır duygu etiketleri

EtiketTalimat
happy / excitedMutlu ve heyecanlı bir şekilde konuşun.
sadHüzünlü, melankolik bir tonla konuşun.
angryÖfke ve yoğunlukla konuşun.
whispers / whisperingYumuşak, nazik bir fısıltıyla konuşun.
laughs / laughingGülerek konuşun.
calmSakin ve huzurlu konuşun.
surprisedŞaşkınlık ve hayretle konuşun.
seriousCiddi, resmi bir tonla konuşun.

Bilinmeyen etiketler serbest biçim talimatlar olarak geçer, böylece (Speak in a slow, dramatic voice) olduğu gibi çalışır.

Model kontrol token'ları (fl_ token'ları)

Dahili olarak CosyVoice3 LLM, modlar arasında (zero-shot klonlama, talimatla sentez, konuşmacı kaydetme vb.) geçiş yapmak için fl_ önekli özel kontrol token'ları kullanır. Bu token'lar upstream FunAudioLLM tokenizer'ının bir parçasıdır; Soniqo çalışma zamanı, kullandığınız CLI flag'ine veya Swift API çağrısına göre doğru token'ı otomatik olarak yayar; bu yüzden onları asla elle yazmazsınız.

Kontrol token'ıModSoniqo'dan nasıl çağrılır
<|fl_speaker_clone|>Referans bir ses klipinden zero-shot ses klonlamaCLI'de --voice-sample reference.wav geçirin veya Swift API'de voiceSample: ayarlayın.
<|fl_speaker_instruct|>Varsayılan bir sesle talimat veya stil koşullu sentez--cosy-instruct "Speak cheerfully" geçirin veya --voice-sample olmadan satır içi (happy) etiketi kullanın.
<|fl_speaker_instruct2|>Klonlanmış referans sesle birlikte talimat senteziAynı çağrıda --voice-sample reference.wav ile --cosy-instruct "..." (veya satır içi duygu etiketi) birleştirin.
<|fl_save_speaker|>Her çağrıda referans sesi yeniden kodlamadan tekrar kullanmak için bir konuşmacının embedding'ini kalıcı hale getirmeSoniqo CLI'de doğrudan açığa çıkarılmamıştır — embedding'ler çağrı başına hesaplanır. Önbelleğe almak için 192 boyutlu CAM++ vektörünü Konuşmacı embedding modülü aracılığıyla kendiniz çıkarıp ileriye geçirin.
<|fl_speaker_clone_zh|>, <|fl_speaker_clone_en|>, …Upstream tokenizer tarafından kullanılan dile özgü zero-shot klonlama ipuçları--voice-sample ile --language german|spanish|chinese|... birleştirin. Soniqo, --language flag'inden doğru dil ipucunu seçer.
FunAudioLLM/CosyVoice'tan port ediyorsanız

Yukarıdaki tablo, her upstream fl_ kontrol token'ını Soniqo eşdeğerine eşler. Prompt'unuza asla fl_ token'ı eklemenize gerek yoktur — üst düzey CLI flag'leri veya Swift API argümanlarını geçirin; çalışma zamanı doğru diziyi yayacaktır: clone → instruct → instruct2 → save_speaker.

Sampling

LLM aşaması aşağıdaki sampling yapılandırmasını kullanır:

ParametreDeğer
Top-k25
Top-p0.8
Repetition Aware SamplingEtkin (window=10, tau_r=0.1)

VALL-E 2'den gelen Repetition Aware Sampling (RAS), son üretilen 10 token'da görünen token'ları cezalandırır. Bu, tekrarlayan ses artefaktlarını önler ve çıkış kararlılığını artırır.

Performans

M2 Max üzerinde CosyVoice3 yaklaşık 0,5 RTF elde eder — gerçek zamandan daha hızlı.

AşamaGecikme
LLM (derlenmiş)~13 ms/token
DiT Flow Matching370 - 520 ms
HiFi-GAN50 - 170 ms
Derleme

LLM aşaması otoregresif döngü için compile(shapeless: true) kullanır; bu da değişen dizi uzunluklarında yeniden derleme yükünü ortadan kaldırır. Toplu-iki-katına-çıkarılmış CFG, DiT ileri geçişlerinin sayısını 20'den 10'a yarıya indirir.