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
| Idioma | Codigo |
|---|---|
| Chines | chinese |
| Ingles | english |
| Japones | japanese |
| Coreano | korean |
| Alemao | german |
| Espanhol | spanish |
| Frances | french |
| Italiano | italian |
| Russo | russian |
Pipeline
CosyVoice3 sintetiza fala em tres estagios:
- LLM — o backbone Qwen2.5-0.5B gera tokens de fala FSQ (Finite Scalar Quantization) a partir de texto
- DiT Flow Matching — um Diffusion Transformer de 22 camadas converte tokens de fala em espectrogramas mel via integracao ODE de Euler
- 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.
| Parametro | Valor |
|---|---|
| Camadas | 24 |
| Dimensao oculta | 896 |
| Cabecas de query | 14 |
| Cabecas de key/value | 2 (GQA) |
| Vocabulario FSQ | 6561 |
| Quantizacao | 4 bits |
DiT Flow Matching
O Diffusion Transformer refina tokens de fala em espectrogramas mel usando flow matching condicional com guia livre de classificador.
| Parametro | Valor |
|---|---|
| Camadas | 22 |
| Dimensao | 1024 |
| Cabecas de atencao | 16 |
| Condicionamento | AdaLN (Adaptive Layer Norm) |
| Solver ODE | Euler, 10 passos |
| Taxa CFG | 0.7 |
Vocoder HiFi-GAN
Um vocoder Neural Source Filter (NSF) que converte espectrogramas mel em formas de onda.
| Parametro | Valor |
|---|---|
| Harmonicos | 8 |
| Razao de upsample | 480x (8 x 5 x 3 x ISTFT 4) |
| ISTFT | n_fft=16, hop=4 |
| Taxa de amostragem de saida | 24 kHz |
Pesos do modelo
| Modelo | Tamanho | HuggingFace |
|---|---|---|
| CosyVoice3-0.5B (LLM 4-bit) | 1.2 GB | aufklarer/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
- O codificador de falante CAM++ extrai um embedding de 192 dimensoes do audio de referencia via CoreML (Neural Engine)
- A projecao afim (192 → 80) condiciona o decodificador DiT flow matching na voz-alvo
- O vocoder HiFi-GAN converte o espectrograma mel condicionado pelo falante em audio a 24kHz
Codificador de falante
| Propriedade | Valor |
|---|---|
| Modelo | CAM++ (Context-Aware Masking++) |
| Embedding | 192 dimensoes |
| Backend | CoreML (Neural Engine, FP16) |
| Tamanho | ~14 MB |
| HuggingFace | aufklarer/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.
| Opcao | Padrao | Descricao |
|---|---|---|
--speakers | Mapeamento de locutores: s1=file.wav,s2=file.wav | |
--turn-gap | 0.2 | Silencio entre turnos (segundos) |
--crossfade | 0.0 | Sobreposicao 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
| Tag | Instrucao |
|---|---|
happy / excited | Fala feliz e com entusiasmo. |
sad | Fala triste com tom melancolico. |
angry | Fala com raiva e intensidade. |
whispers / whispering | Fala em um sussurro suave e gentil. |
laughs / laughing | Fala rindo. |
calm | Fala calma e tranquila. |
surprised | Fala com surpresa e admiracao. |
serious | Fala 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:
| Parametro | Valor |
|---|---|
| Top-k | 25 |
| Top-p | 0.8 |
| Repetition Aware Sampling | Habilitado (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.
| Estagio | Latencia |
|---|---|
| LLM (compilado) | ~13 ms/token |
| DiT Flow Matching | 370 - 520 ms |
| HiFi-GAN | 50 - 170 ms |
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.