CosyVoice3

Fun-CosyVoice3-0.5B e um modelo de texto para fala em streaming para 9 idiomas. Usa um pipeline de tres estagios — geracao de tokens por LLM, DiT flow matching e vocoding HiFi-GAN — para produzir fala natural a 24 kHz a partir de entrada de texto.

Idiomas suportados

IdiomaCodigo
Chineschinese
Inglesenglish
Japonesjapanese
Coreanokorean
Alemaogerman
Espanholspanish
Francesfrench
Italianoitalian
Russorussian

Pipeline

CosyVoice3 sintetiza fala em tres estagios:

  1. LLM — o backbone Qwen2.5-0.5B gera tokens de fala FSQ (Finite Scalar Quantization) a partir de texto
  2. DiT Flow Matching — um Diffusion Transformer de 22 camadas converte tokens de fala em espectrogramas mel via integracao ODE de Euler
  3. HiFi-GAN — vocoder Neural Source Filter converte espectrogramas mel em formas de onda a 24 kHz

Arquitetura

LLM (Qwen2.5-0.5B)

O modelo de linguagem e quantizado em 4 bits e gera tokens de fala discretos de forma autoregressiva.

ParametroValor
Camadas24
Dimensao oculta896
Cabecas de query14
Cabecas de key/value2 (GQA)
Vocabulario FSQ6561
Quantizacao4 bits

DiT Flow Matching

O Diffusion Transformer refina tokens de fala em espectrogramas mel usando flow matching condicional com guia livre de classificador.

ParametroValor
Camadas22
Dimensao1024
Cabecas de atencao16
CondicionamentoAdaLN (Adaptive Layer Norm)
Solver ODEEuler, 10 passos
Taxa CFG0.7

Vocoder HiFi-GAN

Um vocoder Neural Source Filter (NSF) que converte espectrogramas mel em formas de onda.

ParametroValor
Harmonicos8
Razao de upsample480x (8 x 5 x 3 x ISTFT 4)
ISTFTn_fft=16, hop=4
Taxa de amostragem de saida24 kHz

Pesos do modelo

ModeloTamanhoHuggingFace
CosyVoice3-0.5B (LLM 4-bit)1.2 GBaufklarer/CosyVoice3-0.5B-MLX-4bit

Inclui LLM (quantizado em 4 bits), DiT flow matching e pesos do vocoder HiFi-GAN.

Uso do CLI

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

Exemplos

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

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

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

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

Clonagem de voz

Clone qualquer voz a partir de uma pequena amostra de audio de referencia usando a flag --voice-sample. CosyVoice3 usa o codificador de falante CAM++ para extrair um embedding de 192 dimensoes que condiciona o modelo DiT flow.

# Clonagem de voz
.build/release/audio speak "Hello in your voice" --engine cosyvoice --voice-sample reference.wav -o cloned.wav

# Entre idiomas: clona a voz, fala em alemao
.build/release/audio speak "Guten Tag" --engine cosyvoice --voice-sample reference.wav --language german -o german.wav

Como funciona

  1. O codificador de falante CAM++ extrai um embedding de 192 dimensoes do audio de referencia via CoreML (Neural Engine)
  2. A projecao afim (192 → 80) condiciona o decodificador DiT flow matching na voz-alvo
  3. O vocoder HiFi-GAN converte o espectrograma mel condicionado pelo falante em audio a 24kHz

Codificador de falante

PropriedadeValor
ModeloCAM++ (Context-Aware Masking++)
Embedding192 dimensoes
BackendCoreML (Neural Engine, FP16)
Tamanho~14 MB
HuggingFaceaufklarer/CamPlusPlus-Speaker-CoreML

O modelo CAM++ e baixado automaticamente no primeiro uso de --voice-sample. Veja o guia de Clonagem de voz para dicas de audio de referencia e a API Swift.

Dialogo multi-locutor

Sintetize conversas entre varios locutores usando tags inline de locutor. Cada locutor recebe uma voz de um arquivo de audio de referencia atraves da flag --speakers.

# Dialogo de dois locutores com clonagem de voz
.build/release/audio speak "[S1] Hello there! [S2] Hey, how are you?" \
    --engine cosyvoice --speakers s1=alice.wav,s2=bob.wav -o dialogue.wav

# Tres locutores
.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

Os nomes dos locutores nas tags sao insensiveis a maiusculas/minusculas e sao associados as chaves do mapeamento. Um intervalo de silencio configuravel (padrao 0.2s) e inserido entre turnos.

OpcaoPadraoDescricao
--speakersMapeamento de locutores: s1=file.wav,s2=file.wav
--turn-gap0.2Silencio entre turnos (segundos)
--crossfade0.0Sobreposicao com crossfade entre turnos (segundos)

Tags de emocao e estilo

Controle o estilo de fala por segmento usando tags de emocao inline. CosyVoice3 usa o prefixo de texto antes do token <|endofprompt|> como instrucao de estilo — tags de emocao sao mapeadas para instrucoes em linguagem natural que substituem esse prefixo.

# Tags de emocao
.build/release/audio speak "(excited) Wow, amazing! (sad) But I have to go..." \
    --engine cosyvoice -o emotion.wav

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

# Instrucao livre como tag
.build/release/audio speak "(Speak like a pirate) Ahoy matey!" \
    --engine cosyvoice -o pirate.wav

# Instrucao global (aplica-se a todos os segmentos sem tags de emocao)
.build/release/audio speak "Hello world" \
    --engine cosyvoice --cosy-instruct "Speak cheerfully" -o cheerful.wav

Tags de emocao integradas

TagInstrucao
happy / excitedFala feliz e com entusiasmo.
sadFala triste com tom melancolico.
angryFala com raiva e intensidade.
whispers / whisperingFala em um sussurro suave e gentil.
laughs / laughingFala rindo.
calmFala calma e tranquila.
surprisedFala com surpresa e admiracao.
seriousFala em tom serio e formal.

Tags desconhecidas sao passadas como instrucoes livres, entao (Speak in a slow, dramatic voice) funciona como esta.

Amostragem

O estagio LLM usa a seguinte configuracao de amostragem:

ParametroValor
Top-k25
Top-p0.8
Repetition Aware SamplingHabilitado (window=10, tau_r=0.1)

Repetition Aware Sampling (RAS), do VALL-E 2, penaliza tokens que apareceram nos ultimos 10 tokens gerados. Isso previne artefatos de audio repetitivos e melhora a estabilidade da saida.

Desempenho

Em um M2 Max, o CosyVoice3 alcanca um RTF de aproximadamente 0.5 — mais rapido que tempo real.

EstagioLatencia
LLM (compilado)~13 ms/token
DiT Flow Matching370 - 520 ms
HiFi-GAN50 - 170 ms
Compilacao

O estagio LLM usa compile(shapeless: true) para o loop autoregressivo, o que elimina o overhead de recompilacao para comprimentos de sequencia variaveis. O CFG com batch duplicado reduz pela metade o numero de forward passes do DiT, de 20 para 10.